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

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

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

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

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

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

2 ответов


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

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

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

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

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

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

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

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

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