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 от меня, но на первом-же повороте все отклонения пропали. Не знаю что еще придумать.

Совместит и то и другое и еще CAN
https://www.olimex.com/Products/Duino/STM32/OLIMEXINO-STM32
Дело только в правильном фирмваре, которое можно и для Globalsat TR-600GLONASS
будет использовать.

Свежак: http://www.ixbt.com/news/hard/index.shtml?16/15/55
В конфигурацию этого микроконтроллера входит процессор ARM Cortex-M0+, работающий на частоте 48 МГц, от 32 до 128 КБ флэш-памяти, высокоскоростной 12/16-разрядный АЦП, 12-разрядный ЦАП, высокоскоростной аналоговый компаратор, таймеры, интерфейс сенсорной панели и контролер USB 2.0 (host/device/OTG). В режиме исполнения программы из флэш-памяти удельное потребление микроконтроллера составляет всего 40 мкА/МГц.

Цена новинки (MKL25Z128VLK4) в корпусе LQFP с 80 выводами — $1,98 за штуку в партии из 10000 штук; платформа Freescale Freedom (FRDM-KL25Z) стоит $12,95.

Ну как бы мимо: закладываться на непонятно какой фрискейл, при наличии прям под рукой, в любом магазине ST / LPC ( / Atmel / EnergyMicro / AnalogDevices / TI / …), а также отладочных плат под них (хочешь - made in russia, хочешь - китайских), как-то странно.

А вот кортекс-м0 плюс - это любопытно, надо будет почитать…

Кому интересно: Arduino GPX Library

Есть ли какие мнения об использовании программного обеспечения (и железа ?) от http://www.openpilot.org ?
EKF там вроде как имплементирован и даже документация на него есть,
STM32F10x и STM32F4 поддерживаются
(CAN драйвера правда нет, но это поправимо).