GPS с гироскопом и одометром.

Не показывайте мне его :slight_smile: Каждый день долбимся с ним на работе, уже видеть не хочу :slight_smile:

Открутите тему назад до #134. у меня на нем RTKlib работает (правда пока без GUI).
А по сути все это мог sharp zaurus SL-5500 уже много годов назад…

Хотелось бы вернуться к изначальной постановке вопроса:
к raspberry pi подключаются на I2C пины через SKU: ACC53133P
http://www.seeedstudio.com/depot/grove-i2c-hub-p-851.html
гироскоп SKU: SEN11763P
http://www.seeedstudio.com/depot/grove-3axis-gyro-p-750.html
и акселерометр SKU: SEN21853P
http://www.seeedstudio.com/depot/twig-3axis-accelerometer-p-765.html
По usb приходят пакеты с данными об угловых скоростях всех колес с CAN
шины, и сырые GNSS данные с ublox/nvs приемника на крыше.
rtklib отлично справляется с задачей дифференциального GPS позиционирования,
для гироскопа и акселерометра есть куча программ для ардуины.
Вопрос: как бы их всех объединить ?
Начать конечно надо с базовых уравнений, на которых и будет основываться
в дальнейшем EKF.

Универсальный ответ: http://ru.wikipedia.org/wiki/Фильтр_Калмана

Универсальный ответ это замечательно, только практической пользы от него немного.
С rtklib все ясно, ссылка на статьи ublox про CAN тоже была, осталось только добавить вот этот
http://blog.tkjelectronics.dk/2012/09/a-practical-approach-to-kalman-filter-and-how-to-implement-it/

Я тоже решил сделать нечто подобное :slight_smile:
На скрине - навигация внутри здания (гаражи), GPS не использовался. Для теста покрутил я там машину хорошо, так что к моменту выезда из гаража накопилась приличная угловая ошибка.
Трек специально подвинул на гаражи, так что въезд и выезд получились чуть криво - это не обращать внимания :slight_smile:
В сумме сделал 6 кругов, 3 слева и 3 справа.

Источники данных:

  • Гироскоп с акселерометром MPU6050.
  • ABS датчики на задних колёсах (подключился напрямую, так информацию можно получать оперативнее).

Дополнительные материалы:

  • Переходник I2C - USB (ищется на ебее за $9.89).
  • Плата stm32f4discovery (впрочем, подойдёт и любая ардуина).
  • Самодельный переходник с оптической развязкой для согласования датчиков колёс с МК.

Были также попытки вместо гироскопа использовать:

К слову, компас (использовал HMC5883L) на нашей широте работает отвратительно. Долго и утомительно калибрую, и даже после этого при малейшем наклоне направление съезжает… А ещё и смещение уже через час чуть уползает - и по-новой калибровать надо.


Тема будет незавершённой, если не выложу трек подлиннее:

Синий - GPS, красный - гироскоп (без GPS!): http://svimik.com/speedsensor10.jpg

Попытка добавить в расчёты GPS приводит пока только к плохим результатам: http://svimik.com/speedsensor15.jpg
Например, здесь GPS (синим) на повороте нехило вылетел на здания. И даже при хорошей фильтрации он утащил изначально правильный трек с дороги (красным), хотя непосредственно на повороте он ещё пытался сопротивляться :slight_smile:

А прошивка для нее откуда ?

Дело наверно все-таки не в широте, а в железной коробке = машине.

Опять же все определяется использованным программным обеспечением и параметрами фильтра…

Понятное дело, написал сам :slight_smile: А вы что подумали?

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

