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

Действительно, пробег машины на один оборот колеса вряд-ли больше 1,5м, т.е. в худшем случае импульс будет на 18см. Это очень неплохой показатель т.к. большинство машин имеют 0,22-0,25м на пульс. Проблемы наблюдаются при 30-40см на пульс и то могут компенсироваться некоторыми ньюансами вождения. Ура!

зы. Плохо что на массе, это как в suzuki, для dr-gps всеже нужны 12в пульсы. В худшем случае придется колхозить инвертер сигнала. Прерывать землю не получится т.к. от той-же земли питается индикатор заднего хода. Понимаете, по пульсам невозможно определить направление движения автомобиля и калибрация не пройдет.

Ха-ха, это смотря какие колеса, на моих в 33 дюйма получается длинна окружности районе 2,63м., тогда один оборот это как раз зона риска ~ 32см. Хотя понятно, что колесо не бывает в реальности такого диаметра. Т.к. оно всегда проминается.

С 8 импульсами я наврал :frowning: Изначально замерял так: поставил машину, что бы было видно в каком положении сосок и проехал один оборот колеса. Получилось 8 штук.

Потом пробовал по другому: замечаю место где стою, проезжаю до срабатывания импульса, замеряю расстояние: то 75 см получается, то 130 см :slight_smile: Потом подумал, что надо ехать-то не от случайного места, а с того когда только-только импульс пришел :slight_smile:

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

Но было уже темно. Поэтому я взял два Озика с разными навигаторами, ездил по улицам и фиксировал диктофоном показания GPS-одометров и Arduino-вского. На Arduino получается не намного большие значения, чем на GPS (понятно, что дрейф нулевой точки и мусор ни кто не отменял). Сегодня переведу записи в цифры и все-таки узнаю какое, примерное расстояние я получу на один импульс.
Понятно, что dead reconing у меня все равно не получится, но будет более точный одометр, чем в штатной приборке, который врет на 20% из-за бОльших колес.

Мдааа, на курвиметр непохоже :frowning: Предлагаю использовать и фронт и срез импульса. Получите теже 0,16m/pulse

Нет, т.к. никто не обещал, что коэф. заполнения строго равен 50%. Один импульс будет, предположим, после 10 см, а второй - после 23.

незнаю как там работает ардунские схемы, но в фирменном чипе ublox один раз в секунду в окончательный рассчет принимается только количество импульсов, собранных за предыдущую секунду. Таким образом важным является лишь число, например 35 или 48 импульсов и неважно в каком они были порядке и хромает-ли ритм.

Кроме того зная пропорции работы геркона в спидометре вкл-выкл при генерации удвоенного меандра можно и подправить картинку. Генерить его всеравно придется т.к. все DR-GPS схемы считают только фронты.

Что-то я тогда совсем не понимаю необходимости умножать количество импульсов. Точность-то это никак не повысит…

Что-то у меня сходу не придумывается “подправлялка” на логике, которая автоматически подстраивает длительность импульса под его период. Вполне вероятно, что для этого придётся ставить отдельный контро… ардуину :slight_smile:

Верно, в моем случае длинна импульса явно меньше периода.

Понять очень просто. В герконо-магнитных механизмах меняется частота и длительность импульсов. DR получает только частоту, длительность пропускает, а это дополнительная информация.

можно погуглить “удвоитель частоты” вторая ссылка дает пищу уму поизобретать http://irls.narod.ru/it/uchi.htm

В связи с покупкой raspberry pi я все таки поcтараюсь разобраться
с набором параметров посылаемых на CAN шине контроллером ABS/EPS системы
которая стоит на ‘Audi A4/S4 B6/B7’.
Судя по диагностике их там довольно много, и названия весьма замысловатые…

Измеряется по крайней мере скорость каждого колеса (Geschwindigkeit: km/h), ускорение в 2 направлениях (Querbeschleunigung/Längsbeschleunigung: m/s²) ,
угол поворота (Lenkwinkel: °), скорость изменения угла поворота (Drehrate: °/s).
Druck [bar] это видимо тормозное усилие.
С цифрами надо разбираться, Längsbeschleunigung выглядит странно.
Найти соответствие между параметрами и CAN адресами задача конечно нудная, но разрешимая,
поскольку адаптер в Lаwicel моде использует легко читаемый ascii формат.
Думаю на машинах VW с ESP это тоже булет работать.


	Block 1				
	Zeit	Geschwindigkeit	Geschwindigkeit	Geschwindigkeit	Geschwindigkeit
