Расчет магнитного курса с использованием необработанных данных акселерометра и магнитометра

У меня есть акселерометр и магнитометр, каждый из которых производит необработанные показания X, Y и Z. Из этого мне нужно определить магнитный курс объекта.

Я не так хорош в триггерах, но я составил формулу, которая довольно хорошо реагирует на вращение устройства, но также реагирует на движения, которые никто не считает уместными, такие как наклон устройства под таким углом. способ, который не влияет на направление, в котором он указан. Например, положить его на ровную поверхность и «перекатить» устройство.

Я думаю, что формула, которая у меня есть для расчета магнитного курса, хороша, но я думаю, что мои вводные данные в радианах тангажа и крена неверны.

Итак, я думаю, что суть моего вопроса (если у кого-то на самом деле нет формулы, которая делает это), заключается в том, как вы рассчитываете углы в радианах, используя акселерометр для тангажа и крена.

Затем, во-вторых, любая информация о самой формуле заголовка была бы отличной.


person M. Ryan    schedule 25.06.2010    source источник
comment
Какой заголовок вы пытаетесь вычислить и относительно какого объекта? Могу я предположить, что вы говорите о телефоне?   -  person Seth    schedule 26.06.2010


Ответы (3)


В зависимости от точности, которую требует ваше приложение, вам может потребоваться решить несколько проблем:

  1. Оси акселерометра откалиброваны? Я видел акселерометры MEM, оси которых не были взаимно перпендикулярны, и имели значительно разные характеристики отклика для каждой оси (обычно X и Y совпадали, а Z отличались). Вам нужно будет синтезировать идеальные оси XYZ из любых физических показаний, которые предоставляет ваше устройство. (Google «калибровка акселерометра».)

  2. Откалиброваны ли оси магнитометра? Проблема похожа на описанную выше, за исключением того, что ее намного сложнее проверить: очень сложно создать однородные откалиброванные магнитные поля. Если вы используете окружающее геомагнитное поле, вам необходимо будет тщательно контролировать локальный магнетизм вашей рабочей среды и ваших инструментов. (Погуглите «калибровка магнитометра».)

  3. После индивидуальной калибровки акселерометра и магнитометра их оси необходимо откалибровать относительно друг друга. Поскольку оба эти устройства обычно припаяны к печатной плате, почти гарантировано значительное смещение. Во многих случаях компоновка платы и параметры устройства могут даже не допускать совпадения осей XYZ друг с другом! Это может быть труднее всего сделать с точки зрения лаборатории, поэтому я бы порекомендовал вам провести прямое сравнение, используя другое оборудование, которое имеет оба типа датчиков и уже откалибровано (например, телефон iPhone или Android, но перед этим проверьте устройство). использовать). Обычно это достигается путем корректировки двух предыдущих калибровочных матриц до тех пор, пока они не сгенерируют векторы, правильно выровненные относительно друг друга.

  4. Только после того, как вы сгенерируете взаимно откалиброванные векторы магнитного поля и акселерометра, вы сможете применить решения, предложенные другими респондентами.

Я описал только статическое решение, в котором и магнитометр, и акселерометр неподвижны относительно локальных гравитационного и магнитного полей. Если вам нужно генерировать ответы в режиме реального времени, когда система быстро перемещается, вам нужно будет учитывать поведение каждого датчика во времени. Есть два основных способа сделать это: 1) Применить фильтры во временной области к каждому датчику, чтобы их выходы имели общую временную область (обычно добавляя некоторую задержку). 2) Используйте прогностическое моделирование для изменения выходных сигналов датчика в режиме реального времени (меньше задержек, но больше шума).

Я видел фильтры Калмана, используемые для таких приложений, но их применение в векторной области может потребовать использования кватернионов вместо матриц Эйлера. Кватернионы проще в вычислительном отношении (требуется меньше операций по сравнению с матрицами), но я обнаружил, что их гораздо сложнее понять и правильно понять.

Или вы можете выбрать совершенно другой путь и использовать статистику и подгонку данных, чтобы выполнить всю вышеперечисленную работу за один гигантский шаг. Рассмотрим задачу следующим образом: учитывая 6 входных значений (XYZ от некалиброванных магнитометра и акселерометра) и ссылку на устройство (при условии, что оно ручное, а на корпусе нарисована стрелка), выведите один угол, представляющий магнитный пеленг, на который указывает стрелка на корпусе, и возвышение стрелки относительно вектора силы тяжести (наклон корпуса).

Используя откалиброванное эталонное устройство (как упоминалось выше), соедините его с калибруемым устройством и возьмите несколько сотен точек данных с устройством в разных ориентациях. Затем используйте мощный математический пакет, такой как Matlab, MathCAD, R или SciPy, для настройки и решения нелинейных уравнений для создания матриц преобразования.

person BobC    schedule 30.08.2010
comment
PS: Я использовал недорогую компьютеризированную базу телескопа, чтобы сделать эту последнюю часть: делать это вручную на самом деле невозможно. - person BobC; 01.09.2010

Я бы указал на Углы Эйлера и Roll Pich Yaw.

person John Alexiou    schedule 18.08.2010

Вы не мыслите в достаточном количестве измерений. Это был бы ответ только в двух измерениях, и он прекрасно работает, если вы можете найти способ гарантировать, что «Z» всегда совпадает с гравитацией.

int heading=180-atan2(mag_datX, mag_datY)/0.0174532925; // 0/359=N, 90=E, 180=S, 270=W 

(если вы читаете напрямую с устройства - будьте осторожны, оно, вероятно, возвращает X, Z, Y, а не X, Y, Z!)

Однако — это не проблема 2D-компаса — представьте, что вы вынимаете стрелку из компаса, балансируете ее так, что гравитация не играет никакой роли в удержании ее «на одном уровне», и вы обнаружите, что «север " будет указывать немного вверх или вниз - в зависимости от того, где вы находитесь на земле (или, если на полюсах, прямо вверх или вниз!).

Поэтому вам нужно попытаться вычислить ТРЕХМЕРНЫЙ вектор из всех трех значений, что является матричной операцией.

person cnd    schedule 08.11.2018