Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

Computar orientación a partir de datos IMU registrados

Cargue el archivo rpy_9axis en el espacio de trabajo. El archivo contiene datos registrados de los sensores acelerómetro, giroscopio y magnetómetro de un dispositivo que oscila en cabeceo (alrededor del eje y), luego en guiñada (alrededor del eje z) y luego en balanceo (alrededor del eje x). El archivo también contiene la frecuencia de muestreo de la grabación.

load("rpy_9axis.mat","sensorData")

Lea las lecturas de aceleración y giroscopio de los datos registrados del sensor.

accel = sensorData.Acceleration;
gyro = sensorData.AngularVelocity;

Modelo de ejemplo

Abra el modelo de Simulink® .

modelname = "ComputeOrientationFromIMUData";
open_system(modelname)

El modelo lee las lecturas del acelerómetro y del giroscopio desde el espacio de trabajo de MATLAB® utilizando el bloque Constant. La frecuencia de muestreo del bloque Constante se establece en la frecuencia de muestreo del sensor. En este ejemplo, la frecuencia de muestreo se establece en 0,005. El modelo utiliza el bloque de función MATLAB personalizado readSamples para ingresar una muestra de datos del sensor al bloque IMU Filter en cada paso de tiempo de simulación. Luego, el modelo calcula una estimación de la orientación del cuerpo del sensor utilizando un bloque de filtro IMU con estos parámetros:

  • Marco de referenciaNED

  • Formato de orientación — quaternion

  • Factor de diezmación — 1

  • Ruido inicial del proceso — imufilter.defaultProcessNoise

  • Ruido del acelerómetro — 0.0001924722

  • Ruido del giroscopio — 9.1385e-5

  • Ruido de deriva del giroscopio — 3.0462e-13

  • Ruido de aceleración lineal — 0.0096236100000000012

  • Factor de decaimiento de la aceleración lineal — 0.5

  • Simular usando — Interpreted execution

De forma predeterminada, el bloque Filtro IMU genera la orientación como un vector de cuaterniones. El modelo utiliza el bloque de función personalizado MATLAB hquat2eul para convertir los ángulos de cuaternión en ángulos de Euler.

Simular modelo

Establezca el tiempo de inicio en 0,005 segundos y el tiempo de parada en 8 segundos. Puedes calcular el tiempo de parada como $\,sample\, rate \times number\, of\, samples$.

set_param(modelname,"StartTime","0.005","StopTime","8")

Ejecute el modelo. El bloque IMU Filter combina los datos de las lecturas del acelerómetro y del giroscopio y calcula la orientación del cuerpo del sensor en las direcciones x, y y z. Luego, el modelo traza los resultados calculados. El modelo utiliza el bloque Alcance para trazar la orientación calculada del cuerpo del sensor a lo largo del tiempo.

sim(modelname);