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才会认为你与它建立联系,才会接受与我们通信。
阅读全文
0 0
- STM32控制APM飞控(五)MAVLINK的C源码的解释及MAVLINK心跳包
- STM32控制APM飞控(三)MAVLINK整合并适配stm32串口的收发
- STM32控制APM飞控(二)MAVLINK源码集成到stm32工程中
- STM32控制APM飞控(四)MAVLINK协议深入理解之数据结构
- APM代码中MAVLINK的初步分析。
- MAVLink C# APM 控制输出方法
- 在APM中添加新的mavlink消息
- Mavlink协议理解Pixhawk APM(一)
- Mavlink协议理解Pixhawk APM(二)
- Mavlink协议理解Pixhawk APM(三)
- MAVLink协议的移植
- Mavlink
- APM(PX4)中增加新的mavlink消息,传递信息到misson planner显示
- python环境的搭建(MAVLink协议生成器)
- STM32控制APM飞控(一)研究目的及思路
- mavlink的Java语言之探索实现
- pixhawk添加一个新的MAVLink 消息
- Mavlink地面站编写之五-Mission Planner中ProgressReporterDialogue和读串口线程serialreaderthread的分析
- nginx和 apache比较
- 转载(与部分翻译)!理解LSTM
- 资本资产定价模型简介-多因子寻找Alpha&统计套利
- Data structure of tree
- unity Mathf API
- STM32控制APM飞控(五)MAVLINK的C源码的解释及MAVLINK心跳包
- ASP.NET GridView利用PagerTemplate自定义分页
- 消除游戏
- hadoop:could only be replicated to 0 nodes, instead of 1
- 解决jodconverter无法兼容libreoffice4的解决方案
- Python---查看安装路径
- Redis学习笔记之十一:Redis数据持久化
- MySQL函数
- Unity Shader入门精要 阅读笔记二