Двойная интеграция ускорения в C++ с использованием 9DOF IMU с сенсором Fusion

Я потратил несколько часов на изучение числовой интеграции и оценки скорости / положения, но не смог найти ответ, который был бы понятен моему мозгу или соответствовал бы моей ситуации.

У меня есть IMU (Inertial Measurement Unit), в котором есть гироскоп, акселерометр и магнитометр. Все эти датчики находятся в состоянии слияния, что означает, например, использование гироскопа, который я могу компенсировать гравитацией в показаниях акселерометра, а магнитометр компенсирует дрейф. Другими словами, я могу получить чистые показания ускорения с помощью такой настройки.

Теперь я пытаюсь точно оценить позицию, основываясь на ускорении, которое, как вы знаете, требует двойной интеграции, и для этого есть различные способы. Но я не знаю, что было бы наиболее подходящим здесь. Может ли кто-нибудь поделиться какой-нибудь информацией об этом? Кроме того, я был бы признателен, если бы вы могли объяснить это мне без использования каких-либо сложных математических формул / символов, я не математик, и это было одной из моих проблем при поиске информации.

Спасибо

1 ответ

Вы можете интегрировать ускорения путем простого суммирования векторов ускорения, умноженных на временной шаг (период IMU), чтобы получить скорость, а затем суммировать скорости с временным шагом, чтобы получить позицию. Вы можете распространять (не интегрировать) ориентацию, используя различные методы в зависимости от выбранного представления ориентации (углы Эйлера, кватернионы, матрица ориентации (DCM), угол оси и т. Д.).

Однако у вас есть большая проблема.

Короче говоря: Если у вас нет IMU военно-морского качества (200000 долларов США +), вы не можете просто интегрировать ускорения и угловые скорости для получения точных оценок положения (положения и ориентации).

Я предполагаю, что вы используете недорогой (менее 1000 долларов США) IMU - ваш акселерометр и гироскоп подвержены как шуму, так и смещению. Это сделает невозможным получение точной позы путем простой интеграции.

На практике, чтобы сделать то, что вы собираетесь, необходимо объединить "корректирующие" измерения положения и, при необходимости, ориентацию. IMU "предсказывает" положение / ориентацию, в то время как другая модель датчика (характеристики камеры, GPS, альтиметр, измерения дальности / пеленга) берет прогнозируемое положение и "корректирует" его. Существуют различные методы слияния этих данных, наиболее плодотворным из которых является расширенный фильтр Калмана или фильтр Кальмана с ошибками (непрямым состоянием).

Вернуться к исходному вопросу; Я бы представлял ориентацию как кватернионы, и вы можете распространять ориентацию кватернионов, используя производную погрешности кватернионов и угловые скорости вашего гироскопа.

РЕДАКТИРОВАТЬ:

Проблему шума можно частично обойти, используя фильтр верхних частот, но о каком смещении вы говорите?

Вы должны ознакомиться с источниками ошибок в MEMS-акселерометрах: постоянное смещение выравнивания, случайное смещение при ходьбе, белый шум и температурное смещение. Как вы сказали, вы можете использовать фильтр верхних частот, чтобы уменьшить влияние шума - однако это не идеально, так что имеется значительный остаточный шум. Двойная интеграция остаточного шума дает квадратично увеличивающуюся ошибку положения. Даже после устранения ускорения под действием силы тяжести из-за этих источников ошибок будут измеряться значительные ускорения, которые сделают оценку положения неточной в течение менее 1 секунды после интегрирования.

Другие вопросы по тегам