MAVLink - MAVLink

MAVLink nebo Micro Air Vehicle Link je protokol pro komunikaci s malými bezpilotní vozidlo. Je navržen jako zařazovací knihovna zpráv pouze pro záhlaví. MAVLink byl poprvé vydán počátkem roku 2009[1] podle Lorenza Meiera pod LGPL licence.[2]

Aplikace

Používá se hlavně pro komunikaci mezi a Stanice pozemního řízení (GCS) a Bezpilotní vozidla a při vzájemné komunikaci subsystému vozidla. Lze jej použít k přenosu orientace vozidla, jeho polohy GPS a rychlosti.

Struktura paketů

Ve verzi 1.0 je struktura paketu následující:

Název poleRejstřík (bajty)Účel
Začátek snímku0Označuje začátek přenosu rámce (v1.0: 0xFE)
Délka užitečného zatížení1délka užitečného zatížení (n)
Sekvence paketů2Každá komponenta počítá svoji posílací sekvenci. Umožňuje detekci ztráty paketů.
ID systému3Identifikace systému SENDING. Umožňuje odlišit různé systémy ve stejné síti.
ID součásti4Identifikace komponenty ODESÍLÁNÍ. Umožňuje rozlišit různé součásti stejného systému, např. IMU a autopilot.
ID zprávy5Identifikace zprávy - id definuje, co užitečné zatížení „znamená“ a jak by mělo být správně dekódováno.
Užitečné zatížení6 až (n + 6)Údaje do zprávy závisí na ID zprávy.
CRC(n + 7) až (n + 8)Kontrolní součet celého paketu, s výjimkou znaménka začátku paketu (LSB až MSB)

Po verzi 2 byla struktura paketu rozšířena na následující:[3]

Název poleRejstřík (bajty)Účel
Začátek snímku0Označuje začátek přenosu rámce (v2: 0xFD)
Délka užitečného zatížení1délka užitečného zatížení (n)
příznaky nekompatibility2Příznaky, kterým je třeba rozumět kvůli kompatibilitě s MAVLink
příznaky kompatibility3Příznaky, které lze ignorovat, pokud nebudou pochopeny
Sekvence paketů4Každá komponenta počítá svoji posílací sekvenci. Umožňuje detekci ztráty paketů.
ID systému5Identifikace systému SENDING. Umožňuje rozlišit různé systémy ve stejné síti.
ID součásti6Identifikace komponenty ODESÍLÁNÍ. Umožňuje rozlišit různé součásti stejného systému, např. IMU a autopilot.
ID zprávy7 až 9Identifikace zprávy - id definuje, co užitečné zatížení „znamená“ a jak by mělo být správně dekódováno.
Užitečné zatížení10 až (n + 10)Údaje do zprávy závisí na ID zprávy.
CRC(n + 11) až (n + 12)Kontrolní součet celého paketu, s výjimkou znaménka začátku paketu (LSB až MSB)
Podpis(n + 13) až (n + 25)Podpis k ověření, že zprávy pocházejí z důvěryhodného zdroje. (volitelný)

Pole CRC

Pro zajištění integrity zprávy se pro každou zprávu do posledních dvou bajtů počítá kontrola cyklické redundance (CRC). Další funkcí pole CRC je zajistit, aby se odesílatel i příjemce shodovali ve zprávě, která se přenáší. Vypočítává se pomocí hash ITU X.25 / SAE AS-4 bajtů v paketu, s výjimkou indikátoru Start-of-Frame (takže je vyhodnoceno 6 + n + 1 bajtů, extra +1 je počáteční hodnota) .

Při výpočtu CRC je navíc na konec dat připojena počáteční hodnota. Semeno je generováno s každou novou sadou zpráv protokolu a je hašováno podobným způsobem jako pakety ze specifikací každé zprávy. Systémy využívající protokol MAVLink mohou k tomuto účelu používat předpočítané pole.[4]

Algoritmus CRC MAVLink byl implementován v mnoha jazycích, jako je Python[5] a Java.[6][7][8]

Zprávy

Užitečné zatížení z paketů popsaných výše jsou zprávy MAVLink. Každá zpráva je identifikovatelná podle pole ID na paketu a užitečné zatížení obsahuje data ze zprávy. An XML dokument ve zdroji MAVlink[9] má definici dat uložených v této užitečné zátěži.

