赞
踩
消息包结构定义了消息包在发送、接收、初次解析中所需信息的存储规则。
在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 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。