Код слияния датчика положения

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

Мне нужно объединить датчики GPS и ACC, чтобы получить как можно меньше задержек и ошибок. Есть ли такой фьюжн вокруг или мне нужно изобретать его с нуля?

Код будет использоваться в этом проекте с открытым исходным кодом https://github.com/AndersMalmgren/FreePIE.

edit: В этой статье предлагается http://www.codeproject.com/Articles/326657/KalmanDemo Но люди здесь на ТАК полагают, что ошибка акселерометра слишком велика и он не будет работать.


person Anders    schedule 21.02.2013    source источник


Ответы (2)


Вам, конечно, не придется «изобретать» это с нуля - слияние GPS / INS - тема, хорошо освещенная в литературе. Всего две известные книги:

Как указывали другие (например, Фильтр Калмана для Android), существуют также реализации фильтров Калмана в Java / для Android.

Проблема с фильтрацией Калмана в вашем конкретном случае заключается в том, что необходимо выполнить несколько требований для реализации фильтра Калмана *. Теоретически необходимо убедиться, что шум (немоделированные ошибки измерения) белый и не коррелирован с все время. Проблема в том, что вы получаете не сырые измерения GPS от внутреннего приемника (который приблизительно можно считать белым), а скорее уже отфильтрованное решение (которое определенно демонстрирует временные корреляции).

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

При этом может быть несколько решений:

  • Используйте скорость, чтобы экстраполировать позицию между обновлениями позиции. (Я не делал этого на Android, но этот вопрос может помочь получить скорость.) Если скорость пользователя не меняется слишком часто (по сравнению с частотой обновления позиции), в большинстве случаев это должно работать достаточно хорошо.

  • Реализация полного фильтра Калмана. Комбинирование измерений абсолютного положения с помощью акселерометров довольно распространено, как отмечается в упомянутых выше книгах, даже с дешевыми инерциальными датчиками класса MEMS. Чтобы уменьшить ошибки, вызванные датчиками Acc, оцените их в векторе состояния фильтра Калмана. Обычно фильтр Калмана оценивает положение, скорость, ориентацию и смещения Acc / Gyro в одном фильтре. Вы можете отказаться от отношения и гироскопов, если хотите предположить, что они достаточно хорошо известны. Несмотря на то, что ваши датчики могут показывать намного больше ошибок, оценки смещений часто бывает достаточно для оценки в промежутках между обновлениями местоположения.

    Реализация полного фильтра Калмана также может означать, что вы учитываете временные корреляции ваших измерений, например с помощью техники, называемой фильтром Шмидта-Калмана (см. книги, процитированные выше). Это также может означать, что вы используете адаптивную фильтрацию Калмана для оценки некоторых параметров вашего фильтра, чтобы учесть различные датчики на разных устройствах. Обратите внимание, однако, что такие вещи требуют небольшого опыта в области навигации: реализация обычно проста - всего несколько строк матричных операций, но настройка может занять много времени. Но это не значит, что вам не стоит его пробовать!

  • Используйте только оценку смещения вышеуказанного фильтра: с оценкой смещения Acc вы можете улучшить первый метод (экстраполяция положения со скоростью), также экстраполируя скорость с измерениями акселерометра.

* с теоретической точки зрения - всегда можно проигнорировать теорию и просто попробовать. Иногда все равно будет работать :-)

person Philipp    schedule 04.03.2013

Я знаю, что это немного поздно, но у меня есть проект с открытым исходным кодом с фильтрацией Kalman и сглаживанием Rauch-Tung-Striebel (обратный калман) для Java. Если ваша модель процесса и / или модель измерения является нелинейной, также поддерживается расширенная и безцентровая фильтрация и сглаживание.

https://github.com/karnstrand/Kalman4J

Лика тилль Андерс! :-)

person Viktor Kärnstrand    schedule 20.05.2016
comment
Спасибо за ссылку, но некоторые примеры использования в README.md в вашем репозитории на github были бы полезны. - person Luke Hutchison; 30.10.2019