Main Content

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

Estimar la orientación utilizando el filtro AHRS y los datos IMU en Simulink

Este ejemplo muestra cómo transmitir datos IMU desde sensores conectados a la placa Arduino® y estimar la orientación utilizando el filtro AHRS y el sensor IMU.

Productos MathWorks necesarios

  • MATLAB®

  • Simulink®

  • Paquete de soporte Simulink para hardware Arduino

  • Ya sea Navigation Toolbox™ o Sensor Fusion and Tracking Toolbox™

Hardware requerido

1. Cualquiera de las placas Arduino que se indican a continuación:

  • arduino leonardo

  • ArduinoMega 2560

  • Arduino MegaADK

  • Microarduino

  • Arduino Nano 3.0

  • ArduinoUno

  • Arduino debido

  • Arduino MKR1000

  • Arduino MKR WIFI 1010

  • Arduino MKR CERO

  • Arduino Nano 33 IoT

  • Arduino Nano 33 BLE Sentido

2. Sensor IMU con acelerómetro, giroscopio y magnetómetro. En este ejemplo, se utiliza la placa de expansión del sensor X-NUCLEO-IKS01A2 . El sensor LSM6DSL en la placa de expansión se utiliza para obtener valores de aceleración y tasa angular. El sensor LSM303AGR en la placa de expansión se utiliza para obtener el valor del campo magnético. Los datos del sensor se pueden leer mediante el protocolo I2C.

Conexión de hardware

El escudo X-NUCLEO-IKS01A2 viene con conectores Arduino UNO, lo que facilita la interfaz con la placa UNO. Para otras placas, conecte los pines SDA, SCL, 3.3V y GND de la placa Arduino a los pines respectivos en el protector del sensor.

Configuración de Hardware en el modelo.

El ejemplo utiliza dos modelos, AnalyseIMUData y EstimateOrientationUsingAHRSandIMU. Ambos modelos están preconfigurados para funcionar con Arduino UNO. Si está utilizando una placa Arduino diferente, cambie la placa de hardware siguiendo los siguientes pasos:

1. Haga clic en Configuración de hardware en la pestaña Hardware de la barra de herramientas de Simulink .

2. En el cuadro de diálogo Parámetros de configuración, seleccione Implementación de hardware.

3. En la lista Placa de hardware, seleccione el tipo de placa Arduino que está utilizando.

4. Haga clic en Aplicar. Haga clic en Aceptar para cerrar el cuadro de diálogo.

Tarea 1: leer y calibrar los valores del sensor

Esta sección describe cómo leer y calibrar los valores del sensor para el algoritmo de estimación de orientación. Para leer y analizar valores, abra el modelo AnalyseIMUData Simulink .

Lectura de aceleración y tasa angular del sensor LSM6DSL

El paquete de soporte Simulink para hardware Arduino proporciona un bloque LSM6DSL IMU Sensor para leer la aceleración y la velocidad angular a lo largo de los ejes X, Y y Z del sensor LSM6DSL conectado a Arduino. El bloque genera aceleración en m/s2 y velocidad angular en rad/s. El sensor se puede configurar aún más seleccionando las opciones que aparecen en la máscara de bloque.

Lectura de valores del sensor del modelo LSM303AGR

Para leer los valores del campo magnético utilizando el sensor LSM303AGR, el ejemplo utiliza los bloques I2C Controller Read y I2C Controller Write en el paquete de soporte.

La dirección I2C del sensor LSM303AGR es 0x1E. Esta dirección se especifica como Dirección periférica en el bloque I2C Read/I2C Write que se utiliza para configurar y leer el valor del campo magnético del sensor.

Dependiendo de la velocidad de datos de salida (ODR) requerida, se debe escribir un valor en el registro CFG_REG_A_M (0x60) del sensor. Para ver los ODR disponibles, consulte el LSM303AGR datasheet. Esta es una operación única necesaria para inicializar el sensor y se realiza utilizando el bloque Initialize Function en el modelo.

El campo magnético se lee de los registros de salida (0x68 - 0x6D) del sensor utilizando el bloque de lectura I2C y se convierte a microtesla como lo requiere el ejemplo.

Realizar calibración del Magnetómetro

Para obtener mediciones precisas del sensor, es necesario calibrarlo. En esta sección, consideramos la calibración del magnetómetro para compensar las distorsiones del hierro duro. Los efectos del hierro duro son fuentes estacionarias de ruido magnético perturbador. A menudo, estos provienen de otros objetos metálicos que se encuentran en la placa de circuito del magnetómetro. Estas distorsiones se pueden corregir restando el valor de corrección de las lecturas del magnetómetro para cada eje.

Para encontrar los valores de corrección, haga lo siguiente:

1. Abra el modelo AnalyseIMUData. El modelo utiliza el bloque Al espacio de trabajo (out.MagneticField en el modelo) para registrar datos del magnetómetro.

El modelo ya está configurado para funcionar en modo Connected IO. La simulación utilizando Connected IO le permite ejecutar su algoritmo en Simulink con datos periféricos del hardware. Para obtener más detalles, consulte .

2. Ejecute Connected IO haciendo clic en el botón Ejecutar correspondiente a Ejecutar con IO en la pestaña Hardware.

3. Mientras el modelo está funcionando, gire el sensor de 0 a 360 grados a lo largo de cada eje.

4. Haga clic en el botón Detener para detener la simulación de E/S conectada

