Определение относительно точной скорости с помощью ИДУ

В настоящее время я работаю над проектом, в котором я пытаюсь точно определить скорость в портативном устройстве, используя IMU, в течение примерно 30 секунд. У меня возникли серьезные проблемы с этим из-за большого отклонения от правильных вычислений из-за неточных показаний датчиков. Я пробовал настраивать смещения для своего датчика и использовать другие библиотеки слияния датчиков, чтобы найти мое линейное ускорение.

На данный момент я не знаю, делаю ли я что-то неправильно, неправильно выполняю процесс или мои датчики просто слишком неточны для достижения этой цели.

Я надеюсь, что у кого-нибудь могут быть рекомендации о том, как добиться этого с нуля. В настоящее время у меня есть два IMU 9DOF, перечисленных ниже. В первом я попытался использовать предопределенную функцию линейного ускорения для определения скорости в режиме ndof, используя шаги калибровки bosch. Во-вторых, я потратил несколько часов на настройку смещений, чтобы получить линейное ускорение, и это получилось намного хуже, чем с первым датчиком. Для второго я могу включить код, но я использовал madgwick из библиотеки Adafruit_AHRS для слияния датчиков, чтобы сэкономить время.

Любая помощь приветствуется.

  1. https://www.adafruit.com/product/4646 (Первая плата BNo055)
  2. https://www.adafruit.com/product/3463 (Вторая плата FXOS8700 + FXAS21002)

, 👍2


2 ответа


1

Интегрирование ускорения для получения скорости является сложной задачей. Это первый шаг к окончательному расчету. Рассмотрите некоторые из следующих вариантов повышения точности:

  1. Некоторые IMU можно настроить для увеличения скорости выборки. Если ускорение является внезапным, большее количество выборок может повысить точность вычисленной скорости.
  2. Попробуйте выровнять только 1 из осей чипа IMU в направлении ускорения. Сделайте это, чтобы упростить проблему. В зависимости от используемого Arduino у процессора может не хватить мощности для выполнения тригонометрических функций, необходимых для чего-либо, кроме ускорения только по 1 из осей IMU.
  3. Позаботьтесь о потере значащих цифр. Если вы используете целые числа, попробуйте все умножить. Например, вместо 1, равного 1 метру, умножьте значение так, чтобы 1000 равнялось 1.000 метрам. Теперь целочисленную математику можно использовать для вычисления с точностью до мм.
,

У меня действительно есть это с самой высокой скоростью, которую я могу попробовать. Также, к сожалению, для моего текущего проекта imu находится в портативном устройстве и поэтому не может быть выровнен более простым способом., @Jonathan Seffinga

Держится за руку? Затем вам нужно получить данные со всех 3 акселерометров. И выполните математические вычисления, чтобы сложить вклад каждого из них, чтобы найти общий вектор ускорения. Затем интегрируйте этот вектор по времени в вектор скорости. Может быть, вы сможете это сделать, если вы хорошо разбираетесь в Arduino Uno. Но, возможно, стоит посмотреть на конкретный процессор, используемый в разных Arduino, и выбрать самый быстрый и мощный. Я думаю, вам действительно следует начать с простого, а затем попытаться усложнить ситуацию. Держать в руках действительно очень тяжело. С автомобилем было бы проще, так как можно предположить, что машина всегда находится в правильном положении., @st2000

На самом деле я занимался векторной математикой. Я считаю, что основная проблема заключается в том, что из-за плохих показаний акселерометра или плохого алгоритма ориентации я не могу вычесть вектор силы тяжести без большой ошибки, @Jonathan Seffinga

Это 1 из нескольких причин, по которым я считаю, что лучше всего начинать с простого и усложнять по 1 шагу за раз. Думая, может быть, пришло время для трюка. Предупреждение, это, скорее всего, не будет хорошо работать в течение более длительных периодов времени. Но в течение 30 секунд, почему бы не попробовать вычесть долгосрочное среднее значение из показаний. Таким образом, в состоянии покоя устройство в конечном итоге обнуляется. Долгосрочное среднее значение не сможет реагировать на внезапное ускорение, поэтому такое ускорение будет видно с помощью кода вычисления скорости., @st2000

Хорошо, спасибо, я попробую и дам вам знать, как все пройдет, @Jonathan Seffinga

Проверьте также мой пост выше, я добавил больше деталей, @Jonathan Seffinga


1

Для получения более подробной информации я напрямую спросил BOSCH об этой проблеме и более подробно объяснил свою настройку.

https://community.bosch-sensortec.com/t5/MEMS-sensors-forum/BNO055-Outputting-Bad-Linear-Accel-Data/m-p/18976#M5212

,

Пожалуйста, отредактируйте это в своем вопросе, а затем удалите его. "Это место предназначено только для ответов"., @ocrdu