Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Магнитометр mpu 9150 вывод данных

Проблема заключается в выводе откалиброванных данных с магнитометра. Поворот вокруг оси Z(вперед) и X(вправо) показывает нормально, но как только поворачиваю его вокруг оси Y(вверх), поворот немного виден, но амплитуда значительно сужается сужается, т.е. как будто данные о направлении севера есть, но они смещены относительно 0,0,0. На картинке 3 видно как поворот вокруг оси Y меньшей амплитуды, чем поворот вокруг осей X и Z (круг меньшего диаметра). Возможно я не правильно откалибровал магнитометр? Пунктир - то, что ожидается при повороте вокруг вертикальной оси. Возможно, эти данные нужно каким-то образом нормализовать, чтобы привести к реальному вектору относительно севера, но не имею представления как это сделать.

Вот откалиброванные значения, один в один с моими, взятые в сети из другого источника. Красные, синие и зеленые точки - это те данные, которые получаются при повороте вокруг вертикальной оси. Как теперь их привести к нормальному виду, для отображения реальной ориентации?


Ответ

Теперь я вас понял. Вы описывали окружность осью магнитометра с центром в воображаемой оси Земли. Когда воображаемая ось была направлена вперёд и вправо, всё было в порядке. Когда вы описывали окружность вокруг воображаемой оси, направленной вверх, проблема возникла от того, что вектор магнитной индукции не параллелен поверхности Земли. Вот что у вас получилось:

Теперь, как я понимаю, ваша задача - вычислить азимут. В простейшем случае можно воспользоваться формулой:
float azimuth = atan2(z, x); if (azimuth < 0) azimuth += 360;
Однако крен и тангаж вносят большие искажения в показания магнитометра. Поэтому магнитометр должен всегда работать в паре с акселерометром (либо нужно обеспечивать строго горизонтальное положение). Методику расчёта углов поворота с помощью магнитометра и акселерометра можно найти здесь

Комментариев нет:

Отправить комментарий