STM32控制APM飞控(五)MAVLINK的C源码的解释及MAVLINK心跳包

来源:互联网 发布:VB中以下描述错误的是 编辑:程序博客网 时间:2024/04/26 08:55

MAVLINK的C源码的解释及MAVLINK心跳包

一.MAVLINK转化成C源码后的文件及文件夹解释

用pathon2.7将从github官网下载下来的MAVLINK源码转换成c语言源码的文件夹如图:

解释:
a:ardupilotmega文件夹(APM):文件夹里都是APM飞控板自己定义的mavlink消息类型,原始的mavlink消息放在commom文件夹里面(大部分消息在common文件夹中).
b:checksum.h文件:存放的是计算的校验码的代码
c:malink_helpers.h文件:将各个消息包补充完整(调用checksum.h中的函数计算校验码并补上消息帧的头),比如:sysid和compid等,成为mavlink消息帧再发送
d:mavlink_conversions.h:里面是dcm,欧拉角,四元数三种姿态表示方法之间的转换代码.
e:mavlink_types.h文件:里面放的是各个枚举类型,主要是发送参数时使用的数据格式,参数应该被复制到本机类型(无类型转换).
f:protocol.h文件:里面是一些宏定义和字符处理的函数

二.MAVLINK的心跳包详解

样例数据:
FE 09 36 01 01 00 00 00 00 00 0D 03 51 03 03 F4 11
FE 09 3D 01 01 00 00 00 00 00 0D 03 51 03 03 A9 7D
FE 09 AE 01 01 00 02 00 00 00 0D 03 51 03 03 D0 F6
上述是3帧心跳包数据,解释如下:
第一个数FE:mavlink数据包的起始位(mavlink1.0是以FE开头)
第二个数09:表明数据包的有效载荷长度为9个即00 00 00 00 0D 03 51 03 03
第三个数36/3D/AE:发送该心跳包是从开机开始算的第几个数据包,中间可能掺杂了其他的数据包
第四个数01:sysid(system ID)发送系统的ID
第五个数01:compid(componene ID)发送单元ID
第六个数00:代表本消息的有效载荷的编号,即心跳包的编号是#0,如下是官网的截图

第七个数(uint32_t即4个16进制数)00 00 00 00:即custom_mode(用户模式),即用于自动驾驶仪的特别的一个标志位的模式设置,APM中包括17模式,在使用APM飞控时,根据自己的目的要在使用前,先给APM发送改变模式的数据包,将APM变化模式,一般custom_mode和base_mode是一起的。00 00 00 00表示0是STABILIZE(自稳模式)
第八个数0D:即type(类型),0D表示MAV_TYPE_HEXAROTOR(六轴)
第九个数03:即autopilot(微型飞行器即飞控板类型),03表示MAV_AUTOPILOT_ARDUPILOTMEGA(ArduPilotMega / ArduCopter即APM飞控)
第十个数51:即base_mode(基本模式),如下图


源码里面base_mode都是用‘|’即或运算,所有51=32+16+2+1,即base_mode=MAV_MODE_FLAG_HIL_ENABLED | MAV_MODE_FLAG_STABILIZE_ENABLED | MAV_MODE_FLAG_TEST_ENABLED | MAV_MODE_FLAG_CUSTOM_MODE_ENABLED
第十一个数03:即system_status(系统状态标志)如下图,03表示系统已接地并处于待机状态。任何时间都可以发射。

第十二个数03:即mavlink_version(mavlink版,不可写的用户,获取补充协议因为神奇的数据类型),默认就是3,这是开发者写好的。

第十三和十四个数F4 11:这是校验位,调用系统函数后,会加到消息包的最后。

消息包是整个mavlink中最典型的数据包,也是必不可少的,因为要与APM连接,必须要有心跳,这样APM才会认为你与它建立联系,才会接受与我们通信。
原创粉丝点击