Ориентация от показаний магнитометра и акселерометра
orientation = ecompass(accelerometerReading,magnetometerReading)
orientation = ecompass(accelerometerReading,magnetometerReading,orientationFormat)
возвращает orientation
= ecompass(accelerometerReading
,magnetometerReading
)quaternion
, который может вращать количества от родительского элемента (NED) кадр дочернему элементу (датчик) кадр.
задает формат ориентации как матрицу вращения или orientation
= ecompass(accelerometerReading
,magnetometerReading
,orientationFormat
)quaternion
.
Функция 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