MAVLink 개발자 안내서
MAVLink는 매우 가벼운 드론(과 드론 구성 부품간 온보드) 통신용 메시지 프로토콜입니다.
MAVLink는 임의송신-가입 방식 및 점대점 방식을 혼용한 최신 설계 규칙을 따릅니다. 데이터 스트림은 토픽으로 전송하는 방식이며, 미션 프로토콜 또는 매개변수 프로토콜과 같은 설정 하위 프로토콜은 재전송 기능을 지닌 점대점 방식입니다.
Messages are defined within XML files. 각 XML 파일은 각 MAVLink 시스템에서 "고유 메시지"를 참조하는 식으로 지원하는 메시지 집합을 정의합니다. 대부분의 지상 관제 머신과 오토파일럿에서 구현한 참조 메시지 집합은 common.xml에 정의했습니다(대부분의 고유 메시지는 이 정의를 기반으로 구성 합니다).
Code generators create software libraries for specific programming languages from these XML message definitions, which can then be used by drones, ground control stations, and other MAVLink systems to communicate. The generated libraries are typically MIT-licensed, and can therefore be used without limits in any closed-source application without publishing the source code of the closed-source application.
The C reference implementation is a header-only library that is highly optimized for resource-constrained systems with limited RAM and flash memory. It is field-proven and deployed in many products where it serves as interoperability interface between components of different manufacturers. :::
MAVLink는 2009년 초반 Lorenz Meier가 처음으로 출시했으며, 현재는 두드러지는 규모의 기여자가 있습니다.
주요 기능
- 매우 효율적입니다. MAVLink 1은 시작 부호와 패킷 손실 탐지 부분을 포함하여 패킷당 8바이트의 크기를 가집니다. MAVLink 2는 14바이트의 크기를 가집니다(만, 더 안전하고 기능 확장에 용이합니다). MAVLink는 추가 프레이밍이 필요가 없기 때문에 통신 대역폭을 상당히 제한하는 여건에서도 프로그램에 매우 안성맞춤입니다.
- 상당히 견고합니다. MAVLink는 여건이 혹독한 다양한 통신 채널(높은 지연율/잡음) 환경에서 다양한 기체, 지상 관제국(및 타 노드)간의 통신 수행 목적으로 2009년부터 사용했습니다. 패킷 손실, 손상, 인증 수단을 제공합니다.
- Many different programming languages can be used, running on numerous microcontrollers/operating systems (including ARM7, ATMega, dsPic, STM32 and Windows, Linux, MacOS, Android and iOS).
- 네트워크에서 최대 255대의 시스템(기체, 지상 관제국)을 동시에 운용할 수 있습니다.
- 보드 내외간 통신이 가능합니다(GCS와 드론간의 통신, 드론 오토파일럿과 MAVLink 통신 기능을 갖춘 드론 카메라와의 통신).
Language/Generator List
The sections below lists MAVLink generators and their associated programming languages.
MAVLink Project Generators/Languages
The MAVLink organisation provides (and supports) the mavgen, mavgenerate and rust-mavlink tools.
언어 | 제너레이터 | MAVLink v1 | MAVLink 2 | Signing | 참고 |
---|---|---|---|---|---|
C | mavgen | ✓ | ✓ | ✓ | MAVLink 프로젝트 참고 구현입니다. 생성 라이브러리는 프로토콜 버전 별로 출시합니다. |
C++11 | mavgen | ✓ | ✓ | ✓ | |
파이썬 (2.7+, 3.3+) | mavgen | ✓ | ✓ | ✓ | Python bindings. Library also available on PyPi: pymavlink. |
C# | mavgen | ✓ | ✓ | ||
Objective C | mavgen | ✓ | |||
Java | mavgen | ✓ | ✓ | Dronefleet offers a more idiomatic generated library | |
JavaScript (Stable) | mavgen | ✓ | ✓ | ✗ | Old mavgen JavaScript binding (has known bugs and no test suite). |
JavaScript (NextGen) | mavgen | ✓ | ✓ | ✓ | New mavgen JavaScript library. Full test suite, resulting library produces binary compatible output compared to C bindings. Slightly incompatible with previous version, but not hard to migrate. |
TypeScript/JavaScript | mavgen | ✓ | ✓ | ✗ | TypeScript classes which can be used with node-mavlink. |
Lua | mavgen | ✓ | ✓ | ✗ | Lua library. Does not support zero trimming of MAVLink 2 messages. |
WLua (Wireshark Lua bindings) | mavgen | ✓ | ✓ | NA | Allow MAVLink-aware packet inspection in Wireshark. Generated lua scripts should be copied to the Wireshark plugin directory (e.g. wireshark/plugins/mavlink.lua). |
Swift | mavgen | ✓ | |||
Rust | rust-mavlink | ✓ | ✓ | Rust MAVLink generated code. Has tests and docs. | |
Ada | mavgen | ✓ |
External Generators/Languages
The following generators are delivered by independent projects (and supported by those projects).
언어 | 제너레이터 | MAVLink v1 | MAVLink 2 | Signing | 참고 |
---|---|---|---|---|---|
C | fastMavlink | ✓ | ✓ | ✗ | Highly efficient C library with python code generators. Has docs, examples, test, support for routing and mavgen mimicry. |
Clojure | clj-mavlink | ✓ | ✓ | ✓ | Clojure MAVLink Bindings. |
Dart | dart_mavlink | ✓ | ✓ | ✗ | MAVLink library for Dart. |
Go | gomavlib | ✓ | ✓ | ✓ | Go library with support for MAVLink 1, 2 and signing, test suite, and documentation |
Go | go-mavlink1 | ✓ | ✗ | ✗ | Golang MAVLink v1 |
Haskell | HaskMavlink | ✗ | ✓ | ✗ | |
Java | dronefleet/mavlink | ✓ | ✓ | ✓ | Idiomatic Java SDK/API for MAVLink. Provides a gradle plugin for the code generator. |
TypeScript/JavaScript/npm | node-mavlink | ✓ | ✓ | ✓ | TypeScript code generator for data classes with tools to receive and send messages. Getting started guide and inline JSDoc, along with some examples. |
Kotlin | mavlink-kotlin | ✓ | ✓ | ✓ | Uses codegen instead of reflection for performance with Coroutines, RxJava2 and RxJava3 support. Provides a code generator Gradle plugin. |
미리 빌드한 MAVLink C 라이브러리
C MAVLink Source Files (only) are auto-generated for the latest versions of all message specifications/dialects (for both MAVLink 1 and 2):
- c_library_v2 (MAVLink 2)
- c_library_v1 (MAVLink 1)
Using C Libraries explains how to use these libraries.
지원
The Support topic contains information about the mailing list, reporting bugs/issues, and joining the dev call.
기여
The Contributing Guide explains the contribution model and the main areas where you can help.
라이선스
The message definition XML files and the generated C-language version of MAVLink (a header-only library) are made available under the MIT-licence. MAVLink can therefore be used in any closed-source application without publishing the source code of the closed-source application. See the COPYING file for more information.
The MAVLink generator toolchain is licensed under the terms of the Lesser General Public License (version 3) of the Free Software Foundation (LGPLv3).
This documentation is licensed under CC BY 4.0 (Human readable overview | LICENSE).
운영
The MAVLink protocol is hosted under the governance of the Dronecode Project.