您的位置:首页 > 其它

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] (CyclicRedundancy
Check)循环冗余校验码算法计算得出并自动写入包内。

也就是说,设定SYS和COMP并且正确调用MavLink所提供方法后,整个消息包的生成过程中仅有MSG和PAYLOAD两项内容需要用户关心,消息包封装过程如活动图所示。



(三)  消息包示例

本文开始提到MavLink使用消息库的形式定义传输规则,用户可以在在源码中查阅消息库的内容,此处使用Java语言下的消息库作为实例,以便更清晰地展示包结构(MavLink源码自带了多语言的生成器,可从源码中的xml文件转换为对应C,C++,Java等语言的MavLink协议包)。以下表格中,SEQ为计算得出,数值不固定,故用X代替,SYS,COMP两项为笔者使用的Mission
Planner地面站设定的系统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