赞
踩
MAVLink是一种串行协议,最常用于在车辆和地面站之间发送数据和命令
该协议定义了大量消息,可以在common.xml和ardupilot.xml中找到
MAVLink 消息几乎可以通过任何串行连接发送,并且不依赖于底层技术(wifi、900mhz 无线电等)
不保证消息能够传递,这意味着地面站或配套计算机必须经常检查车辆的状态以确定命令是否已被执行
字节索引 | C版 | 内容 | 价值 | 解释 |
---|---|---|---|---|
0 | uint8_t magic | 数据包开始标记 | 0xFE | 协议特定的文本开始 (STX) 标记,用于指示新数据包的开始。任何不理解协议版本的系统都会跳过该数据包。 |
1 | uint8_t len | 有效载荷长度 | 0 - 255 | 指示以下payload 部分的长度(针对特定消息固定)。 |
2 | uint8_t seq | 数据包序列号 | 0 - 255 | 用于检测数据包丢失。组件为每条发送的消息递增值。 |
3 | uint8_t sysid | 系统ID | 1 - 255 | 发送消息的系统(车辆) ID 。用于区分网络上的系统。请注意,广播地址 0 不能在此字段中使用,因为它是无效的源地址。 |
4 | uint8_t compid | 组件ID | 1 - 255 | 发送消息的组件ID 。用于区分系统中的组件(例如自动驾驶仪和摄像头)。在MAV_COMPONENT中使用适当的值。MAV_COMP_ID_ALL 请注意,该字段中不能使用广播地址,因为它是无效的源地址。 |
5 | uint8_t msgid | 消息ID | 0 - 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字节。 |
字节索引 | C版 | 内容 | 价值 | 解释 |
---|---|---|---|---|
0 | uint8_t magic | 数据包开始标记 | 0xFD | 协议特定的文本开始 (STX) 标记,用于指示新数据包的开始。任何不理解协议版本的系统都会跳过该数据包。 |
1 | uint8_t len | 有效载荷长度 | 0 - 255 | 指示以下payload 部分的长度。这可能会受到有效负载截断的影响。 |
2 | uint8_t incompat_flags | 不兼容标志 | 必须理解 MAVLink 兼容性的标志(如果不理解标志,实现将丢弃数据包)。 | |
3 | uint8_t compat_flags | 兼容性标志 | 如果不理解则可以忽略的标志(即使不理解标志,实现仍然可以处理数据包)。 | |
4 | uint8_t seq | 数据包序列号 | 0 - 255 | 用于检测数据包丢失。组件为每条发送的消息递增值。 |
5 | uint8_t sysid | 系统 ID(发送者) | 1 - 255 | 发送消息的系统(车辆) ID 。用于区分网络上的系统。请注意,广播地址 0 不能在此字段中使用,因为它是无效的源地址。 |
6 | uint8_t compid | 组件 ID(发送者) | 1 - 255 | 发送消息的组件ID 。用于区分系统中的组件(例如自动驾驶仪和摄像头)。在MAV_COMPONENT中使用适当的值。请注意,该字段中不能使用广播地址,因为它是无效的源地址。MAV_COMP_ID_ALL |
7 至 9 | uint32_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] | 签名 | (可选)签名以确保链接防篡改。 |
消息不超过263字节(Mavlink版本1.0)或280字节(Mavlink版本2.0)。
发送方总是填写和字段,以便接收方知道数据包来自哪里。这是每辆车或地面站的唯一 ID。地面站通常使用较高的系统 ID,如“255”,车辆默认使用“1”(可以通过设置SYSID_THISMAV参数来更改)。地面站或飞行控制器的通常为“1” 。车辆上其他支持 MAVLink 的设备(即配套计算机、万向节)应使用与飞行控制器相同的设备,但使用不同的设备System ID
Component ID
System ID
Component ID
System ID
Component ID
该字段可以在消息名称旁边的common.xml和ardupilot.xml中看到。例如HEARTBEAT消息 ID 为“0”Message ID
Data
消息部分保存正在发送的各个字段值
请参阅此页面以获取有关如何添加对新 MAVLink 消息的支持的建议
一旦连接打开,每个设备(又名“系统”)就会以 1hz发送HEARTBEAT消息
地面站或配套计算机通过发送以下类型的消息来请求所需的数据(和速率)
REQUEST_DATA_STREAM支持设置消息组的速率
COMMAND_LONG包含SET_MESSAGE_INTERVAL命令,可精确控制发送的消息(及其速率),但仅在 ArduPilot 4.0 及更高版本上受支持
MAVLink2 消息的最大长度为 280 字节,因为它们实现了兼容性标志并支持签名。
MAVLink2 通过允许将新字段添加到现有 MAVLink1 消息中来扩展 MAVLink1,支持超过“255”的新消息并添加对签名消息的支持Message ID
MAVLink2 向后兼容 MAVLink1,这意味着如果设备能够理解 MAVlink2 消息,那么它肯定能够理解 MAVLink1 消息
如果仅能够理解 MAVLink1 的设备收到包含附加字段(在 MAVLink2 下添加)的消息,则该设备将仅看到原始字段。即设备将能够读取消息,但不会“看到”附加字段
SERIALx_PROTOCOL
通过将参数设置为“2”(其中“x”是飞行控制器上的串行端口号),可以将飞行控制器的串行端口(大概连接到遥测无线电)设置为使用 MAVLink2
有关更多信息(尤其是消息扩展),请参阅Mavlink2 文档
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。