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 pole | Rejstřík (bajty) | Účel |
---|---|---|
Začátek snímku | 0 | Označuje začátek přenosu rámce (v1.0: 0xFE) |
Délka užitečného zatížení | 1 | délka užitečného zatížení (n) |
Sekvence paketů | 2 | Každá komponenta počítá svoji posílací sekvenci. Umožňuje detekci ztráty paketů. |
ID systému | 3 | Identifikace systému SENDING. Umožňuje odlišit různé systémy ve stejné síti. |
ID součásti | 4 | Identifikace komponenty ODESÍLÁNÍ. Umožňuje rozlišit různé součásti stejného systému, např. IMU a autopilot. |
ID zprávy | 5 | Identifikace 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 pole | Rejstřík (bajty) | Účel |
---|---|---|
Začátek snímku | 0 | Označuje začátek přenosu rámce (v2: 0xFD) |
Délka užitečného zatížení | 1 | délka užitečného zatížení (n) |
příznaky nekompatibility | 2 | Příznaky, kterým je třeba rozumět kvůli kompatibilitě s MAVLink |
příznaky kompatibility | 3 | Příznaky, které lze ignorovat, pokud nebudou pochopeny |
Sekvence paketů | 4 | Každá komponenta počítá svoji posílací sekvenci. Umožňuje detekci ztráty paketů. |
ID systému | 5 | Identifikace systému SENDING. Umožňuje rozlišit různé systémy ve stejné síti. |
ID součásti | 6 | Identifikace komponenty ODESÍLÁNÍ. Umožňuje rozlišit různé součásti stejného systému, např. IMU a autopilot. |
ID zprávy | 7 až 9 | Identifikace 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
- ^ „Počáteční potvrzení · mavlink / mavlink @ a087528“. GitHub.
- ^ „Archivovaná kopie“. Archivovány od originál dne 18. 8. 2018. Citováno 2013-07-31.CS1 maint: archivovaná kopie jako titul (odkaz)
- ^ „Serializace · Příručka pro vývojáře MAVLink“. mavlink.io. Citováno 2019-08-22.
- ^ http://qgroundcontrol.org/mavlink/crc_extra_calculation
- ^ „GitHub - ArduPilot / pymavlink: python MAVLink interface and utilities“. 18. srpna 2019 - prostřednictvím GitHub.
- ^ „GitHub - arthurbenemann / droidplanner: Ground Control Station for Android Devices“. 2. července 2019 - přes GitHub.
- ^ "Generátor kódu Java a knihovna Java pro MAVLink: ghelle / MAVLinkJava". 4. srpna 2019 - prostřednictvím GitHub.
- ^ „GitHub - dronefleet / mavlink: Java API pro komunikaci MAVLink“. 2. srpna 2019 - prostřednictvím GitHub.
- ^ „GitHub - mavlink / mavlink: Zařazovací / komunikační knihovna pro drony“. 20. srpna 2019 - prostřednictvím GitHub.
- ^ http://qgroundcontrol.org/mavlink/crc_extra_calculation#field_reordering
- ^ 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.