Ориентация от показаний магнитометра и акселерометра
возвращает orientation
= ecompass(accelerometerReading
,magnetometerReading
)quaternion
это может вращать количества от родительского элемента (NED) система координат дочернему элементу (датчик) система координат.
задает формат ориентации как 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
введите, соответственно.
Чтобы изучить матричное вычисление вращения, рассмотрите произвольную точку на Земле и ее соответствующей локальной системе координат NED. Примите систему координат тела датчика, [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 плоскость, поэтому N ⨯ D = E, в рамках некоторого амплитудного масштабирования. Если система координат тела датчика выравнивается с NED, и ускоряющий вектор от акселерометра и вектор магнитного поля от магнитометра лежат в N-D плоскость. Поэтому m ⨯ a = y, снова с некоторым амплитудным масштабированием.
Считайте матрицу вращения требуемой вращать NED к дочерней системе координат, [x y z].
Второй столбец матрицы вращения соответствует векторному произведению чтения акселерометра и чтения магнитометра:
По определению матрицы вращения, столбец 1 является векторным произведением столбцов 2 и 3:
Наконец, матрица вращения нормирована по столбцам:
ecompass
алгоритм использует магнитный север, не истинный север, для системы координат NED.
[1] Fusion датчика с открытым исходным кодом. https://github.com/memsindustrygroup/Open-Source-Sensor-Fusion/tree/master/docs