Markierung	[s]	[km/h]	[km/h]	[km/h]	[km/h]
	1.15	0	0	0	0
	2.63	0	0	0	0
	3.99	0	0	0	0
	5.41	0	0	0	0
	6.74	3	3	3	3
	8.08	5	5	5	5
	9.48	5	5	5	5
	10.80	3	3	3	3


Block 5				
Zeit	Lenkwinkel	Drehrate	Druck	Querbeschleunigung
[s]	[°]	[°/s]	[bar]	[m/s²]
1.59	12.5	0.0	-1.0	-0.38
2.99	12.5	0.0	23.8	-0.38
4.38	10.0	0.0	-1.0	-0.38
5.76	10.0	0.0	-1.0	-0.38
7.09	12.5	-0.4	-1.0	-0.38
8.47	12.5	-0.5	-1.0	-0.38
9.83	10.0	0.0	6.5	-0.19
11.15	10.0	-0.1	15.0	-0.19


Block 10		
Zeit	Längsbeschl.	Längsbeschl.
[s]	[m/s²]	[m/s²]
1.95	292	-195
3.35	389	-195
4.75	195	-292
6.10	-778	-1070
7.45	-389	-778
8.81	97	-389
10.17	1168	195
11.51	1460	778


Block 23	
Zeit	Schalterstellungen
[s]	[]
2.54	101111
3.87	101111
5.28	101111
6.62	101111
7.96	101111
9.32	101111
10.68	101111
12.02	101111

Согласен. Достаточно в динамике посмотреть на цифры, засекать изменения при прямолинейном движении, на повороте итп, конечно это все простейшим логическим мышлением разбирается.

Кое-что удалось нагуглить, см. http://www.ate.uniovi.es/12609/seminario_slides.pdf
по id= 4A0H Bremse 3 и 5A0H Bremse 2
http://www.docstoc.com/docs/88972296/CAN–und-LIN-Bus-in-AUDI-Fahrzeugen
Испанец похоже имел доступ к оригинальной документации, его данные по 4A0
говорят что передается не только скорость колес, но и направление их движения.
А вот по 5A0 мой лог дает не 8 битное, а 8 байтовое поле, т.е. он взял кусок из
полного пакета.
Из CAN.ppt


Motor: x0xH / x8xH
Motor-Peripherie: x1xH
Kombi: x2xH
Getriebe: x4xH
ACC: x6xH
ABS: xAxH
ABS-Peripherie: xCxH

 0C0H Lenkwinkel (RB-Sensor)
 0C2H Lenkwinkel (ITT-Sensor für ITT-FDR)
 0C4H Lenkwinkel (ITT-Sensor für RB-FDR)
 0C8H (Gierraten / Querbeschleunigung)  
 100H MSG1 (V6 TDI)
 112H PSG1 (V6 TDI)
 1A0H Bremse 1
 280H Motor 1 
 288H Motor 2
 2A0H Bremse 4
 320H Kombi 1  
 380H Motor 3 
 388H Motor 4
 420H Kombi 2 
 440H Getriebe 1
 480H Motor 5    
 4A0H Bremse 3 
 500H MSG2 (V6 TDI)
 512H PSG2 (V6 TDI)
 520H Kombi 3
 580H Motor Flexia
 5A0H Bremse 2   
 7C0H Lenkwinkel-Konfigurierungskennung (RB)
 7C2H Lenkwinkel-Initialisierungskennung (ITT)

Из отсортированного лога инициализации (id+mgs_size in bytes+description)


200 3 ? Motor: x0xH / x8xH
200 7 ? Motor: x0xH / x8xH
2D0 3 ? Motor: x0xH / x8xH
790 1 ?
790 5 ?
790 6 ?
790 7 ?

