Cześć
Czy ktoś może mi łopatologicznie wytłumaczyć jak obliczyć crc do wysłania/sprawdzenia przychodzącego pakietu (msg) w mavlink 1.0 ?
Najlepiej na przykładzie bo czytam różne opisy i nie do końca kumam
Jest sobie ramka (np heartbeat) odebrana:
FE 09 01 01 01 00 10 00 00 00 01 03 11 02 03 D6 BD
Odrzucam bajt startowy: FE, odrzucam końcówkę CRC: D6 BD, zostaje mi 14 bajtów - 5 nagłówka i 9 "treści właściwej"
Jakie operacje kolejno muszę przeprowadzić, aby ze startowego CRC (0xFFFF) uzyskać D6BD? Gdzieś jeszcze muszę dorzucić CRC Extra - gdzie i jak ? (dla heartbeat CRC extra wynosi 50, (0x32)). Czytałem już trochę na ten temat ale jakoś nie do końca rozumiem...
I przy okazji inne pytanko - co się stanie jeśli w kolejnym wysyłanym komunikacie nie zrobię inkrementacji numeru kolejnego wiadomości (bajt 2 - zielony)?
Jak policzyć CRC mavlink 1.0
Moderatorzy: moderatorzy2014, moderatorzy
Jak policzyć CRC mavlink 1.0
Pozdrawiam
Janusz
Ostatnio zamęczam: S800 na Omnibus F4
Janusz
Ostatnio zamęczam: S800 na Omnibus F4
Re: Jak policzyć CRC mavlink 1.0
Kolejno dla kazdego z 14 bajtow byte aktualizujesz crc (poczatkowo rowne 0xFFFF) w nastepujacy sposob:
Nastepnie wykonujesz te operacje raz jeszcze dla CRC Extra.
I masz szukane 2 bajty CRC
Kod: Zaznacz cały
uint8_t tmp;
tmp = byte ^ (uint8_t)(crc & 0xff);
tmp ^= (tmp << 4);
crc = (crc >> 8) ^ (tmp << 8) ^ (tmp << 3) ^ (tmp >> 4);
I masz szukane 2 bajty CRC
Kod: Zaznacz cały
(uint8_t)(crc & 0x00FF)
(uint8_t)(crc >> 8)
Re: Jak policzyć CRC mavlink 1.0
Wielkie dzięki
Zatrybiłem, przerobiłem pod C# - umiem odczytać dane i sprawdzić CRC
A teraz jak wysłać SET_MESSAGE_INTERVAL ???
Patrzę na https://pixhawk.ethz.ch/mavlink i MAVLink Messages (od połowy strony) umiem poskładać, ale te pola MAV_CMD nie wiem jak przypiąć i do czego.
Zatrybiłem, przerobiłem pod C# - umiem odczytać dane i sprawdzić CRC
A teraz jak wysłać SET_MESSAGE_INTERVAL ???
Patrzę na https://pixhawk.ethz.ch/mavlink i MAVLink Messages (od połowy strony) umiem poskładać, ale te pola MAV_CMD nie wiem jak przypiąć i do czego.
Pozdrawiam
Janusz
Ostatnio zamęczam: S800 na Omnibus F4
Janusz
Ostatnio zamęczam: S800 na Omnibus F4
Re: Jak policzyć CRC mavlink 1.0
Pewnie prosciej Ci bedzie zaczac od REQUEST_DATA_STREAM, jest wprawdzie obsolete i masz mniejsza kontrole nad poszczegolnymi komunikatami, ale z tego co widzialem wciaz dziala.JSt pisze:Wielkie dzięki
Zatrybiłem, przerobiłem pod C# - umiem odczytać dane i sprawdzić CRC
A teraz jak wysłać SET_MESSAGE_INTERVAL ???
Patrzę na https://pixhawk.ethz.ch/mavlink i MAVLink Messages (od połowy strony) umiem poskładać, ale te pola MAV_CMD nie wiem jak przypiąć i do czego.
Re: Jak policzyć CRC mavlink 1.0
Tak, jak napisałem message z zakresu 0 do 255 (od połowy wspomnianej strony umiem poskładać i wysłać), ale właśnie ze względu na: THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD chcę się nauczyć składać ramkę z SET_MESSAGE_INTERVAL. Nie chcę instalować linuxa i pytona - nie jestem taki multiinformatyczny A jak kumple zapytają - co robiłeś wieczorkiem ? to jak mam odpowiedzieć, że bawiłem się PYTONEM ???
Pozdrawiam
Janusz
Ostatnio zamęczam: S800 na Omnibus F4
Janusz
Ostatnio zamęczam: S800 na Omnibus F4
Re: Jak policzyć CRC mavlink 1.0
No faktycznie troche to krepujaceJSt pisze:Tak, jak napisałem message z zakresu 0 do 255 (od połowy wspomnianej strony umiem poskładać i wysłać), ale właśnie ze względu na: THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD chcę się nauczyć składać ramkę z SET_MESSAGE_INTERVAL. Nie chcę instalować linuxa i pytona - nie jestem taki multiinformatyczny A jak kumple zapytają - co robiłeś wieczorkiem ? to jak mam odpowiedzieć, że bawiłem się PYTONEM ???
Uzyj COMMAND_LONG i oczekuj COMMAND_ACK
Ostatnio zmieniony środa 20 kwie 2016, 14:40 przez pawelsky, łącznie zmieniany 1 raz.
Re: Jak policzyć CRC mavlink 1.0
Zrób to sam. ...albo z piękną kobietą