6. Los valores del campo magnético se registran en el espacio de trabajo base de MATLAB como variable out.MagneticField. Utilice la función magcal (Sensor Fusion and Tracking Toolbox) en los valores registrados en la ventana de comandos de MATLAB para obtener los coeficientes de corrección.

[softIronFactor, hardIronOffset] = magcal(out.MagneticField);

"Nota": Los valores de corrección cambian con el entorno.

Tarea 2. Combinar datos del sensor con filtro AHRS

Esta sección describe cómo fusionar los datos del sensor para estimar la orientación. Abra el modelo EstimateOrientationUsingAHRSandIMU Simulink .

Bloques de sensores

La primera parte del modelo es para leer los valores del sensor, que se describe en la sección anterior. Si realiza cambios en los bloques de sensores en la tarea anterior, realice también los cambios correspondientes en los bloques de este modelo.

Bloque Preprocesador

El bloque de preprocesador del modelo acepta aceleración, velocidad angular y campo magnético del sensor y valores de corrección del campo magnético. El bloque emite los valores del sensor calibrados y alineados con el eje.

Modifique los valores en el bloque Constante Valores de corrección del magnetómetro, que es la entrada al bloque Preprocesador, con los valores de corrección (hardIronOffset) obtenidos en el paso 6 en la sección Realizar calibración del magnetómetro.

Es posible que los ejes del acelerómetro, giroscopio y magnetómetro del sensor no estén alineados entre sí. Especifique el índice y el signo de los ejes x, y y z de cada sensor en la máscara de bloque del preprocesador, de modo que el sensor esté alineado con el sistema de coordenadas noreste-abajo (NED) cuando esté en reposo. En este ejemplo, los ejes Y del magnetómetro se cambian mientras los ejes del acelerómetro y giroscopio permanecen fijos.

Bloque de filtro

Para estimar la orientación con los datos del sensor IMU, se utiliza un bloque AHRS . El bloque AHRS fusiona datos de sensores de acelerómetro, magnetómetro y giroscopio para estimar la orientación del dispositivo. El bloque AHRS tiene parámetros ajustables. Ajustar los parámetros en función de los sensores especificados que se utilizan puede mejorar el rendimiento. Para obtener más detalles, consulte la sección Tuning Filter Parameters en el ejemplo Estimación de la orientación mediante la fusión de sensores inerciales .

Bloque de Visualización

Para visualizar la orientación en Simulink, este ejemplo proporciona un bloque auxiliar, HelperPosePlot. El bloque traza la pose especificada por el cuaternión o matriz de rotación.

Validar el diseño del modelo utilizando IO conectado

Puede simular el modelo en Connected IO para validar el diseño del modelo antes de generar el código e implementar el modelo en la placa Arduino. Esta comunicación entre el modelo y Arduino no requiere ninguna generación de código ni implementación del modelo, acelerando así el proceso de simulación. Para obtener más información sobre IO conectada, consulte . El modelo ya está configurado para ejecutarse en modo IO conectado.

Esta aplicación requiere que los datos del sensor se adquieran en tiempo real. Para obtener datos en tiempo real con Connected IO, debe habilitar la estimulación. Para adquirir datos en tiempo real del hardware, haga lo siguiente:

1. En la barra de herramientas de Simulink , haga clic en la pestaña Simulación y configure el modo de simulación en Normal.

2. Para ejecutar este modelo en el modo IO conectado, haga clic en la pestaña Hardware, vaya a la sección Modo y seleccione IO conectado.

3. En la pestaña Hardware, abra el menú desplegable Ejecutar con IO en la sección Ejecutar en computadora y seleccione Estimulación de simulación.

4. Seleccione Habilitar estimulación para ralentizar la simulación.

5. Haga clic en el icono Ejecutar correspondiente a Ejecutar con IO para iniciar la simulación de IO conectada.

Mueva el sensor y verifique si el movimiento en la figura coincide con el movimiento del sensor.

6. Para detener la ejecución del modelo, haga clic en el icono Detener correspondiente a Ejecutar con IO.

Ejecute el modelo en modo externo

Después de simular exitosamente el modelo en Connected IO, simule el modelo en modo externo. A diferencia de Connected IO, el modelo se implementa como código C en el hardware. El código obtiene datos en tiempo real del hardware. En modo externo, la adquisición de datos y el ajuste de parámetros se realizan mientras la aplicación se ejecuta en el hardware.

Nota: Asegúrese de que la placa Arduino que está utilizando tenga suficiente memoria para ejecutar la aplicación en el hardware. Las placas como Arduino Uno, que tienen poca memoria, no pueden admitir esta aplicación.

Nota: El bloque HelperPosePlot no es compatible con el flujo de trabajo en modo externo. Para ver la orientación en modo externo, utilice otros paneles en Simulink como Alcance, Mostrar bloques, etc.

1. Para ejecutar el modo externo, haga clic en la pestaña Hardware, vaya a la sección Modo, seleccione Ejecutar a bordo (modo externo) y luego haga clic en Monitorizar y ajustar.

La esquina inferior izquierda de la ventana del modelo muestra el estado mientras Simulink prepara, descarga y ejecuta el modelo en el hardware.

Mueva el sensor y verifique los valores de orientación.

2. Para detener la ejecución del modelo, haga clic en Detener correspondiente a Monitorizar y afinar.