MAVLink 基础知识

MAVLink是一种串行协议,最常用于在车辆和地面站之间发送数据和命令

  • 该协议定义了大量消息,可以在common.xmlardupilot.xml中找到

  • MAVLink 消息几乎可以通过任何串行连接发送,并且不依赖于底层技术(wifi、900mhz 无线电等)

  • 不保证消息能够传递,这意味着地面站或配套计算机必须经常检查车辆的状态以确定命令是否已被执行

消息格式

字节索引C版内容价值解释
0uint8_t magic数据包开始标记0xFE协议特定的文本开始 (STX) 标记,用于指示新数据包的开始。任何不理解协议版本的系统都会跳过该数据包。
1uint8_t len有效载荷长度0 - 255指示以下payload部分的长度(针对特定消息固定)。
2uint8_t seq数据包序列号0 - 255用于检测数据包丢失。组件为每条发送的消息递增值。
3uint8_t sysid系统ID1 - 255发送消息的系统(车辆) ID 。用于区分网络上的系统。请注意,广播地址 0 不能在此字段中使用,因为它是无效的地址。
4uint8_t compid组件ID1 - 255发送消息的组件ID 。用于区分系统中的组件(例如自动驾驶仪和摄像头)。在MAV_COMPONENT中使用适当的值。MAV_COMP_ID_ALL请注意,该字段中不能使用广播地址,因为它是无效的地址。
5uint8_t msgid消息ID0 - 255负载中消息类型的 ID 。用于将数据解码回消息对象。
对于n字节有效负载:
n=0: NA、n=1: 6、n>=2: 6 至 (5+n)
uint8_t payload[max 255]有效载荷数据消息数据。内容取决于消息类型(即消息 ID)。
(n+6) 至 (n+7)uint16_t checksum校验和(低字节、高字节)消息的 CRC-16/MCRF4XX(不包括magic字节)。包括CRC_EXTRA字节。
  • 对于无负载的确认数据包,最小数据包长度为 8 个字节。
  • 完整负载的最大数据包长度为 263 字节。

字节索引C版内容价值解释
0uint8_t magic数据包开始标记0xFD协议特定的文本开始 (STX) 标记,用于指示新数据包的开始。任何不理解协议版本的系统都会跳过该数据包。
1uint8_t len有效载荷长度0 - 255指示以下payload部分的长度。这可能会受到有效负载截断的影响。
2uint8_t incompat_flags不兼容标志必须理解 MAVLink 兼容性的标志(如果不理解标志,实现将丢弃数据包)。
3uint8_t compat_flags兼容性标志如果不理解则可以忽略的标志(即使不理解标志,实现仍然可以处理数据包)。
4uint8_t seq数据包序列号0 - 255用于检测数据包丢失。组件为每条发送的消息递增值。
5uint8_t sysid系统 ID(发送者)1 - 255发送消息的系统(车辆) ID 。用于区分网络上的系统。请注意,广播地址 0 不能在此字段中使用,因为它是无效的地址。
6uint8_t compid组件 ID(发送者)1 - 255发送消息的组件ID 。用于区分系统中的组件(例如自动驾驶仪和摄像头)。在MAV_COMPONENT中使用适当的值。请注意,该字段中不能使用广播地址,因为它是无效的地址。MAV_COMP_ID_ALL
7 至 9uint32_t msgid:24消息ID(低、中、高字节)0 - 16777215负载中消息类型的 ID 。用于将数据解码回消息对象。
对于n字节有效负载:
n=0: NA、n=1: 10、n>=2: 10 至 (9+n)
uint8_t payload[max 255]有效载荷消息数据。取决于消息类型(即消息 ID)和内容。
(n+10) 至 (n+11)uint16_t checksum校验和(低字节、高字节)消息的 CRC-16/MCRF4XX(不包括magic字节)。包括CRC_EXTRA字节。
(n+12) 至 (n+25)uint8_t signature[13]签名(可选)签名以确保链接防篡改。
  • 对于无负载的确认数据包,最小数据包长度为 12 个字节。
  • 对于使用整个有效负载的签名消息,最大数据包长度为 280 字节。

  • 消息不超过263字节(Mavlink版本1.0)或280字节(Mavlink版本2.0)。

  • 发送方总是填写和字段,以便接收方知道数据包来自哪里。这是每辆车或地面站的唯一 ID。地面站通常使用较高的系统 ID,如“255”,车辆默认使用“1”(可以通过设置SYSID_THISMAV参数来更改)。地面站或飞行控制器的通常为“1” 。车辆上其他支持 MAVLink 的设备(即配套计算机、万向节)应使用与飞行控制器相同的设备,但使用不同的设备System IDComponent IDSystem IDComponent IDSystem IDComponent ID

  • 该字段可以在消息名称旁边的common.xmlardupilot.xml中看到。例如HEARTBEAT消息 ID 为“0”Message ID

  • Data消息部分保存正在发送的各个字段值

  • 请参阅此页面以获取有关如何添加对新 MAVLink 消息的支持的建议

高级消息流

MAVLink1 与 MAVLink2

  • MAVLink2 消息的最大长度为 280 字节,因为它们实现了兼容性标志并支持签名。

  • MAVLink2 通过允许将新字段添加到现有 MAVLink1 消息中来扩展 MAVLink1,支持超过“255”的新消息并添加对签名消息的支持Message ID

  • MAVLink2 向后兼容 MAVLink1,这意味着如果设备能够理解 MAVlink2 消息,那么它肯定能够理解 MAVLink1 消息

  • 如果仅能够理解 MAVLink1 的设备收到包含附加字段(在 MAVLink2 下添加)的消息,则该设备将仅看到原始字段。即设备将能够读取消息,但不会“看到”附加字段

  • SERIALx_PROTOCOL通过将参数设置为“2”(其中“x”是飞行控制器上的串行端口号),可以将飞行控制器的串行端口(大概连接到遥测无线电)设置为使用 MAVLink2

  • 有关更多信息(尤其是消息扩展),请参阅Mavlink2 文档

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪_彩虹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值