ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MAVLink 协议

MAVLink 协议 MAVLink 协议MAVLink 是消息层协议,不包含物理层与传输层。它只规定「帧格式与消息字典」,所以同一套消息能跑在串口、UDP、CAN、数传等不同承载上;丢包表现为「数据陈旧」而非「连接中断」,指令的可靠性靠 ACK + seq 序号 + 上层重传。适用人群与前置面向:飞控系统 / 地面站 / 通信链路研发与测试工程师、编队表演现场运维、飞手与测试人员。前置:理解串口/UDP 基本概念即可;若需理解全流程,建议先掌握十六进制报文与「状态 vs 动作」的语义区别。一、协议核心MAVLink 工作原理(总览)MAVLink(Micro Air Vehicle Link,微型飞行器链路协议)由 Lorenz Meier 于 2009 年发布,现由 Dronecode 基金会维护;PX4 与 ArduPilot 主流实现分别是mavlinkC 库与pymavlink。四大机制机制说明帧封装定长头 + 变长载荷 + 校验尾消息字典用 XML 定义、强 Schema(强类型模式)链路无关同一套消息可跑在串口/UDP/CAN/数传上异步无连接广播模型发方只发不等回,收方订阅即收强 Schema 的后果:字段顺序不一致就无法解析,收发双方必须用同一版消息字典——字典版本升级必须两端同步,否则解析错乱。(Schema 是数据库中用于定义和组织数据结构的集合,可以看作是数据库的蓝图。它描述了数据库中表、视图、索引、存储过程等对象的结构及其关系,并为数据的存储、查询和管理提供逻辑框架。)无连接广播的渗透性后果:因为丢包不会被「断开」,排障时最容易误判。丢包表现为数据陈旧(收到的仍是最后一次成功的旧值),而非「连接中断」。这是排障时第一个要建立的认知。可靠性全靠上层:CRC-16/MCRF4XX校验保证帧级完整性;seq序号用于检丢包(丢失可发现);COMMAND_ACK确认指令送达,重传策略由发送方自行决定(MAVLink 本身不重传)。MAVLink 帧结构详解(v1 与 v2 对比)帧头开销与版本标识项目v1v2起始符 STX0xFE0xFD最小帧头8 字节12 字节带签名帧—25 字节最大载荷255 字节255 字节版本靠起始符区分,字节序为小端;数值用 IEEE 754 单精度浮点;字符串定长补零。载荷字段按长度降序重排 + 末尾零字节截断,两者配合是 v2 省带宽的主因。CRC 与版本的纠缠:CRC 种子把「消息长度与 MSGID」纳入计算,因此 v1/v2 的 CRC 不同、理论上不能混跑;实际靠双方自动降级兼容(握手时检测,一方支持 v2 另一方不支持则回退 v1)。实战警示:解析工具必须先按 STX 同步字节对齐;遇到非法帧要跳过 1 字节重新搜索,而不是丢弃整段缓冲区——中间某个坏字节后紧跟的合法帧仍可继续解析。MAVLink 三类信息:消息 / 指令 / 任务MAVLink 承载三类语义,排障前先分清自己在处理哪一类:消息(遥测):单向、高频 1–50 Hz、不期待回复、丢包不重传,是链路中占比最大的流量。指令:走COMMAND_LONG(76)/COMMAND_INT(75),飞控必须回COMMAND_ACK(77);分「立即执行型」与「入队执行型」(DO_*系列多支持 queued 入队)。任务:走MISSION_COUNT → MISSION_REQUEST_INT → MISSION_ITEM_INT → MISSION_ACK多轮握手,最后用MAV_CMD_MISSION_START启动。两条易被忽略的支线:参数通道(PARAM_REQUEST_LIST/R
返回列表