Алгоритм дрейфа Мэджвика и датчик MPU9250?
Для моего проекта мне нужен способ определить правильную ориентацию ракеты.
Я взял код для фильтра Мэгвик отсюда
https://github.com/morgil/madgwick_py
для сбора данных я использовал датчик Arduino Nano + MPU9250. Эта установка отправляет пакеты каждые 12 мс на мой компьютер через последовательный порт.
Я откалибровал магнитометр, рассчитав смещения, чтобы "выровнять" начало оси и центр сферы, созданный набором измерений.
Затем я нарисовал координатную ось с помощью блендера: 3D-ось и написал для нее скрипт. Он просто читает значения из последовательного порта, передает их в фильтр, а затем вращает объект моей оси, используя режим вращения кватернионов.
Я немного облажался с ориентацией оси X, поэтому, когда я поворачиваю свою доску по часовой стрелке, ось на экране вращается против часовой стрелки. Я щелкнул знаками всех компонентов X, и все стало хорошо.
Согласно этой картинке, ось MPU перевернула оси X и Y и знак оси Z, чтобы выровнять ось магнитометра с гироскопом + акселерометр
И это почти работает с одним небольшим исключением - когда после "стабилизации" я наклоняюсь, т.е. ось X вниз (или ось Y, не имеет значения), эта ось начинает дрейфовать к глобальной плоскости XY. Если я наклоняю ось вверх, оставшаяся ось начинает дрейфовать вокруг глобальной оси OZ, как эта ось X вниз X ось вверх
Скорость этого дрейфа зависит от бета-фильтра Madgwick - чем больше бета, тем больше дрейф.
Что можно сделать там?