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

Mavlink на пальцах ( без использования библиотек )

Вс янв 10, 2021 14:54:11

Здрасте, С наступившим Всех 2021. :beer:

Господа, будьте любезны, помогите разобраться с протоколом Mavlink. (MAVLINK v1)

Стоит задача:
Нужно читать UARTом микроконтроллера AtMega328 телеметрию, выдергивать из потока нужные мне сообщения,
перекодировать в свой формат и посылать через UART в локальную машину с Windows.


Проблема заключается в следующем:

Немного пишу на асме, но при необходимости могу и на СИ потупить немного...
Использовать библиотеку, которую предлагают использовать я не хочу.
На это есть пара причин:
Во первых не смог подключить библиотеку ( СИ слишком абстрактен для меня, ASM мне более понятен )
Во вторых не вижу смыла подключать целую библиотеку для такой простой задачи.

И отсюда вытекает проблема:

На оф. сайте МАВЛИНКА https://mavlink.io/en/guide/serializati ... ket_format
Нет четкого описания какой HEX у байта_5 (Message ID) ЛИБО Я НЕ МОГУ НАЙТИ ЭТУ ИНФОРМАЦИЮ
Ну то-есть я не знаю, что находится в полезной нагрузке данного пакета.
На оф сайте, предполагается, что пользователи будут подключать нужную библиотеку, и там полно информации о том как работать с данной библиотекой.

Ну в общем как то так.

Может кто носом натычет в лист с информацией, по которому можно расшифровать данные.
Либо мож у кого своя мини-либа имеется?
А может у кого есть опыт работы с этим протоколом и подскажет мне?
Может кто проект свой даст посмотреть?
Может еще какие то варианты?
Последний раз редактировалось uwrtey Пн янв 11, 2021 03:29:23, всего редактировалось 3 раз(а).

Re: Mavlink протокол без библиотеки для AVR

Вс янв 10, 2021 17:00:08

а где можно скачать стандартную библиотеку ? если нет желания ее использовать - то можно в конце концов в нее подсматривать и писать свою :-)

Re: Mavlink протокол без библиотеки для AVR

Вс янв 10, 2021 18:21:22

У меня - дежа-вю?
https://www.radiokot.ru/forum/viewtopic.php?p=2433346

Re: Mavlink протокол без библиотеки для AVR

Вс янв 10, 2021 22:10:32

Нет, не де'жавю.
С тех пор вопрос остался открытым.
Со временем проблемы. Выкроил немного и решил снова взяться.

Добавлено after 6 minutes 5 seconds:
а где можно скачать стандартную библиотеку ? если нет желания ее использовать - то можно в конце концов в нее подсматривать и писать свою :-)

ArduPilotMega тут: https://mavlink.io/en/messages/ardupilotmega.html


О-о!!!
Я, кажется, нашел! тут: https://mavlink.io/en/messages/common.html



Рассмотрим нужный мне пакет MAVLink:

FE 1C E2 01 01 1E EE 3B 00 00 A0 10 57 3B 75 F5 10 BD 4B D0 21 40 59 95 94 B9 DC 80 4B BA 9E C7 8A B9 7B 1D

FE = начало пакета ( стартовый байт )
1C = 28 байт в полезной нагрузке
E2 = 226 порядковый номер сообщения
01 = ID автопилота ( у нас один автопилот, по умолчанию единица )
01 = ID компонента ( у нас всего один компонент - автопилот )
1E = 30 ( табличный номер ATTITUDE #30 )
EE 3B 00 00 A0 10 57 3B 75 F5 10 BD 4B D0 21 40 59 95 94 B9 DC 80 4B BA 9E C7 8A B9 = полезная нагрузка ( 28 байт )
7B 1D = контрольная сумма

Теперь нужно расшифровать полезную нагрузку

EE 3B 00 00 A0 10 57 3B 75 F5 10 BD 4B D0 21 40 59 95 94 B9 DC 80 4B BA 9E C7 8A B9

вот что должно поучится:

time_boot_ms = uint32_t = ms
roll ======== float=== rad
pitch ======= float=== rad
yaw ======= float=== rad
rollspeed ==== float=== rad/s
pitchspeed === float === rad/s
yawspeed === float === rad/s

Так как каждый параметр по 4 байта получаем такое сообщение:

hex-> EE3B0000 A010573B 75F510BD 4BD02140 599594B9 DC804BBA 9EC78AB9

Теперь это нужно перевести в понятный человеку вид ( в десятичный )
float переводим тут: http://floatingpoint.ru/online/float2dec.php


EE3B0000 - HEX-to-DEC 3996844032 милисекунд
A010573B - 1.12766206264495849609375 ( 64,61 градусов по roll )
75F510BD - 1.91457331180572509765625 ( 109,7 градусов по pitch )
4BD02140 - 1.62601470947265625 ( 93,16 градусов по yaw )
599594B9 - 1.16860115528106689453125 ( 66,96 градуса в секунду по rol )
DC804BBA - 1.0023109912872314453125 ( 57,43 градуса в секунду по pitch )
9EC78AB9 - 1.55892097949981689453125 ( 89,32 градуса в секунду по yaw )

ПС: автопилот лежал неподвижно rollspeed, pitchspeed и yawspeed должны быть равны нулю, или близки к нулю..
Возможно какой то дрейф, например дрейф самих датчиков или из за того что GPS сквозь бетон не ловит...
Но судя по тому что получилось, дрейф слишком велик, либо вычисления кривые ;)

ППС: Извините, что я тут сам с собой разговариваю... :oops:

Re: Mavlink на пальцах ( без использования библиотек )

Пн янв 18, 2021 20:17:35

EE3B0000 - HEX-to-DEC 3996844032 милисекунд
Выглядит сомнительно. Слишком большое, да и в реальности нули будут скорее в старших разрядах. Поэтому, меняете порядок байт, и получаете примерно следующее:
Код:
echo A0 10 57 3B 75 F5 10 BD 4B D0 21 40 59 95 94 B9 DC 80 4B BA 9E C7 8A B9 | perl -ne 's/\s//g; for(/\w{8}/g){$v=pack "N",hex; $f=unpack("f",$v); printf("hex:0x%08x float:%10.7f grad:%0.3f\n", unpack("V",$v), $f, $f * 57.2958)}'
hex:0x3b5710a0 float: 0.0032816 grad:0.188
hex:0xbd10f575 float:-0.0353903 grad:-2.028
hex:0x4021d04b float: 2.5283382 grad:144.863
hex:0xb9949559 float:-0.0002834 grad:-0.016
hex:0xba4b80dc float:-0.0007763 grad:-0.044
hex:0xb98ac79e float:-0.0002647 grad:-0.015

Re: Mavlink на пальцах ( без использования библиотек )

Пн янв 18, 2021 20:47:35

Да да, все верно - уже разобрался ! Спасибо большое!
Ответить