Более серьезная диагностика:


050 4 ?
0C2 8 Lenkwinkel (ITT-Sensor für ITT-FDR)
1A0 8 Bremse 1
280 8 Motor 1 
288 8 Motor 2
320 8 Kombi 1
380 8 Motor 3
38A 4 ? Motor: x0xH / x8xH
390 8 ?
394 8 ?
420 8 Kombi 2
440 8 Getriebe 1
44A 8 ? Getriebe 2 ?
44C 8 ? Getriebe 3 ?
480 8 Motor 5 
488 8 ? Motor 6 ?
4A0 8 Bremse 3 (documented)
4A8 8 ? Bremse 4 ?
51A 8 ? Motor-Peripherie X ?
520 8 Kombi 3
540 8 ? Getriebe 4 ?
550 3 ?
572 1 ?
580 8 Motor Flexia ?
588 8 ? Motor X ?
5A0 8 Bremse 2 (documented)
5D0 6 ?
5D2 8 ?
5E0 8 ?
5F2 2 ?

Еще есть голландский лог для Audi A6


280 8 Motor 1 (09 A6 00 00 2A 00 1C 2A)
288 8 Motor 2 (81 76 10 00 00 49 97 AD)
380 8 Motor 3 (00 69 00 00 00 00 00 05)
440 8 Getriebe 1 (00 80 00 FE 7F 00 00 02)
480 8 Motor 5 (3F 24 00 00 00 00 00 00)
488 8 ? Motor 6 ? (00 23 22 7E 00 00 00 00)
540 8 ? Getriebe 4 ? (00 00 FF 00 00 00 10 20)
1A0 8 Bremse 1 (00 18 00 00 FE FE 00 11)
1A8 3 ? ABS ? (FC 03 FF)
4A0 8 Bremse 3 (00 00 00 00 00 00 00 00)
4A8 2 ? ABS ? (00 00)
5A0 8 Bremse 2 (7D 00 00 48 CC 12 00 AD)
7C2 8 Lenkwinkel-Initialisierungskennung (ITT) (67 00 00 00 42 00 00 98)

Фрагмент лога для VW Lupo
http://www.journalofremanufacturing.com/content/pdf/2210-4690-1-6.pdf

Анализ 2 идентификаторов
http://www.iwt-kdg.be/teralabs/sites/default/files/Decoding%20of%20data%20on%20a%20CAN%20powertrain%20network_FINAL.pdf

глядя на эти умные пдфки невольно приходишь к мысли что магнитики с герконами делаются на порядок быстрее и выдают на порядок более достоверную информацию.

по ровной сухой поверхности. В противном случае, наверное, на порядок же больше врут

Я же про Volkswagen говорю, а не про калину :roll_eyes:
И щи можно лаптем хлебать, даже экологически чище.

Нашел для полноты картины еще 5 идентификаторов


010
011
...
5D2
5E0
5F2

то есть всего получается 32 пакета, где-то 25KB/s (ascii).
Вcе мониторится в линуксе на нетбуке (CAN адаптер AGV4000Bexp), в raspberry pi кто-то нехороший не включил
драйвер cdc_acm (и ftdi), так что я пока там не могу использовать CAN, ublox
приемники и ADS-B приемник GNS 5890 (ADS-B “радар”).
Пакет 0C2 состоит из 4 16битных слов


t 0C2 8 109F 0000 3BE0 0370
t 0C2 8 F09E 5401 3BF0 032C

где последние 2 это (скорее всего) какие-то keepalive таймеры,
а вот первые два - те самые
угол поворота (Lenkwinkel: °), скорость изменения угла поворота (Drehrate: °/s)
Доступная старая документация VW говорит что датчик Längsbeschleunigung
устанавливается только на полноприводные машины.
Так что пакеты 0C2 и 4A0 (+расстояние между колесами и т.п.) вроде как дают все, что нужно для


Technical paper: "Performance of low-cost real-time navigation system using single frequency GNSS measurements combined with wheel-tick data"

http://www.u-blox.com/images/downloads/Product_Docs/u-blox_DR_technical_paper.pdf
Вопрос только в том, какие параметры брать в матрицах фильтра Калмана…

Edit
гуглоперевод испанского текста, требует зачиcтки
и осознания:
Antriebsschlupfregelung (ASR)
Motorschleppmomentregelung (MSR)
Elektronische Differenzialsperre (EDS)
Elektronische Bremskraftverteilung (EBV)
Elektronisches Stabilitätsprogramm (ESP)


==== 1A0 7ms Bremse 1 ==========================
Requerimiento ASR o MSR, intervención EDS, EBV o
ESP, y testigos ABS, ASR / ESP y freno y señal de
velocidad
---
Anforderung MSR oder ASR, 
EDS Intervention, 
EBV oder ESP,
und ABS Einschaltung, 
ASR / ESP Bremsen-und Geschwindigkeitsignal

==== 280 10/20(diesel)ms Motor 1 ==========================

Información del ralentí, kickdown, conmutador de
embrague, intervención ASR, MSR. RPM’s y Posición E-Gas
---
Informationen im Leerlauf,
Kickdown, 
Kupplungsschalter,
Intervention ASR, MSR 
RPM-und E-Gas Position

==== 288 10ms Motor 2==========================
Versión CAN. Código motor, código cambio, temperatura
líquido refrigerante, interruptor luz de freno, activación AA,
comunicación OBD2, informaciones GRA, etc..
---
CAN-Version. 
Motorcode, 
Getriebecode, 
Kühlmitteltemperatur, 
Bremslichtschalter, 
Aktivierung AA,
OBD2 Kommunikation, 
Information GRA, etc. ..

==== 320 25ms Kombi 1 ==========================
Estado puertas, presión aceite, falta líquido refrigerante,
testigo de combustible, lámpara precalentamiento, estado
testigo de frenos, señal de velocidad.
---
Türenanzeige, 
Öldruck, 
Kühlmittel Ausfall,
Kraftstoff-Steuerung, 
Vorglühkerzen, 
Bremsenansteuerung, 
Tachosignal.

==== 440 8ms Getriebe 1 ===========================
Petición desconexión AA, información embrague (WK),
petición elevación ralentí, posición palanca selectora,
marcha objetivo y marcha de emergencia.
---
AA Trennungsanforderung, 
Informationen (Wellen?)Kupplung (WK),
elevation (?) Anfrage im Leerlauf, ,
Wählhebelstellung,
Normalbetrieb und Notprogramm.

Для Golf IV


0C2 - Drehwinkel/rate-sensor ESP

1A0 - ABS (ggfs. mehr als eine ID ? )

280 - Motorsteuergerät
 byte 2 = RPM*4, L
 byte 3 = RPM*4, H

320 - Kombiinstrument. 
 byte 3 & 0x7f = fuel [l], 
 bit 7 = low warning

420 - Kombiinstrument
 byte 1 = Ext temp, displayed (delayed), temp=(val-100)/2
 byte 2 = Ext temp, measured, temp=(val-100)/2
 byte 4 = coolant temp, clt=(val-64)*.75

480 - 
 byte 3 = Verbrauchssignal
 Verbrauchssignal is gesendet als ID 480, byte 3. Der Wert (3. byte) und die
 Zeit zwischen den Nachrichten stellen zusammen den angezeigten
 Kraftstoffverbrauch fest. 
 mein Experiment zeigte dieses:
 2ms*254 1/1.8
 1ms*254 3.7/2.8
 1ms*128 6.5/7.4
 1ms*25 32.3/33.2
 1ms*12 64.5/65.4


В “бельгийском” тексте
RPM это 280 байты 3 и 4, так что требует сравнения с
измеренными данными.

Edit2
Мои цифры cовпадают с “немецким” вариантом (Golf IV)


$ fgrep t280 log | awk '{print strtonum("0x"substr($1,5+1+2*3,2)substr($1,5+1+2*2,2))/4}' | xmgrace -pipe

Сообщения на CAN шине для Mini:
http://bobodyne.com/web-docs/robots/MINI/CAN/Presentation/index.html
Список идентификаторов:
http://bobodyne.com/web-docs/robots/MINI/CAN/Presentation/Slide8.html
скорость колес
http://bobodyne.com/web-docs/robots/MINI/CAN/Presentation/Slide31.html
http://bobodyne.com/web-docs/robots/MINI/CAN/Presentation/Slide43.html

