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;