0

我阅读了有关 MAVlink 的信息,并尝试从 pixhawk fly 控制器中读取软件包。我想到了另一种打电话的方式,我想从这个讨论中了解读者是否可以,你怎么看

在我的阅读器上.. 我从 pixhawk 读取了两个第一个字节。

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

因此,在读取 PAYLOAD 长度后,我定义了一个字节数组 -> 大小为
( PAYLOAD.length + 4 + 2 )并从串行读取到此缓冲区。可以吗?

4

1 回答 1

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 消息的前两个字节)设置输入消息缓冲区大小。

于 2016-12-06T00:35:29.050 回答