MAVLink简介
MAVLink是一种针对微型飞行器,推出的轻量化,仅由头文件信息编码而成的软件通信协议库。
MAVLink遵循一种混合发布和点对点设计模式:主要的信息可以作为主数据流向多个目标目标进行发送,而一些子协议如(mission protocol或者parameter protocol)可以采用点对点通信模式,利用重传机制进行可靠的数据传输。
MAVLink的信息包(各种数据包类型的组合如姿态信息包、GPS信息包)都是定义在XML格式的原始文件中。利用这个XML文件可以生成如下支持语言的MAVLink源代码。针对不同的的应用场合,XML文件也被定义了多种。比如针对绝大多数的地面站系统和自动驾驶系统,这样一些系统所需要的信息包类型就被定义一种取名为“common.xml”文件中。
支持生成的语言
MAVLink2 可以生成如下语言
- C
- C++11
- Python
MAVLink1可以生成如下语言
- C
- C#
- Objective C
- Java
- JavaScript
- Lua
- Swift
- Python
XML文件种类:
- common.xml
- ardupilotmega.xml
- ASLUAV.xml
- autoquad.xml
- icarous.xml
- matrixpilot.xml
- minimal.xml
- paparazzi.xml
- python_array_test.xml
- slugs.xml
- standard.xml
- test.xml
- ualberta.xml
- uAvionix.xml
移植过程:
https://github.com/mavlink/mavlink,
通过git下载:git clone https://github.com/mavlink/mavlink.git --recursive
安装python,安装选型全选择。安装pymavlink
python -m pip install pymavlink
F:/mavlink/message_definitions/v1.0/common.xml
F:/mavlink/C++_code
也可以选择C语言
创建一个keil工程,将生成文件复制到工程中,导入头文件。
编译错误1:
..\..\user\mavlink\ardupilotmega\../mavlink_types.h(53): error: #20: identifier "pack" is undefined
#define MAVPACKED( __Declaration__ ) __pragma( pack(push, 1) ) __Declaration__ __pragma( pack(pop) )
改为#define MAVPACKED( __Declaration__ ) __Declaration__
错误2
..\..\user\mavlink\ardupilotmega\../mavlink_types.h(53): error: #3092: anonymous unions are only supported in --gnu mode, or when enabled with #pragma anon_unions
在最前面加上#pragma anon_unions
编译后
FromELF: creating hex file...
".\Objects\TestProject.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed: 00:00:03