mavlink协议解析

1. mavlink数据包格式

在这里插入图片描述

字节索引C 版本内容说明
0uint8_t magic数据包启动标记0xFE特定于协议的文本启动 (stx) 标记, 用于指示新数据包的开始。 任何不识别协议版本的系统都将跳过数据包。
1uint8_t len载荷长度0 - 255指示以下 payload 部分的长度 (为特定消息固定)。
2uint8_t seq数据包序列号0 - 255用于检测数据包丢失。 组件为发送的每封消息递增值。
3uint8_t sysid系统 ID0 - 255发送消息的 system (飞机) 的 ID。 用于区分网络上的系统。
4uint8_t compid组件ID0 - 255component 发送消息ID。 用于区分 system 中的组件 (例如自动驾驶仪和相机)。
5uint8_t msgid消息 ID0 - 255有效载荷中的 message type 的 id。 用于将数据解码回消息对象。
6 to n+6uint8_t payload载荷长度0 - 255消息数据。 内容取决于消息类型(即消息ID)
(n+6) to (n+7)uint16_t checksum校验和(低字节, 高字节)校验码由crc16算法得到,算法将整个消息(从起始位开始到有效载荷结束,还要额外加上个MAVLINK_CRC_EXTRA字节)进行crc16计算,得出一个16位的校验码。
  • 最低数据包长度是8字节,用于没有有效载荷确认数据包。
  • 最大的数据包长度是完整有效载荷263字节。

2. 举例分析

序列 FE 09 48 FF BE 00 00 00 00 00 06 08 C0 04 03 9C B6,我们可以逐步解析这个MAVLink数据包:

  1. 起始字节(STX): FE
    这是MAVLink协议的起始标志位,在MAVLink v1中,每个数据包都以0xFE开始。

  2. 长度(Length): 09
    这个字节表示数据包中有效载荷(不包括起始字节、长度、系统ID、组件ID和校验和)的长度。在这个例子中,09意味着有效载荷长度为9字节。

  3. 数据包序列号: 48
    代表这是发送的第73个序列

  4. 系统ID:FF
    即系统id为255,这里接收的是QGC的默认系统id。

  5. 组件ID: BE
    BE在十六进制中对应的十进制数值是190,对应id为190的这个组件。

  6. 消息ID: 00
    对应数字0,代表这是一条心跳广播。具体消息对应id在官网找到。

  7. 有效载荷(Payload): 00 00 00 00 06 08 C0 04 03

    这是消息的数据部分,内容取决于消息ID。

  8. 最后两个字节是校验和,用于验证数据包的完整性。校验和是根据数据包中的特定字节计算得出的。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值