Ориентация ИДУ постоянно меняется
У нас есть XSENS MTi IMU-Device и используется ROS-Framework (Ubuntu / Fuerte). Мы подписываемся на IMU-Data и все данные выглядят хорошо, кроме ориентации.
В Euler-Outputmode, как и в Quaternion-Outputmode, значения постоянно меняются. Не случайно, они увеличиваются или уменьшаются медленно с более или менее постоянной скоростью, и иногда я наблюдал изменение, чтобы сгладить и затем изменить его направление.
Когда значение на втором Х может быть:
x: 7.79210457616
y: -6.58661204898
z: 41.2841955308
значение Z изменяется в диапазоне около 10 в течение нескольких секунд (я думаю, что это 10-20 секунд).
Что может вызвать это поведение? Мы неправильно интерпретируем данные или что-то не так с драйвером? Странно то, что это также произошло с 2 другими драйверами и одним другим устройством IMU (у нас есть 2). Одинаковые результаты в каждой комбинации.
Не стесняйтесь спрашивать более точные данные или что-то, что вы хотели бы знать, что может помочь нам. Мы участвуем в Spacebot-Cup в ноябре, так что было бы очень приятно сделать IMU.:)
2 ответа
Совершенно нормально, если у вас нет магнитометра, чтобы скорректировать курс.
Только гироскоп измеряет только скорость поворота и не имеет представления об ориентации в любой момент времени на любой оси. Интегрирование скорости поворота дает направление, если вы знаете начальный курс и гироскоп на 100% точен. В любом случае он дрейфует, даже если он идеально откалиброван, поскольку вы выполняете выборку с дискретными интервалами, а не непрерывно.
Добавление акселерометра, по крайней мере, определит направление вниз (потому что оно измеряет силу тяжести, которая направлена к центру Земли). Это будет держать решение по оси Z выровненным по вертикали, но не будет фиксировать горизонтальное направление (курс или рыскание). Это будет продолжаться, как вы видите.
Добавление магнитометра установит направление относительно магнитного поля Земли. Это даст вам направление относительно магнитного севера. Вам нужно применить сдвиг для локального магнитного склонения, чтобы получить истинный север. Они обычно доступны в режиме онлайн и достаточно постоянны на протяжении десятков километров. Google ITREF.
Некоторые встроенные датчики не имеют магнитометра. Вот почему заголовок дрейфует. Такие устройства, как MPU6050, имеют встроенное встроенное программное обеспечение и могут обращаться к магнитометру, но обычное встроенное программное обеспечение не использует его, поэтому вам все равно придется реализовать Madgwick и т. Д. На вашем микроконтроллере или подключенном ПК. У Bosch есть новый одиночный модуль со встроенным процессором. Надеемся, что он использует 9 степеней свободы, а не 6, которые вы получаете с DMP на MPU6050.
Магнитные датчики с точностью до 2 градусов. Коррекции локального магнитного склонения также имеют ошибку. Вы можете выполнить дополнительные калибровки, используя GPS на длинной базовой линии, чтобы получить лучшие результаты. Стоит также отметить, что курс и пройденный курс часто различаются из-за боковых / поперечных токов.
Алгоритм Мэджвика довольно стабилен и прост в реализации и использует меньше ресурсов, чем фильтр Калмана, который должен выполнять инверсию матриц. Это по-прежнему дает незначительное дрожание, но незначительное сглаживание результатов не должно вызывать слишком большой задержки.
Если у вас есть версия IMU, я предполагаю, что на устройстве не было обработано сигнала. (но я не знаю продукт). Таким образом, данные, которые вы получаете для ориентации, должны быть только интегралом данных гироскопа.
Дрейф, который вы видите, является нормальным и может быть вызван интегрированием шума, неправильной калибровкой нулевой скорости или смещением гироскопа.
Чтобы исправить это отклонение, мы обычно используем AHRS
или VRU
алгоритм (в зависимости от необходимости исправления рыскания). Это алгоритм датчика слияния, который берет гравитацию от акселерометра и данные магнитометра (для AHRS), чтобы исправить этот дрейф.
Часто используемые алгоритмы Kalman filter
и complementary filter
(Madgwick/ Мэгони).
Это не легкая работа, и вам нужно немного почитать и поэкспериментировать на matlab/python для настройки этих фильтров:)