Форум РадиоКот https://radiokot.ru/forum/ |
|
Mavlink на пальцах ( без использования библиотек ) https://radiokot.ru/forum/viewtopic.php?f=24&t=174891 |
Страница 1 из 1 |
Автор: | uwrtey [ Вс янв 10, 2021 14:54:11 ] |
Заголовок сообщения: | Mavlink на пальцах ( без использования библиотек ) |
Здрасте, С наступившим Всех 2021. ![]() Господа, будьте любезны, помогите разобраться с протоколом Mavlink. (MAVLINK v1) Стоит задача: Нужно читать UARTом микроконтроллера AtMega328 телеметрию, выдергивать из потока нужные мне сообщения, перекодировать в свой формат и посылать через UART в локальную машину с Windows. Проблема заключается в следующем: Немного пишу на асме, но при необходимости могу и на СИ потупить немного... Использовать библиотеку, которую предлагают использовать я не хочу. На это есть пара причин: Во первых не смог подключить библиотеку ( СИ слишком абстрактен для меня, ASM мне более понятен ) Во вторых не вижу смыла подключать целую библиотеку для такой простой задачи. И отсюда вытекает проблема: На оф. сайте МАВЛИНКА https://mavlink.io/en/guide/serializati ... ket_format Нет четкого описания какой HEX у байта_5 (Message ID) ЛИБО Я НЕ МОГУ НАЙТИ ЭТУ ИНФОРМАЦИЮ Ну то-есть я не знаю, что находится в полезной нагрузке данного пакета. На оф сайте, предполагается, что пользователи будут подключать нужную библиотеку, и там полно информации о том как работать с данной библиотекой. Ну в общем как то так. Может кто носом натычет в лист с информацией, по которому можно расшифровать данные. Либо мож у кого своя мини-либа имеется? А может у кого есть опыт работы с этим протоколом и подскажет мне? Может кто проект свой даст посмотреть? Может еще какие то варианты? |
Автор: | ВитГо [ Вс янв 10, 2021 17:00:08 ] |
Заголовок сообщения: | Re: Mavlink протокол без библиотеки для AVR |
а где можно скачать стандартную библиотеку ? если нет желания ее использовать - то можно в конце концов в нее подсматривать и писать свою ![]() |
Автор: | Jack_A [ Вс янв 10, 2021 18:21:22 ] |
Заголовок сообщения: | Re: Mavlink протокол без библиотеки для AVR |
У меня - дежа-вю? https://www.radiokot.ru/forum/viewtopic.php?p=2433346 |
Автор: | uwrtey [ Вс янв 10, 2021 22:10:32 ] |
Заголовок сообщения: | Re: Mavlink протокол без библиотеки для AVR |
Нет, не де'жавю. С тех пор вопрос остался открытым. Со временем проблемы. Выкроил немного и решил снова взяться. Добавлено 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 сквозь бетон не ловит... Но судя по тому что получилось, дрейф слишком велик, либо вычисления кривые ![]() ППС: Извините, что я тут сам с собой разговариваю... ![]() |
Автор: | mont-oriol [ Пн янв 18, 2021 20:17:35 ] |
Заголовок сообщения: | Re: Mavlink на пальцах ( без использования библиотек ) |
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 |
Автор: | uwrtey [ Пн янв 18, 2021 20:47:35 ] |
Заголовок сообщения: | Re: Mavlink на пальцах ( без использования библиотек ) |
Да да, все верно - уже разобрался ! Спасибо большое! |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |