我阅读MAVlink,我尝试从pixhawk飞控制器读取包。 我想到了另一种打电话的方式,我想从这个讨论中知道读者是否可以,你有什么想法
在我的读者身上..我从pixhawk读取了第一个字节。
第二个字节需要是PAYLOAD长度 - >所以我知道我需要读取标题的4个字节+ PAYLOAD长度字节+ 2个chcksub字节。
因此,在读取PAYLOAD长度后,我定义了一个字节数组 - >尺寸是
(PAYLOAD.length + 4 + 2)并从串口读取到此缓冲区。
这样做可以吗?
答案 0 :(得分:2)
MAVLink协议具有HEADER + PAYLOAD + SIGNATURE格式。
MAVLink v1.0
v1.0是QGroundControl指定的标准协议。它的格式为:
第一个字节始终是协议帧起始: 0xFE
第二个字节始终是有效负载长度。
因此,您的接收缓冲区大小应为(PAYLOAD长度)+8。
您描述的方法通常适用于从pixhawk接收的大多数数据包。然而,pixhawk(ArduPilot)利用扩展的MAVLink协议,该协议被创造为“v2.0”,增加了额外的头部和签名字节。
MAVLink v2.0
v2.0是扩展协议,适用于少数几条消息,例如“STATUSTEXT”。它的格式为:
第一个字节具有帧起始: 0xFD
第二个字节又是有效载荷长度。
因此,您的缓冲区大小应为(PAYLOAD长度)+25。
如果要处理pixhawk或生成的.tlog文件中的MAVLink消息数据,则应根据帧的起始和有效负载长度字节(任何MAVLink消息的前两个字节)设置输入消息缓冲区大小。