如何阅读mavlink包..在我的路上可以做到吗?

时间:2016-10-25 05:36:14

标签: mavlink

我阅读MAVlink,我尝试从pixhawk飞控制器读取包。 我想到了另一种打电话的方式,我想从这个讨论中知道读者是否可以,你有什么想法

在我的读者身上..我从pixhawk读取了第一个字节。

第二个字节需要是PAYLOAD长度 - >所以我知道我需要读取标题的4个字节+ PAYLOAD长度字节+ 2个chcksub字节。

因此,在读取PAYLOAD长度后,我定义了一个字节数组 - >尺寸是
(PAYLOAD.length + 4 + 2)并从串口读取到此缓冲区。 这样做可以吗?

1 个答案:

答案 0 :(得分:2)

MAVLink协议具有HEADER + PAYLOAD + SIGNATURE格式。

MAVLink v1.0

v1.0是QGroundControl指定的标准协议。它的格式为:

  • 6字节标题
  • (PAYLOAD长度)字节有效负载
  • 2字节签名(校验和)

第一个字节始终是协议帧起始: 0xFE

第二个字节始终是有效负载长度。

因此,您的接收缓冲区大小应为(PAYLOAD长度)+8。

您描述的方法通常适用于从pixhawk接收的大多数数据包。然而,pixhawk(ArduPilot)利用扩展的MAVLink协议,该协议被创造为“v2.0”,增加了额外的头部和签名字节。

MAVLink v2.0

v2.0是扩展协议,适用于少数几条消息,例如“STATUSTEXT”。它的格式为:

  • 10字节标题
  • (PAYLOAD长度)字节有效负载
  • 15字节签名

第一个字节具有帧起始: 0xFD

第二个字节又是有效载荷长度。

因此,您的缓冲区大小应为(PAYLOAD长度)+25。

如果要处理pixhawk或生成的.tlog文件中的MAVLink消息数据,则应根据帧的起始和有效负载长度字节(任何MAVLink消息的前两个字节)设置输入消息缓冲区大小。