Алгоритм дрейфа Мэджвика и датчик MPU9250? - PullRequest
0 голосов
/ 29 июня 2018

Для моего проекта мне нужен способ определения правильной ориентации ракеты.

Я взял код для фильтра Мэгвик отсюда

https://github.com/morgil/madgwick_py

для сбора данных я использовал датчик Arduino Nano + MPU9250. Эта установка отправляет пакеты каждые 12 мс на мой ПК через последовательный порт.

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

Затем я нарисовал координатную ось с помощью блендера: 3D ось и закодировал некоторый сценарий для этого. Он просто читает значения из последовательного порта, передает их в фильтр, а затем вращает объект моей оси, используя режим вращения кватернионов.

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

Согласно этой картинке Ось MPU я перевернул оси X и Y и знак оси Z, чтобы выровнять ось магнитометра с гироскопом + акселерометр

И это почти работает с одним небольшим исключением - когда после «стабилизации» я наклоняю, то есть ось X вниз (или ось Y, не имеет значения), эта ось начинает дрейфовать к глобальной плоскости X-Y. Если я наклоню ось вверх, оставшаяся ось начнет дрейфовать вокруг глобальной оси O-Z, как это Ось X вниз Ось X вверх

Скорость этого дрейфа зависит от бета-фильтра Мэджвика - чем больше бета, тем больше дрейф.

Что там можно сделать?

...