Страница 1 из 1

протокол MAVlink ( библиотека )

Добавлено: Вс июл 12, 2015 12:49:59
uwrtey
Кто ни будь работал с протоколом MAVlink? ( http://www.qgroundcontrol.org/mavlink/start )
Нужна библиотека для работы с этим протоколом.
Естественно пригодная для работы с AVR ( очень желательно без АРДУИНОзависимости )
В тырнэте ни слова на Русском про этот протокол.

Могу дать кусочек кода принятого по протоколу MAVlink через гипертериминал
артем_гпс_антеннатрекер.txt
(31.48 КБ) 471 скачивание
Как видно, код MAVlink бинарный и не расшифровывается таблицей ASCII.
Зато комментарии читаются...

Re: протокол MAVlink ( библиотека )

Добавлено: Вс июл 12, 2015 20:23:42
Jack_A
Я никогда этим протоколом не занимался, но глянул ради любопытства - первая часть текстовой строки = бинарные данные в HEX-коде, вторая часть - те же данные, но в ASCII. Если символом ASCII код выражен быть не может, то вместо его точка. Посмотрел по ссылкам - протокол задокументирован нормально. Если есть вопросы к наполнению содержанием конкретных параметров - это, видимо, адресоваться к конкретной аппаратуре ЛА .

Re: протокол MAVlink ( библиотека )

Добавлено: Вс июл 12, 2015 22:08:52
uwrtey
первая часть текстовой строки = бинарные данные в HEX-коде, вторая часть - те же данные, но в ASCII.
ТОЧНО!!!
блин, онлайн ресурс меня подвел - http://www.asciitohex.com/
он не умеет читать посылку в которой содержаться нечитаемые данные!!!!
надо бы другой ресурс присмотреть....

Мне щас скинули еще один кусочек кода. На этот раз код не дешифруется ASCII
для сани(1).txt
(119.34 КБ) 336 скачиваний
У меня самого нет возможности считать этот код.
( Товарищ в другом городе проживает )
Если есть вопросы к наполнению содержанием конкретных параметров - это, видимо, адресоваться к конкретной аппаратуре ЛА .
Не совсем так.
MAVlink - это универсальный протокол обмена данными для передачи телеметрии.
В частности большинство модельных полетных контроллеров ( автопилотов ) работает с этим протоколом.
Раньше использовали ASCII, но он очень "тяжелый" и по этому от него отказались.
Сейчас полетный контроллер опрашивает все возможные датчики и вставляет значения в протокол мавлинк.
Конкретных ЛА тут нет. Протокол универсален.

Дело в том, что мне поставили задачу выдернуть GPS данные из этого протокола и данные с БАРО датчика ( датчик высоты )
и дальше с ними поработать.
Нужно сделать самонаводящуюся антенну - проект открытый.

А у меня нет ни полетного контроллера, ни знаний протокола МАВЛИНК.
Даже подобных проектов в тырнете нет.

вот способ шифрования мавлинк
Изображение
Попробую расшифровать один из пакетов ( которы мне скинули в первый раз )

Код: Выделить всё

FE 19 D3 01 01 16 00 00 00 00 10 01 B6 00 43 4F 4D 50 41 53 53 5F 4C 45 41 52 4E 00 00 00 02 43 12 // ю.У.........¶.COMPASS_LEARN....C.
                                                            
Всего 33 байта 

43 4F 4D 50 41 53 53 5F 4C 45 41 52 4E = COMPASS_LEARN

*****************************************************************************************************************************************************************

где

0) - FE - начало пакета

1) - 19 - указывает длину следующей полезной нагрузки ( десятич 25 ) все верно! 25 байт!!!

2) - d3 - Каждый компонент подсчитывает его последовательность отправки. Позволяет обнаруживать потерю пакетов. ( десятич 211 )

3) - 01 - идентификатор передающей системе. Позволяет дифференцировать различные MAVS в той-же сети.

4) - 01 - ID предоставляемого компонента. Позволяет дифференцировать различные компоненты системы, такие как IMU или автопилот

5) - 16 - идентификатор сообщения. ID определяет что означает сообщение и как его правильно декодировать. ( десятич 22 )

6) - 00 00 00 00 10 01 B6 00 43 4F 4D 50 41 53 53 5F 4C 45 41 52 4E 00 00 00 02    - сообщение ( 25 байт )

7и8) - 43 12 - контрольная сумма


теперь нужно расшифровать сообщение 00 00 00 00 10 01 B6 00 43 4F 4D 50 41 53 53 5F 4C 45 41 52 4E 00 00 00 02


00 00 00 00 10 01 B6 00 - ? ( 8 байт )

43 4F 4D 50 41 53 53 5F 4C 45 41 52 4E - это мы знаем - COMPASS_LEARN ( 13 байт )

00 00 00 02 - ? ( 4 байта )

тут остается посмотреть действительные значения с этого компаса и понять как они кодируются
Аналогично можно расковырять GPS координаты.

Re: протокол MAVlink ( библиотека )

Добавлено: Пн июл 13, 2015 10:02:06
Jack_A
Я никогда ни с кем не спорю, тем боле по вопросу, которым я плотно не занимался. Приведенный "скелет" протокола я видел. Так в нем поле Data ( Byte Index 6... ) зависит от Byte Index 5 ( тип сообщения ). Я не утверждал, что данные зависят от конкретного типа ЛА, я предполагал, что они зависят от конкретного устройства на ЛА, опрашиваемого в данном сеансе. Иначе если бы протокол стандартизовал не только формат посылки, но и ее содержание, конструкция сообщения была бы жесткой : байты X...X+n - курсовой угол, байты Y...Y+n - тангаж и т.п. Но это всего лишь предположения, подкрепленные опытом работы с Modbus . Там тоже от меня заказчик требовал: если в букваре есть опрос катушек - опрашивай катушки, хотя никаких катушек в проектируемом устройстве и в помине нет, а про всякие отсечки, температуры, тау и пр. -- ни-ни ! :?
А с новым фрагментом - возможно, это не прямо принятое с ЛА, а пропущенное через какую-нибудь прогу, которая произвела нужные, как ей казалось, перекодировки. Или же ASCII в этом сообщении нет, все бинарное.
Ну, успехов Вам! Пусть число взлетов совпадает с числом посадок!

