Ориентация от показаний магнитометра и акселерометра
возвращает orientation = ecompass(accelerometerReading,magnetometerReading)quaternion который может вращать величины из родительской (NED) системы координат в дочернюю (sensor) систему координат.
задает формат ориентации следующим orientation = ecompass(accelerometerReading,magnetometerReading,orientationFormat)quaternion или матрица вращения.
также позволяет вам задать систему координат orientation = ecompass(accelerometerReading,magnetometerReading,orientationFormat,'ReferenceFrame',RF)RF от orientation выход. Задайте RF как 'NED' (Северо-Восток-Даун) или 'ENU' (Восток-Север-Вверх). Значение по умолчанию 'NED'.
ecompass функция возвращает кватернион или матрицу вращения, которая может вращать величины от родительского элемента (NED для примера) система координат к дочернему (датчику) система координат. Для обоих выходов форматов ориентации оператор поворота определяется вычислением матрицы поворота.
Матрица вращения сначала вычисляется с помощью посредника:
а затем нормированный столбчатый. a и m являются accelerometerReading вход и magnetometerReading вход, соответственно.
Чтобы понять вычисление матрицы вращения, рассмотрите произвольную точку на Земле и ее соответствующая локальная система координат. Предположим, что каркас кузова датчика [x, y, z] с тем же источником.

Напомним, что ориентация тела датчика определяется как оператор вращения (матрица вращения или кватернион), необходимый для поворота величины из родительской (NED) системы координат в дочернюю (тело датчика) систему координат:
где
R - матрица вращения 3 на 3, которая может быть интерпретирована как ориентация дочерней системы координат.
p родительский элемент является вектором 3 на 1 в родительской системе координат.
p дочерний элемент является вектором 3 на 1 в дочерней системе координат.
Для стабильного тела датчика акселерометр возвращает ускорение за счет силы тяжести. Если тело датчика идеально выровнено с системой координат NED, все ускорения из-за силы тяжести расположены вдоль оси z, и акселерометр читает [0 0 1]. Рассмотрим матрицу поворота, необходимую для поворота величины из системы координат NED в величину, указанную акселерометром.

Третий столбец матрицы вращения соответствует показанию акселерометра:
Показания магнитометра указывают на магнитный север и находятся в плоскости N - D. Снова рассмотрим каркас кузова датчика, выровненную с системой координат NED.

По определению E - ось перпендикулярна N - D самолет, поэтому <reservedrangesplaceholder7> ⨯ <reservedrangesplaceholder6> = E, в рамках некоторого амплитудного масштабирования. Если каркас кузова датчика выровнен с NED, вектор ускорения от акселерометра и вектор магнитного поля от магнитометра лежат в плоскости N - D. Поэтому m ⨯ a = y, снова с некоторым амплитудным масштабированием.
Рассмотрим матрицу вращения, необходимую для поворота NED в дочернюю систему координат [x y z].

Второй столбец матрицы вращения соответствует перекрестному продукту показания акселерометра и показанию магнитометра:
По определению матрицы поворота столбец 1 является перекрестным продуктом столбцов 2 и 3:
Наконец, матрица вращения нормирована по столбцам:
Примечание
ecompass алгоритм использует магнитный север, а не истинный север для системы координат NED.
[1] Комплексирование датчиков с открытым исходным кодом. https://github.com/memsindustrygroup/Open-Source-Sensor-Fusion/tree/master/docs