Если в на колёсах стоят активные датчики, то у них токовый выход, и подключиться к ним достаточно просто.
[color=#999]Для Skoda Fabia (2003) для задних колёс это будет провод, входящий под задними сиденьями, и идущий сразу в пучок проводов под задней дверью.
Альтернативный вариант - жёлтая колодка за рулевой осью (в книжке пишут “за приборной панелью”, но не стоит понимать буквально - сняв приборную панель вы встретитесь с непреодолимой перегородкой, а лезть надо снизу).[/color]
Схема для них будет такой, достаточно врезаться в кабель, и подключить оптрон с парой резисторов:

Датчик даёт ~50.4 импульса на метр, что позволяет мерить с сантиметровой точностью :slight_smile:

Подумал, что

  1. не имея возможности поправить прошивку, придется все равно делать все “from scratch”
  2. сигнал датчиков колес все-таки надо брать с соответсвующей CAN-шины (т.е. не CAN-entertainment :),
    благо STM32F4 это легко позволяет сделать. Хотя я бы (по многим причинам)
    скорее предпочел STM32F103.

Не уверен, что он там есть именно раздельно для каждого колеса, в нужном виде и с достаточной частотой обновления. Напрямую я сейчас с частотой 100гц с МК отчёты о колёсах получаю, а даст ли столько ABS контроллер в CAN?

STM32F4 взял потому, что он под рукой валялся. А так, с этой задачей (считать количество импульсов и измерять интервалы) должен справиться и AVR.

Читаем предыдущую страницу: на всем VW-подобном пакеты идут со следующей скоростью:

А Шкода это VW-подобное или нет? Я просто до этого с машинами дела не имел, так что подобного жаргона не понимаю :slight_smile:

Кстати, в моей машине вообще две раздельные CAN шины :slight_smile:

А какой контроллер посоветуете для подключения к компьютеру (чтобы проверить концепцию, не паяя и не программируя для этого?).

На ебее нашёл 3 варианта:
http://www.ebay.com/itm/USB-CAN-USB-to-CAN-bus-Converter-Adapter-For-professional-/321133103506?pt=LH_DefaultDomain_0&hash=item4ac5064992
http://www.ebay.com/itm/Pro-USB-CAN-USB-to-CAN-BUS-Converter-Adapter-USB-Cable-support-win7-System-/181001215573?pt=LH_DefaultDomain_0&hash=item2a24835e55
http://www.ebay.com/itm/USB-to-CAN-Analyzer-USB-CAN-Converter-Adapter-Dual-Channel-Support-ZLGCANpro-/251274894643?pt=LH_DefaultDomain_0&hash=item3a81269d33

У самого дешёвого есть ссылка на софт и даташиты. я открыл, а там вся документация на иероглифах :smiley:

А точное количество импульсов с датчиков он отображает? Т.е. возможно считать расстояние с разрешением в 2см, как я это делаю напрямую?

Первое практическое применения - добавил трамплины лежачих полицейских.
Отфильтровав трек по показаниям акселерометра, практически сразу получил чёткую картинку.

http://www.openstreetmap.org/browse/changeset/17291244

К сожалению, со спутника там ничего не видно, поэтому проверить никак не могу (но оснований не доверять нет - по памяти их примерно столько и было. к тому же, такие одинаковые по длинне отрезки - явно искуственного происхождения :slight_smile: ).

Сеат, Шкода и Ауди это все VW-подобные.

Это стандартная VW картинка, и на ней на самом деле 3 раздельные CAN шины:
+CAN-диагностика.
На моей Audi A4 B7 она случайно совмещена с CAN-powertrain (500kbit),
и отсутствует Gateway, на большинстве машин это не так
и через OBD разъем можно только заниматься диагностикой
(KWP2000 протокол).
В общем же случае надо цепляться естественно к CAN-powertrain
проводам.

Я бы взял плату вроде Olimexino-STM32
http://www.exp-tech.de/Mainboards/Olimexino-STM32-STM32F103RBT6.html
и адаптировал какую-нибудь “готовую” прошивку типа
https://github.com/Laurenceb/Dactyl
Вообще, если сделаете работающую прошивку, то я готов за это пожертвовать своим
EVK-6H
http://www.u-blox.com/en/evaluation-tools-a-software/gps-evaluation-kits.html

Врать не буду, как датчиком измеряется угловая скорость колеса не знаю (радиус колеса
и его вариацию тоже надо как-то учитывать).

Последнее прокатит для Европы только :slight_smile:
Я вот только сегодня проехал метров 100 по дороге, которую бы такая штука всю признала лежачим полицейским :slight_smile:
Но вообще, круто.

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

Вопрос был как раз в том, чтобы проверить саму возможность получения нужных данных. Не хочется слить много времени на программирование, чтобы потом увидеть, что там не то, что ожидал. Вот если подтвердится, что там есть то что нужно - тогда можно сесть и подумать, как оформлять аппаратную и програмную часть. (Время у меня, мягко говоря, ограничено. То, что я здесь делаю - это либо отпуск, либо больничный, иначе просто нереально :/).

Для России этим можно измерять качество дорожного покрытия :slight_smile:

Вообще, главная проблема у меня сейчас - это не получение данных с автомобиля (это уже сделано), а скрестить ежа с ужом GPS с данными с инерциальной системы :slight_smile:

Итак, вот ёж (красным) и уж (синим). Здесь они представлены раздельно, никаких спариваний не производилось:

Инерциальная система уже сама по себе даёт нормальный трек, но обладает предсказуемой проблемой - независимо от её качества, со временем будет накапливаться ошибка, и трек будет уходить. Если с пройденным расстоянием (датчики колёс) точность достаточно высокая (хотя всё равно может на 2% гулять), то с углом (гироскопом) ситуация чуть более печальна.

Зато, у этой системы неоспоримые приемущества по сравнению с GPS - отчёты со скоростью 100гц, возможность работать автономно (внутри помещений), красивые треки с плавными поворотами.

На практике можно получить даже такой результат (GPS - синим):

Видно, что по параметру красоты трека, система однозначно уделывает GPS - линии прямые, никуда не уползают и не улетают.

Однако, проблема привязки таких треков не даёт возможности практического использования. При попытке использовать какие-либо фильтры, они портят всю картину, добавляя лишь лишних изгибов (GPS - красным, результат фильтра - синим):

Мне приходит в голову вот что:

  • нужно анализировать качество fix-а GPS (GDOP, carrier lock interval),
  • отбирать на основании этого хорошие надежные точки по GPS
  • делить трек который не по GPS на фрагменты (по времени получения хороших точек)
  • делать простое аффинное преобразование (сжатие-растяжение-поворот) для этих фрагментов, сажая их концы на надежные точки по GPS.
    Других вариантов не вижу, честно говоря.

То есть конечно, есть Delaunay triangulation, но как-то я не очень себе представляю это на мобильном устройстве с дохренищей точек.