SparkFun BasicAHRS_I2C дает нестабильные показания
SparkFun BasicAHRS_I2C дает нестабильные показания.
Я использую скетч SparkFun Arduino из здесь.
Это дает мне следующие результаты:
X-acceleration: 91.43 mg Y-acceleration: 249.51 mg Z-acceleration: 1042.05 mg
X-gyro rate: -0.549 degrees/sec Y-gyro rate: 0.557 degrees/sec Z-gyro rate: 1.595 degrees/sec
X-mag field: -164.35 mG Y-mag field: -240.16 mG Z-mag field: -20.73 mG
Temperature is 27.9 degrees C
а затем следующий результат (когда MPU9250 все еще):
X-acceleration: 91.49 mg Y-acceleration: 252.75 mg Z-acceleration: 1039.49 mg
X-gyro rate: -0.076 degrees/sec Y-gyro rate: -0.130 degrees/sec Z-gyro rate: -0.008 degrees/sec
X-mag field: -175.07 mG Y-mag field: -222.24 mG Z-mag field: -27.64 mG
Temperature is 27.9 degrees C
Обратите внимание, что температура осталась постоянной, ускорение осталось постоянным (хотя я не знаю, почему есть показания, если MPU9250 неподвижен), а магнитное поле довольно близко. Однако значения гироскопа не близки.
Может у меня плохой MPU9250?
Я использую Mega.
Редактировать: добавлен дополнительный фильтр из здесь, однако они не добавили фильтр comp для значения z, как видно из моего снимка экрана последовательного монитора:
Я думаю, это потому, что у них MPU6050, а не MPU9250. Я полагаю, что у MPU9250 есть магнитометр, который можно использовать, чтобы «помочь» дрейфу?
Как я могу использовать магнитометр, чтобы противостоять дрейфу?
Конечная цель: вращать игровой объект в единстве с MPU9250 с минимальным смещением и максимальной точностью.
@Jordan Savage, 👍0
Обсуждение2 ответа
Если вы не заметили, разница между ними незначительна. Например, изменение степени равно <1. Также ускорение измеряется в g, что является ускорением свободного падения. Данные говорят, что меры указаны в мг, что составляет 0,01 г. Это нормально для акселерометров и всех датчиков, когда они улавливают остаточное напряжение от случайных вибраций или других источников шума. Это также может быть связано с погрешностью в продукте SparkFun, поскольку продукт более низкого качества, что снова нормально. TLDR: все работает нормально.
Когда я использую их значения в Unity, объект быстро вращается, как если бы он был случайным., @Jordan Savage
Значения мне кажутся приемлемыми. Обычно эти чипы MPU очень шумные, это нормально. Если вы действительно используете данные для текущей ориентации, вы должны использовать фильтр для объединения данных с акселерометра и гироскопа.
Есть несколько возможных фильтров, которые могут помочь. Проще всего реализовать дополнительный фильтр. Это дает вам довольно хорошие результаты. Вы сможете найти соответствующие руководства в Интернете.
Код по вашей ссылке не использует дополнительный фильтр для оси Z. В комментарии сказано, что акселерометр не предоставляет данных об угле z, и это правильно. Поскольку гравитация всегда направлена вниз, вы не можете различить углы вокруг этой оси.
Но, как вы уже сказали, вы можете использовать для этого данные магнитометров. Но вам понадобится угол наклона магнитного поля Земли (угол между землей и вектором поля). Вы можете погуглить угол наклона для своего места и использовать его как константу. Но скорее всего вы захотите использовать устройство внутри зданий. Магнитное поле может быть очень возмущено из-за большого количества стали поблизости. Таким образом, лучше выполнить калибровку перед использованием, когда устройство лежит ровно на земле.
Когда вы вычислили угол вокруг оси Z по данным магнитометра, вы можете использовать его в дополнительном фильтре, как это было сделано в связанном коде с данными акселерометра.
Примечание: из-за использования стали угол наклона не должен быть постоянным при перемещении по зданию. Так что это лучше для использования в небольшом пространстве.
Когда я использую их значения гироскопа для оценки объекта в Unity, он движется так сильно, как если бы он был случайным., @Jordan Savage
Тогда вы делаете что-то не так в своей игре на единство. При такой скорости гироскопа для полного оборота потребуется около 360 секунд (значительно более 5 минут). По крайней мере, не так быстро, то есть случайно. Пожалуйста, не используйте игру Unity для проверки акселерометра. Вместо этого вы должны следить за значениями непосредственно на последовательном мониторе, чтобы увидеть, как они себя ведут. С дополнительным фильтром вы получаете абсолютную ориентацию. Сделайте это на Arduino, выведите рассчитанную ориентацию и проверьте, подходят ли эти значения для последовательного монитора., @chrisl
Приведенные выше значения взяты из последовательного монитора, однако я не рассчитывал абсолютную ориентацию для последовательного монитора., @Jordan Savage
Вышеуказанные значения не соответствуют быстрому движению. Попробуйте дополнительный фильтр, @chrisl
@Jordan Savage Я добавил небольшое объяснение об использовании магнитометра., @chrisl
Спасибо за информативную редакцию. Моя константа угла наклона составляет 66,31 градуса, на этом веб-сайте здесь: произвести смену знака. Из вашего редактирования: «рассчитал угол вокруг оси z на основе данных магнитометра», является ли этот угол 66,31 градуса, который веб-сайт выше сообщает мне для моего местоположения?, @Jordan Savage
«Вы можете использовать его в дополнительном фильтре», как я мог это сделать? У меня есть значение Z mag (с калибровкой) и у меня есть локальный угол наклона магнитного поля. Как бы я использовал эти значения в дополнительном фильтре, поскольку теперь это магнитометр, а не акселерометр?, @Jordan Savage
@Jordan Savage Я думаю, вам нужно рассчитать угол вокруг угла силы тяжести, взяв вектор магнитного поля, используя только компоненты, перпендикулярные направлению силы тяжести, и рассчитав разницу между этим вектором и стандартным / калибровочным углом. Точными расчетами я особо не заморачивался. Может быть, это поможет, когда вы нарисуете геометрическую схему. В настоящее время у меня нет на это времени. Когда у вас есть угол, вы можете просто использовать его вместо угла акселерометра, как и в расчетах для других компонентов., @chrisl
- Почему значение регистра чтения и записи гироскопа MPU6050 равно 0x08 для полной шкалы 500 градусов в секунду?
- Arduino Mega и ошибочные значения гироскопа
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
Вы пытались отправить вопрос в отдел обслуживания клиентов SparkFun?, @Duncan C