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 referencia —
NEDFormato de orientación —
quaternionFactor de diezmación —
1Ruido inicial del proceso —
imufilter.defaultProcessNoiseRuido del acelerómetro —
0.0001924722Ruido del giroscopio —
9.1385e-5Ruido de deriva del giroscopio —
3.0462e-13Ruido de aceleración lineal —
0.0096236100000000012Factor de decaimiento de la aceleración lineal —
0.5Simular 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
.
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);