Re: протокол MAVlink ( библиотека )

Добавлено: Пн июл 13, 2015 10:11:11
uwrtey
Я не утверждал, что данные зависят от конкретного типа ЛА, я предполагал, что они зависят от конкретного устройства на ЛА
Ох, точно. Прошу прощения...
Тогда все правильно...
Или же ASCII в этом сообщении нет, все бинарное.
Да, точно - заказчик подтвердил, что все бинарное.
А ASCII сообщения выдает автопилот на старте.
Ну, успехов Вам! Пусть число взлетов совпадает с числом посадок!
Спасибо!

Что касается GPS кодирования

GPS-модуль U-Blox ( блоха )
выдает данные по протоколу UBX ( да, да именно по такому протоколу )
далее эти данные вствляются в протокол MAVlink

GLOBAL_POSITION_INT ( #33 ) ( https://pixhawk.ethz.ch/mavlink/ )

Код: Выделить всё

time_boot_ms	 (uint32_t)	Timestamp (milliseconds since system boot) //Отметка (миллисекунд с момента загрузки системы)

lat	(int32_t)	Latitude, expressed as * 1E7 // Широта, выражается в * 1E7

lon	(int32_t)	Longitude, expressed as * 1E7 // Долгота, выражается в * 1E7

alt	(int32_t)	Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) // Высота над уровнем моря в метрах, выраженное в * 1000 (мм), над уровнем моря (не WGS-84 - обратите внимание, что практически все модули GPS обеспечивают над уровнем моря, а)

relative_alt	(int32_t)	Altitude above ground in meters, expressed as * 1000 (millimeters) // Высота над землей в метрах, выраженное в * 1000 (мм)

vx	(int16_t)	Ground X Speed (Latitude), expressed as m/s * 100 // Наземная X Скорость (широта), выраженная в м / с * 100

vy	(int16_t)	Ground Y Speed (Longitude), expressed as m/s * 100 //  Наземная Y Скорость (Долгота), выраженная в м / с * 100

vz	(int16_t)	Ground Z Speed (Altitude), expressed as m/s * 100

hdg	(uint16_t)	Compass heading in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX


Re: протокол MAVlink ( библиотека )

Добавлено: Пт июл 17, 2015 23:02:34
uwrtey
Не могу понять как определять ID ( идентификатор ) GPS модуля.
В мануале написано GLOBAL_POSITION_INT ( #33 )
мне подсказали, что запись вида #33 - является шестнадцатеричной.
Но в куске кода я не нашел ни одной посылки с таким идентификатором.
Отсюда следует:
1) #33 не является шестнадцатеричным идентификатором GPS
2) В том куске кода не было ни одной посылки, содержащей сообщения с координатами.
:(
Вот о чем я и говорю, остается гадать - так как самому код не считать...

Re: протокол MAVlink ( библиотека )

Добавлено: Пн июн 06, 2016 10:24:30
mr_smit
Пытаюсь разобраться с протоколом. Сохранил обмен что шлет мой полетный контроллер APM 2.6. Хочу вытащить значение напряжения на аккумуляторе. И не могу понять почему Message ID у многих посылок одинаковый 16 ? (5-й байт)

FE 19 7D 01 01 16 00 00 00 00 32 01 03 01 42 41 54 54 5F 4D 4F 4E 49 54 4F 52 00 00 00 00 02 F9 82 þ.}.......2...BATT_MONITOR.....ù‚

FE 19 7E 01 01 16
00 00 80 BF 32 01 04 01 42 41 54 54 5F 56 4F 4C 54 5F 50 49 4E 00 00 00 02 CD 16 þ.~.....€¿2...BATT_VOLT_PIN....Í

FE 19 7F 01 01 16
00 00 80 BF 32 01 05 01 42 41 54 54 5F 43 55 52 52 5F 50 49 4E 00 00 00 02 64 6D þ......€¿2...BATT_CURR_PIN....

Я думал достаточно отловить начало посылки 0xFE, посмотреть какой параметр тут содержится (Message ID) и вытащить его. Как тогда разбирать эти посылки? Или надо парсить по ключевым словам (BATT_MONITOR и т.д.)?

Re: протокол MAVlink ( библиотека )

Добавлено: Вт июн 07, 2016 10:32:50
mr_smit
Вот, например, ещё одна посылка:

FE 1A FA 01 01 1B 36 B6 AA 2C 00 00 00 00 DA FF D7 FE 40 FC 00 00 FF FF 00 00 14 00 FC FF 57 00 71 DA

Описания в самой строке уже нет. Какой параметр тут передается?

FE - заголовок
1A - длина (26 байт)
FA - порядковый номер посылки
01 - System ID
01 - Component ID
1B - Message ID
...
... 26 байт данных ...
...
71 DA - контрольная сумма

Я не смог найти описания Message ID и как потом разобрать данные. Может у кого есть описание?

Re: протокол MAVlink ( библиотека )

Добавлено: Пн июн 20, 2016 22:00:21
mr_smit
Нашел: https://pixhawk.ethz.ch/mavlink/#SYS_STATUS

Напряжение содержится в Message ID 0х01. 15-й и 16-й байт. Байты поменять местами и получится напряжение в мВ.