ecompass
Orientación a partir de lecturas de magnetómetro y acelerómetro.
Sintaxis
Descripción
devuelve un orientation
= ecompass(accelerometerReading
,magnetometerReading
)quaternion
que puede rotar cantidades de un marco principal (NED) a un marco secundario (sensor).
especifica el formato de orientación como orientation
= ecompass(accelerometerReading
,magnetometerReading
,orientationFormat
)quaternion
o matriz de rotación.
también le permite especificar el marco de referencia orientation
= ecompass(accelerometerReading
,magnetometerReading
,orientationFormat
,'ReferenceFrame'
,RF)RF
de la salida orientation
. Especifique RF
como 'NED'
(Noreste-Abajo) o 'ENU'
(Este-Norte-Arriba). El valor predeterminado es 'NED'
.
Ejemplos
Argumentos de entrada
Argumentos de salida
Algoritmos
La función ecompass
devuelve un cuaternión o matriz de rotación que puede rotar cantidades de un marco principal (NED, por ejemplo) a un marco secundario (sensor). Para ambos formatos de orientación de salida, el operador de rotación se determina calculando la matriz de rotación.
Primero se calcula la matriz de rotación con un intermediario:
y luego normalizado en columnas. a y m son la entrada accelerometerReading
y la entrada magnetometerReading
, respectivamente.
Para comprender el cálculo de la matriz de rotación, considere un punto arbitrario de la Tierra y su correspondiente marco NED local. Supongamos un marco de cuerpo de sensor, [x, y, z], con el mismo origen.
Recuerde que la orientación de un cuerpo de sensor se define como el operador de rotación (matriz de rotación o cuaternión) necesario para rotar una cantidad desde un marco principal (NED) a un marco secundario (cuerpo de sensor):
dónde
R es una matriz de rotación de 3 por 3, que puede interpretarse como la orientación del marco secundario.
p principal es un vector de 3 por 1 en el marco principal.
p secundario es un vector de 3 por 1 en el marco secundario.
Para un cuerpo sensor estable, un acelerómetro devuelve la aceleración debida a la gravedad. Si el cuerpo del sensor está perfectamente alineado con el sistema de coordenadas NED, toda la aceleración debida a la gravedad se produce a lo largo del eje z y el acelerómetro indica [0 0 1]. Considere la matriz de rotación requerida para rotar una cantidad del sistema de coordenadas NED a una cantidad indicada por el acelerómetro.
La tercera columna de la matriz de rotación corresponde a la lectura del acelerómetro:
La lectura de un magnetómetro apunta hacia el norte magnético y está en el plano N- D . Nuevamente, considere el marco del cuerpo de un sensor alineado con el sistema de coordenadas NED.
Por definición, el eje E es perpendicular al plano N- D , por lo tanto D ⨯ N = E, dentro de algún escalado de amplitud. Si el marco del cuerpo del sensor está alineado con el NED, tanto el vector de aceleración del acelerómetro como el vector de campo magnético del magnetómetro se encuentran en el plano N- D . Por lo tanto , a ⨯ m = y, nuevamente con cierta escala de amplitud.
Considere la matriz de rotación requerida para rotar NED al marco secundario, [x y z].
La segunda columna de la matriz de rotación corresponde al producto cruzado de la lectura del acelerómetro y la lectura del magnetómetro:
Por definición de matriz de rotación, la columna 1 es el producto cruzado de las columnas 2 y 3:
Finalmente, la matriz de rotación se normaliza en columnas:
Nota
El algoritmo ecompass
utiliza el norte magnético, no el norte verdadero, para el sistema de coordenadas NED.
Referencias
[1] Open Source Sensor Fusion. https://github.com/memsindustrygroup/Open-Source-Sensor-Fusion/tree/master/docs
Capacidades ampliadas
Historial de versiones
Introducido en R2018b