MAVLink协议通信分析——(二)消息结构
2016-09-01 18:36
295 查看
消息结构
(一) 消息包结构
消息包结构定义了消息包在发送、接收、初次解析中所需信息的存储规则。在MavLink 1.0版本中,消息包结构如下图表所示。首部由STX段引导,具体含义可在表中查询,其中校验位标记为自动,表示应由软件根据包数据自动计算生成。
(长度单位为byte)
区域 | 名称 | 索引 | 长度 | 含义 | 取值 |
STX | 起始标识 | 0 | 1 | 标识新消息的开始,用于消息识别、解析 | 254 |
LEN | 负载长度 | 1 | 1 | 记录负载信息的长度 | N |
SEQ | 序列码 | 2 | 1 | 消息发送序列码,用于通信可靠性检验 | 0-255 |
SYS | 系统ID | 3 | 1 | 发送该消息系统的系统ID | 0-255 |
COMP | 组件ID | 4 | 1 | 发送该消息系统组件的组件ID | 0-255 |
MSG | 消息ID | 5 | 1 | 标识该消息的种类 | 0-255 |
PAYLOAD | 负载信息 | 6 | 1 | 消息内部负载信息 | |
CKA | 校验位A | N+6 | N | CRC校验位 | 自动 |
CKB | 校验位B | N+7 | 1 | CRC校验位 | 自动 |
(二) 消息包封装过程
以上各区域信息存在关联,当使用MavLink协议提供的方法封装消息包时,会根据所使用的MSG获取到该类别MSG消息的LEN信息,同时软件(地面站或飞行控制软件)会根据自身状态信息填写SYS、COMP。信息填写完毕生成数据包时,封装方法会自动添加STX,并在上一次发送消息包所使用的SEQ上加1作为本次发送的SEQ写入,当SEQ超过255时,会回到0并重新开始计数。CKA、CKB会在PAYLOAD信息写入后、封装完成之前,根据CRC[Fe1] (CyclicRedundancyCheck)循环冗余校验码算法计算得出并自动写入包内。
也就是说,设定SYS和COMP并且正确调用MavLink所提供方法后,整个消息包的生成过程中仅有MSG和PAYLOAD两项内容需要用户关心,消息包封装过程如活动图所示。
(三) 消息包示例
本文开始提到MavLink使用消息库的形式定义传输规则,用户可以在在源码中查阅消息库的内容,此处使用Java语言下的消息库作为实例,以便更清晰地展示包结构(MavLink源码自带了多语言的生成器,可从源码中的xml文件转换为对应C,C++,Java等语言的MavLink协议包)。以下表格中,SEQ为计算得出,数值不固定,故用X代替,SYS,COMP两项为笔者使用的MissionPlanner地面站设定的系统ID和组件ID,MSG项0代表HEARTBEAT消息的ID,PAYLOAD内存储详细信息,下一章节再介绍,最后的CKA CKB为封包后计算得出,以Y代替。
msg_heartbeat:最基本的心跳信号包,周期性发送,用于确认地面站与无人机之间的连接是否有效。
STX | LEN | SEQ | SYS | COMP | MSG | PAYLOAD | CKA B |
254 | 9 | X | 255 | 190 | 0 | …… | Y |
msg_request_data_stream:数据流请求包,地面站使用该消息包向飞行控制软件提交数据流申请,飞行控制软件收到该消息后将按照设定的参数周期性返回消息包。
STX | LEN | SEQ | SYS | COMP | MSG | PAYLOAD | CKA B |
254 | 6 | X | 255 | 190 | 66 | …… | Y |
相关文章推荐
- MAVLink协议通信分析——(二)消息结构
- MAVLink协议通信分析——(三)消息解析
- MAVLink协议通信分析——(三)消息解析
- MAVLink协议通信分析——(一)概述
- IEC 61850通信协议体系介绍和分析
- 架构设计:系统间通信(20)——MQ:消息协议(下)
- HTTP协议2-HTTP消息结构
- 各种远程通信协议分析、比较
- 赵雅智_java网络编程(1)网络体系结构及通信协议
- SCTP协议的各种消息结构
- Heartbeat的可靠消息通信实现分析
- 证书的应用之一 —— TCP&SSL通信实例及协议分析(下)
- 手机网络抓包步骤,用于分析通信协议、流量
- 微信通信协议,用自己的程序收发微信,微信网页web版分析
- 铁路列车之间的通信协议(MVB协议)分析软件C/C++实现(五)确定每帧发生的时间
- 架构设计:系统间通信(19)——MQ:消息协议(上)
- HART协议数据格式和消息结构的举例分析
- 各种远程通信协议分析、比较
- linux 环境下的进程间的通信——消息队列传输结构体
- 通信消息协议组件Darks Codec正式发布