Níže je zpráva s ID 24 extrahovaná z dokumentu XML.

 id ="24" jméno =„GPS_RAW_INT“>        <description>Globální pozice vrácená globálním pozičním systémem (GPS). Toto NENÍ globální odhad polohy systému, ale spíše hodnota snímače RAW. Globální odhad pozice najdete ve zprávě GLOBAL_POSITION. Rámec souřadnic je pravák, osa Z nahoře (rám GPS).</description>         zadejte =„uint64_t“ jméno =„time_usec“>Časová značka (mikrosekundy od epochy systému UNIX nebo mikrosekundy od spuštění systému)</field>         zadejte =„uint8_t“ jméno ="fix_type">0-1: žádná oprava, 2: 2D oprava, 3: 3D oprava. Některé aplikace nebudou používat hodnotu tohoto pole, pokud nejsou alespoň dvě, proto opravu vždy vyplňte správně.</field>         zadejte ="int32_t" jméno ="lat">Zeměpisná šířka (WGS84), ve stupních * 1E7</field>         zadejte ="int32_t" jméno ="lon">Zeměpisná délka (WGS84), ve stupních * 1E7</field>         zadejte ="int32_t" jméno ="alt">Nadmořská výška (WGS84), v metrech * 1000 (pozitivní pro vzestup)</field>         zadejte =„uint16_t“ jméno ="eph">GPS HDOP horizontální ředění polohy v cm (m * 100). Pokud není známo, nastavte na: UINT16_MAX</field>         zadejte =„uint16_t“ jméno ="epv">GPS VDOP horizontální ředění polohy v cm (m * 100). Pokud není známo, nastavte na: UINT16_MAX</field>         zadejte =„uint16_t“ jméno ="vel">Pozemní rychlost GPS (m / s * 100). Pokud není známo, nastavte na: UINT16_MAX</field>         zadejte =„uint16_t“ jméno ="ozubené kolo">Kurz nad zemí (NE nadpis, ale směr pohybu) ve stupních * 100, 0,0..359,99 stupňů. Pokud není známo, nastavte na: UINT16_MAX</field>         zadejte =„uint8_t“ jméno =„satellites_visible“>Počet viditelných satelitů. Pokud není známo, nastavte 255</field></message>

Poznámka: Dokument XML popisuje logické řazení polí protokolu. Skutečný formát drátu (a typická reprezentace v paměti) má pořadí polí[10] snížit Zarovnání datové struktury problémy. To může být zdrojem zmatku při čtení kódu generovaného z definic zpráv.

Ekosystém MAVLink

MAVLink se používá jako komunikační protokol v mnoha projektech, což může znamenat, že mezi nimi existuje určitá kompatibilita. Byl napsán zajímavý tutoriál vysvětlující základy MAVLink.[11]

Reference

  1. ^ „Počáteční potvrzení · mavlink / mavlink @ a087528“. GitHub.
  2. ^ „Archivovaná kopie“. Archivovány od originál dne 18. 8. 2018. Citováno 2013-07-31.CS1 maint: archivovaná kopie jako titul (odkaz)
  3. ^ „Serializace · Příručka pro vývojáře MAVLink“. mavlink.io. Citováno 2019-08-22.
  4. ^ http://qgroundcontrol.org/mavlink/crc_extra_calculation
  5. ^ „GitHub - ArduPilot / pymavlink: python MAVLink interface and utilities“. 18. srpna 2019 - prostřednictvím GitHub.
  6. ^ „GitHub - arthurbenemann / droidplanner: Ground Control Station for Android Devices“. 2. července 2019 - přes GitHub.
  7. ^ "Generátor kódu Java a knihovna Java pro MAVLink: ghelle / MAVLinkJava". 4. srpna 2019 - prostřednictvím GitHub.
  8. ^ „GitHub - dronefleet / mavlink: Java API pro komunikaci MAVLink“. 2. srpna 2019 - prostřednictvím GitHub.
  9. ^ „GitHub - mavlink / mavlink: Zařazovací / komunikační knihovna pro drony“. 20. srpna 2019 - prostřednictvím GitHub.
  10. ^ http://qgroundcontrol.org/mavlink/crc_extra_calculation#field_reordering
  11. ^ Autor: Shyam Balasubramanian 15. listopadu 2013 v 14:36 ​​ve skupině uživatelů ArduCopter; Diskuse, Zpět na skupinu uživatelů ArduCopter. „Výukový program MAVLink pro absolutní figuríny (část –I)“. diydrones.com.