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

how to read mavlink package .. is it ok to do it on my way?

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

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

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

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

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

MAVLink v1.0

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

  • 6 字节 header
  • (有效载荷长度)字节有效载荷
  • 2 字节签名(校验和)

第一个字节总是协议start-of-frame:0xFE

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

因此您的接收缓冲区大小应为(有效负载长度)+ 8。

您描述的方法通常适用于从 pixhawk 接收的大多数数据包。但是,pixhawk (ArduPilot) 使用扩展的 MAVLink 协议,该协议已被创造 "v2.0",它添加了额外的 header 和签名字节。

MAVLink v2.0

v2.0 是适用于 select 少数消息(例如 "STATUSTEXT")的扩展协议。它的格式为:

  • 10 字节 header
  • (有效载荷长度)字节有效载荷
  • 15 字节签名

第一个字节有start-of-frame:0xFD

第二个字节也是负载长度。

因此,您的缓冲区大小应为(有效负载长度)+ 25。

如果你想处理来自 pixhawk 或生成的 .tlog 文件的 MAVLink 消息数据,你应该根据帧的开始和有效负载长度字节设置你的输入消息缓冲区大小,任何 MAVLink 的前两个字节留言。