Самый дешевый китайский адаптер на чипе ELM327 тоже вроде должен работать,
при возможности проверю.

Шутить изволите? С Вашего позволения смею Вам заметить что много лет активно тестирую CAN-адаптеры и преобразую их данные в координаты специализированными GPS-чипами. Так вот. Любая каншина, что в бнв, что в калине выдает цифру скорости 1-2 раза в секунду. Это результат подсчета пульсов гребенки вала КПП или ABS, который соответственно длился секудну до этого. Потом эту скорость надо отправить в дальнейшие рассчеты, а с GPS данные приходят еще раз в секунду. Итого, по результатам натурных экспериментов имеем рассинхронизацию потоков данных более чем на секунду. При этом данные с гироскопа и со спутников синхронизированы с точностью до десятых долей секунды. Разницу ощущаете? У Вас машина уже уехала и повернула, а информация о продольном перемещении еще обрабатывается где-то. Кто писал алгоритмы навигаторов знает какой вал фидбека придет при “лагании на секунду-другую” - завалят воплями типа “дико тормозит а ххх не тормозит”

Поэтому аппаратные, низкоуровневые решения прямо с колес с актуальными пульсами типа 10pulse/m - это профессиональное картографическое решение. А пляски с канами как раз лапти и щи, хоть и дико дорогие, времязатратные, экологически чистые и проводов по машине меньше тянуть.

Зачем фантазировать, когда есть конкретные цифры ? Timestamp на CAN сообщения я пока отключил,
но разделив полное число сообщений на время (~70 минут) можно оценить сколько из них приходят в секунду.
Для более высокоприоритетного id=0C2 (угол поворота руля+угловая скорость) это ~10ms (100Hz),
а для id=4A0 (скорости и направления движения колес) это ~20ms (50Hz).
Порядок величин вполне согласуется с данными приведенными испанцем для других
сообщений (7ms тормоза, 8ms коробка, 10-20ms двигатель)
Более точные данные можно будет получить используя временные метки.
Я вижу скорее другую проблему: модулированный шум амплитудой ~0.2 km/h (период и спектр пока не анализировал),
систематическую разницу 2 km/h в скорости между передними и задними колесами (распределение нагрузки ?)
и между задними колесами (разница в давлении воздуха ?).

 
а с GPS данные приходят еще раз в секунду. 

10-20 Hz это не проблема для GPS (и глонасс с NV08C-CSM), у людей скорее болит голова,
справится ли микроконтроллер типа STM32F4 с чисто вычислительной нагрузкой:
http://lists.osgeo.org/pipermail/foss-gps/2012-May/000684.html

Ну это как говорится, “Suum cuique”.

Я тоже обратил внимание на шум по скорости. Так и не понял куда он делся, но в треках и движении его определить не удалось. Короче он сам куда-то девается, можно забить на проблему кмк.

По поводу разницы скорости вращения. Сколько общался с установщиками и пользователями подобных систем - они как сговорились, берут вращение только с одного заднего колеса. Как правило левого т.к. им удобнее работать с осевой линией узкой дороги и левой гранью полосы на много полосных. Было еще пара маньяков, которые наоборот, нуждались в съемке красных линий и формы бордюрных камней. Они, соответственно, все перекинули за заднее правое колесо.

По поводу зимнего экстремального вождения. Пытался сбить систему с толку всякими заносами и полицейскими разворотами. DR-GPS вообще не показал разницы, что я нормально езжу, что в сплошных скольжениях. Клал треки как ни-в-чем не бывало. Возможно это потому что гироскоп более непредвзятое устройство чем датчик угла поворота рулевого колеса.

Единственный случай когда удалось “уехать” от курсора gps - это затяжной разгон с буксами при съеме пульсов с ведущих передних колес. Метров на пять наверное на чистом льду уехал вперед GPS от меня, но на первом-же повороте все отклонения пропали. Не знаю что еще придумать.