Расчет магнитного курса с использованием необработанных данных акселерометра и магнитометра - PullRequest
8 голосов
/ 25 июня 2010

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

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

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

Ответы [ 3 ]

2 голосов
/ 30 августа 2010

В зависимости от точности, необходимой для вашего приложения, вам может потребоваться решить несколько проблем:

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

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

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

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

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

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

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

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

0 голосов
/ 08 ноября 2018

Ты не думаешь в достаточных измерениях.Это будет ответом только в двух измерениях, и он будет прекрасно работать, если вы сможете найти способ гарантировать, что «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-компаса - представьте, что вы достаете иглу из компасасбалансируйте его так, чтобы гравитация не играла никакой роли в поддержании его «уровня», и вы обнаружите, что «север» будет указывать немного вверх или вниз - в зависимости от того, где вы находитесь (или, если на полюсах, прямо вверх иливниз!).

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

0 голосов
/ 18 августа 2010

Я бы указывал на Углы Эйлера и Ролл Пич Тяга .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...