Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Obtener y representar datos de orientación y velocidad angular en su dispositivo móvil

Este ejemplo muestra cómo representar datos desde varios sensores en un dispositivo móvil Android™ o iOS juntos en un cronograma. Las mediciones de la velocidad angular y la orientación se recopilarán del dispositivo y se representarán a lo largo del tiempo absoluto. Esto permitirá visualizar las correlaciones entre los datos de los dos sensores de acuerdo con la hora actual de la medición.

Configurar su dispositivo móvil

Para recibir datos desde un dispositivo móvil en MATLAB®, necesitará instalar y configurar la app MATLAB Mobile™ en su dispositivo móvil.

Inicie sesión en MathWorks® Cloud desde la configuración de MATLAB Mobile.

Crear una conexión con su dispositivo móvil

En la pantalla Comandos de MATLAB Mobile, utilice el comando mobiledev para crear un objeto que represente su dispositivo móvil.

m = mobiledev;

La salida mostrada debería mostrar Connected: 1, indicando que el objeto mobiledev ha establecido correctamente una conexión con la app.

Preparar la adquisición de datos desde varios sensores

Utilice las propiedades de mobiledev adecuadas para activar los sensores en el dispositivo.

m.AngularVelocitySensorEnabled = 1;
m.OrientationSensorEnabled = 1;

Comenzar a obtener datos

Después de activar los sensores, la pantalla Sensores de MATLAB Mobile mostrará los datos actuales medidos por los sensores. La propiedad Logging permite comenzar a enviar los datos del sensor a mobiledev.

m.Logging = 1;

El dispositivo está transmitiendo ahora los datos del sensor.

Al inicio del registro, el dispositivo se encuentra colocado en posición horizontal en una mesa con la pantalla hacia arriba. El eje Y positivo del sensor de velocidad angular se define como el eje que se extiende más allá de la parte superior del dispositivo. La inclinación positiva del sensor de orientación se define como una rotación en el sentido de las agujas del reloj en torno al eje Y cuando está mirando a la dirección positiva del eje.

Durante el registro, el dispositivo se gira hacia arriba y hacia abajo varias veces en torno a su eje Y. Esto provoca cambios del eje Y en la velocidad angular y cambios de inclinación en la orientación.

Dejar de obtener datos

La propiedad Logging se utiliza de nuevo para que el dispositivo deje de enviar los datos del sensor a mobiledev.

m.Logging = 0;

Recuperar los datos registrados

Se puede acceder a cada dato del sensor desde el objeto mobiledev. Se crean dos variables de marca de tiempo diferentes porque es posible que el dispositivo no guarde los datos de la velocidad angular y de la orientación al mismo tiempo.

[av,tav] = angvellog(m);
[o,to] = orientlog(m);

Representar los datos no procesados de sensores

Los datos de interés de los sensores se aíslan en variables separadas y se representan.

yAngVel = av(:,2);
roll = o(:,3);
plot(tav,yAngVel,to,roll);
legend('Y Angular Velocity','Roll');
xlabel('Relative time (s)');

Los datos se representan en segundos relativos a la propiedad InitialTimestamp de mobiledev. Esta propiedad proporciona el tiempo absoluto del primer punto de datos guardado por un sensor y enviado a MATLAB. Actúa como el punto de referencia para las marcas de tiempo de todos los datos del sensor a los que se accede utilizando funciones como angvellog y orientlog, que se dan en segundos relativos a InitialTimestamp.

Convertir a marcas de tiempo absolutas

Para convertir todas las marcas de tiempo de los sensores a marcas de tiempo absolutas, el valor InitialTimestamp se convierte a un objeto datetime. Las marcas de tiempo de sensores individuales, que están en unidades de segundos, se convierten a seconds. Esto simplifica la aritmética de la fecha de convertir marcas de tiempo relativas en marcas de tiempo absolutas.

tInit = datetime(m.InitialTimestamp,'InputFormat','dd-MM-yyyy HH:mm:ss.SSS');
tAngVel = tInit + seconds(tav);
tOrient = tInit + seconds(to);

Representar varios sensores a lo largo del tiempo absoluto

Ambos sensores tienen ahora marcas de tiempo absolutas representadas utilizando datetime. Esto hace que resulte más fácil visualizar el tiempo real en el que sucedieron eventos importantes en las lecturas de los sensores.

El sensor de orientación utiliza unidades de grados, mientras que el sensor de velocidad angular utiliza unidades de radianes por segundo. Antes de representarlo de nuevo, yAngVel se convierte a grados por segundo.

yAngVelDeg = yAngVel * 180/pi;

plot(tAngVel,yAngVelDeg,tOrient,roll);
legend('Y Angular Velocity','Roll');
xlabel('Absolute time (s)');

Borrar el contenido

Desconecte los sensores activados y borre mobiledev.

m.AngularVelocitySensorEnabled = 0;
m.OrientationSensorEnabled = 0;

clear m;