Определение относительно точной скорости с помощью ИДУ
В настоящее время я работаю над проектом, в котором я пытаюсь точно определить скорость в портативном устройстве, используя IMU, в течение примерно 30 секунд. У меня возникли серьезные проблемы с этим из-за большого отклонения от правильных вычислений из-за неточных показаний датчиков. Я пробовал настраивать смещения для своего датчика и использовать другие библиотеки слияния датчиков, чтобы найти мое линейное ускорение.
На данный момент я не знаю, делаю ли я что-то неправильно, неправильно выполняю процесс или мои датчики просто слишком неточны для достижения этой цели.
Я надеюсь, что у кого-нибудь могут быть рекомендации о том, как добиться этого с нуля. В настоящее время у меня есть два IMU 9DOF, перечисленных ниже. В первом я попытался использовать предопределенную функцию линейного ускорения для определения скорости в режиме ndof, используя шаги калибровки bosch. Во-вторых, я потратил несколько часов на настройку смещений, чтобы получить линейное ускорение, и это получилось намного хуже, чем с первым датчиком. Для второго я могу включить код, но я использовал madgwick из библиотеки Adafruit_AHRS для слияния датчиков, чтобы сэкономить время.
Любая помощь приветствуется.
- https://www.adafruit.com/product/4646 (Первая плата BNo055)
- https://www.adafruit.com/product/3463 (Вторая плата FXOS8700 + FXAS21002)
2 ответа
Интегрирование ускорения для получения скорости является сложной задачей. Это первый шаг к окончательному расчету. Рассмотрите некоторые из следующих вариантов повышения точности:
- Некоторые IMU можно настроить для увеличения скорости выборки. Если ускорение является внезапным, большее количество выборок может повысить точность вычисленной скорости.
- Попробуйте выровнять только 1 из осей чипа IMU в направлении ускорения. Сделайте это, чтобы упростить проблему. В зависимости от используемого Arduino у процессора может не хватить мощности для выполнения тригонометрических функций, необходимых для чего-либо, кроме ускорения только по 1 из осей IMU.
- Позаботьтесь о потере значащих цифр. Если вы используете целые числа, попробуйте все умножить. Например, вместо 1, равного 1 метру, умножьте значение так, чтобы 1000 равнялось 1.000 метрам. Теперь целочисленную математику можно использовать для вычисления с точностью до мм.
Для получения более подробной информации я напрямую спросил BOSCH об этой проблеме и более подробно объяснил свою настройку.
https://community.bosch-sensortec.com/t5/MEMS-sensors-forum/BNO055-Outputting-Bad-Linear-Accel-Data/m-p/18976#M5212
Пожалуйста, отредактируйте это в своем вопросе, а затем удалите его. "Это место предназначено только для ответов"., @ocrdu
- Получить значения акселерометра от BNO055 с помощью Единой библиотеки датчиков adafruit
- Получение точных показаний скорости от IMU
- Калибровка Adafruit TCS34725 для цветов RGB
- Значения кватернионов из BNO055 недоступны.
- Получение угловой скорости по данным кватернионов (BNO055)
- Лучший способ получить угловую скорость от датчика 9 DoF
- Как подключить несколько датчиков MPU-9250 IMU к одному Arduino Uno?
- Какова работа pulseIn?
У меня действительно есть это с самой высокой скоростью, которую я могу попробовать. Также, к сожалению, для моего текущего проекта imu находится в портативном устройстве и поэтому не может быть выровнен более простым способом., @Jonathan Seffinga
Держится за руку? Затем вам нужно получить данные со всех 3 акселерометров. И выполните математические вычисления, чтобы сложить вклад каждого из них, чтобы найти общий вектор ускорения. Затем интегрируйте этот вектор по времени в вектор скорости. Может быть, вы сможете это сделать, если вы хорошо разбираетесь в Arduino Uno. Но, возможно, стоит посмотреть на конкретный процессор, используемый в разных Arduino, и выбрать самый быстрый и мощный. Я думаю, вам действительно следует начать с простого, а затем попытаться усложнить ситуацию. Держать в руках действительно очень тяжело. С автомобилем было бы проще, так как можно предположить, что машина всегда находится в правильном положении., @st2000
На самом деле я занимался векторной математикой. Я считаю, что основная проблема заключается в том, что из-за плохих показаний акселерометра или плохого алгоритма ориентации я не могу вычесть вектор силы тяжести без большой ошибки, @Jonathan Seffinga
Это 1 из нескольких причин, по которым я считаю, что лучше всего начинать с простого и усложнять по 1 шагу за раз. Думая, может быть, пришло время для трюка. Предупреждение, это, скорее всего, не будет хорошо работать в течение более длительных периодов времени. Но в течение 30 секунд, почему бы не попробовать вычесть долгосрочное среднее значение из показаний. Таким образом, в состоянии покоя устройство в конечном итоге обнуляется. Долгосрочное среднее значение не сможет реагировать на внезапное ускорение, поэтому такое ускорение будет видно с помощью кода вычисления скорости., @st2000
Хорошо, спасибо, я попробую и дам вам знать, как все пройдет, @Jonathan Seffinga
Проверьте также мой пост выше, я добавил больше деталей, @Jonathan Seffinga