MPU6050: Настройка выходного диапазона гироскопа для позиционного чтения

Я использую MPU6050 в сочетании с Arduino и библиотекой i2cdev Джеффа Роуберга, и мой проект требует, чтобы выходные данные скорости гироскопа были более точными, чем настройка по умолчанию, которая составляет 1/16,4 градуса (+/-2000 градусов). /сек диапазон). Выходы гироскопа можно изменить с помощью mpu.setFullScaleGyroRange(uint8_t range), для которого я передал MPU6050_GYO_FS_500 для диапазона, чтобы получить более высокую точность

В этом проекте мне также нужна позиция YPR, которую я получаю с помощью mpu.dmpGetQuaternion(&q, fifoBuffer) и mpu.dmpGetGravity(&gravity, &q ) и mpu.dmpGetYawPitchRoll(ypr, &q, &gravity).

Проблема заключается в новом диапазоне выходного сигнала гироскопа: положение YPR резко меняется, когда MPU вращается, и снова медленно догоняет его, когда MPU удерживается неподвижно. Я думаю, что есть ошибка в фильтре, который объединяет данные гироскопа и ускорения, что делает гироскоп слишком чувствительным. Может быть, DMP делит данные скорости гироскопа на коэффициент чувствительности по умолчанию (16,4), а не на новый (131)?

Как быстро получить точные показания YPR?

Вот скриншот данных. Ось не помечена, но ось X представляет примерно 16 секунд времени. Синяя линия — это данные о скорости гироскопа, а розовая линия — это положение поворота MPU. На графике показаны два оборота MPU.

, 👍1


1 ответ


1

У нас была та же проблема, похоже, что код DMP MPU6050 работает так, как только вы меняете шкалы акселерометра и гироскопа.

Работает лучше, если вы используете настройки масштабирования +-2000 град/сек и +-2g.

    mpu.setFullScaleGyroRange(MPU6050_GYRO_FS_2000);
    mpu.setFullScaleAccelRange(MPU6050_ACCEL_FS_2);

Проблема заключается в том, как внутренняя логика "DMP" объединяет данные, я полагаю, что у нее есть "константы", настроенные только для этих параметров.

Если вам нужны как данные об "измененных настройках", так и данные о "рыскании\тангаже\крене", вы можете реализовать объединение данных датчиков самостоятельно или использовать существующие библиотеки.

Самое простое, что я могу предложить, это реализовать дополнительный фильтр. Более сложным, но точным будет использование фильтра Калмана, все зависит от времени и терпения, которые у вас есть на изучение этих тем :)

,