У обоих систем есть ещё такое понятие, как курс. И если курс инерциальной системы забыть корректировать, сводя только X,Y, то будет очень плохо
А тут в оркестр вступает ещё и компас - не только у GPS есть курс.
Кстати, сводить GPS, IMU и компас - это только одна задача.
Вторая - как повысить точность самой инерциальной системы - здесь ещё очень большой простор для полёта фантазии.
Например, пройденное расстояние надо корректировать текущим уклоном дороги (нам ведь географические координаты нужны?). Уклон бывает совсем немаленьким - тот трек, где я ездил в здании, я поднялся до 4 этажа и обратно И если на дороге это компенсирует GPS - то как раз в здании его и не будет.
Подытожу, что у нас есть:
Поворот (°/s): гироскоп, одометр.
Курс: GPS, компас.
Пройденное расстояние: GPS, одометр.
Абсолютные координаты: GPS
Крен\тангаж: гироскоп, акселерометр
Скорость: GPS, одометр
Ускорение: акселерометр (с направлением), одометр (без направления)
Причём, разделение на гироскоп и акселерометр весьма условное - для вычисления кватернионов нужны они оба, а поворот\крен\тангаж надо уже брать из кватернионов. А ускорение надо брать, вычитая вектор гравитации с помощью тех же кватернионов.
И главное - не забыть про центробежную силу! На поворотах надо, зная текущую скорость, и °/s, корректировать (если я правильно понимаю) входные показания акселерометра по горизонтальной оси, перпендикулярной направлению движения.
Кстати, в логах MPU-6050 центробежную силу я уже попытался скомпенсировать, иначе трек в здании не выходил вообще.
(Речь идёт про логи с кватернионами. В последних логах я ничего не вычислял)
Смысла нет, т.к. я могу вычислить не так, как предполагают другие. Например, у каждого могут быть свои критерии фильтрации GPS точек по HDOP и количеству спутников. Так что берите сырой NMEA лог
Что касается одометра - треки в посте #215 вообще с ошибкой, я на неё сразу указал (не учитывается направление движения автомобиля, задний ход засчитан как движение вперёд).
Тем более, в моём построении использовалась ручная помощь (указание начальной точки и направления).
Все данные, необходимые для вычислений, есть в архивах по ссылкам в том же #215 посте, а ниже - описание формата логов.
NMEA лог в архиве, используйте любой конвертер в gpx, если этот формат вам ближе
См. $WRAW
Размечтались. Эту задачу я и сам не решил в полном объёме. В построении тех треков компас не участвовал
Как задачу решить - пост #259. Методика рабочая, один раз я её пробовал. Но крайне трудоёмкая, поэтому только один раз.
Ну да, я же сказал - для иллюстрации Сами просили то, что “как-то построено”.
Придётся делать свой конвертер. Правда, тогда и смысла нет - читайте лог напрямую.
Вот код на пхп, который читает эти два лога и объединяет по временным меткам: http://svimik.com/imu_postprocess.txt
Там же в конце обрывки моих попыток слияния этих данных (заменить на свой алгоритм).
Зимой логфайл при буксовании было бы проще сделать, чем сейчас,
но можно попробовать (на гравии).
Я могу создать псевдо-NMEA файл в формате типа
$CAN_4A0_WHEELS,123456.789,0,99,0,100,0,101,0,102
где 123456.789 unix UTC время в секундах (или альтернативно ISO8601)
и за ним 4 пары [направление(вперед=0, назад=1),скорость (км/ч)]
При этом скорость естественно это на самом деле угловая скорость колеса (рад/с)
умноженная на “стандартный” радиус колеса, который и будет оцениваемым
модельным параметром в фильтре Калмана при работающем GPS.
“Среднее физическое” значение радиуса
при этом могу померять прямо на машине (колесо 235/45R17).
Впринципе, оно конечно так, но компас у меня во всех местах работает одинаково отвратительно, и дома тоже Я не нашёл условий, в которых он показал бы результаты, отличающиеся от описанного.
В защиту могу сказать, что при желании, всё можно скомпенсировать. Ведь компас закреплён в машине неподвижно, и влияние машины можно вычислить и скорректировать.
Меня смущает только то, что фото продаваемого модуля не совпадает с мануалом:
не впаян разъем для uart и нет DC-DC 5V->3.3V и rs232 драйверов.
Это не даст запитать модуль от 5V через uart разъем и придется иметь
дело только с miniPCIe. Корпус же все равно какой-то нужен, антенна не
должна висеть в воздухе.
Сырым данным думаю его сразу удастся научить (но только 1 Hz),
заодно и прошивку слить заархивировать.
Кстати для первичных экспериментов (с Калманом или любыми другими методами) думаю может подойти любой IBM/Lenovo Thinkpad (цена 4000-6000р. за приличный Core 2 Duo): у них у всех встроен двухосный акселерометр Analog Devices ADXL320. Это конечно не так круто как wheel tick и gyroscope, но для обкатки технологий тоже годится. И паять ничего не надо. Вычислительная мощность больше любого смартфона, геометрически выровнять в автомобиле проще, чем смартфон. Можно даже док-станцию прикрутить намертво - цена 400 рублей за простой повторитель портов или 1000-1500р. за докстанцию с настоящим (не USB) COM-портом, который висит на отдельном прерывании и годится для PPS.
А какие эксперименты с ним можно делать? Наклон автомобиля отображать? Но даже это затруднительно, ибо надо вычесть центробежную силу на поворотах, а без гироскопа это не выйдет.
Рекомендую заказать MPU-6050 и USB TO I2C адаптер для подключения к ноутбуку. Будет 3-осевой акселерометр и 3-осевой гироскоп.
В сумме это обойдётся в $13.61, и паять кроме соединительных проводов ничего не надо.
Сам использую эту связку для экспериментов, и могу поделиться кодом на С++ для работы с ними (под винду).
Как раз центробежная сила (боковое ускорение) и является измеряемым параметром. Этот метод используется в топовых томтомах и некоторых моделях Pioner. Конечно точность у них не ахти, в основном для отслеживания развязок в тоннелях (map matching).
На видео в предыдущем посте ноутбук просто наклоняют. Я свой подергал на столе вперёд-назад и влево-вправо - отлично реагирует )))
За наводки по электронике спасибо.
(added)
мда… почитал про точность и шум этих акселерометров. Для навигации не годятся, только для отслеживания “отвернул влево/вправо” без конкретных чисел. Но отследить вылеты GPS и забраковать измерения по ним можно. Собственно интерес возник исключительно после чтения литературы по Калману, хочется хоть что-то в него замешать минимальными усилиями
Все на самом деле впаяно, и модуль нормальный LEA-6R, нет только второго кабеля для 5 пинового JST разъема:
$GPTXT,01,01,02,HW UBX-G60xx 00040007 777FFFFFf*45
$GPTXT,01,01,02,EXT CORE 7.03 (47340) May 10 2011 14:36:32*47
$GPTXT,01,01,02,ROM BASE 7.03 (45969) Mar 17 2011 16:18:34*57
$GPTXT,01,01,02,MOD LEA-6R-0*37
$GPTXT,01,01,02,DR 6R C0 2.00*70
Похоже все несколько сложнее:
В базовой прошивке RXM-RAW есть, а вот в EXT все это дело
зачистили, остался только TRK-SFRB. Дело в принципе поправимое,
но не за 5 минут.