1 引言
本博客是为了记录自己处在无人机行业中,所涉及的技术成长路线。既是记录自己的成长轨迹,亦是总结所学,便于后续持续学习。
本blog记录了在无人机通信领域的mavlink学习知识点,及所遇到的问题,可能存在理解浅薄,请多包涵。
2 mavlink协议
Mavlink 是无人机、机器人系统中常见的上层软件通信协议(非物理层通信协议),采用消息包广播 的方式在总线上传输,支持点对点和广播通信 。每个消息包含目标系统/组件 ID,接收方根据 ID 决定是否处理,与发布-订阅模型类似。
截止目前为止,mavlink协议共有连个版本,分别是mavlink v1.0和mavlink 2.0,其协议帧如下所述。
mavlink v1.0数据帧结构
bash
┌─────────────────────────────────────────────────────────────┐
│ MAVLink v1.0 消息帧
├──────┬──────┬──────┬──────┬──────┬──────┬──────────┬────────┤
│ STX │ LEN │ SEQ │SYSID │COMPID│MSGID │ Payload │Checksum│
│ 0xFE │ 1 │ 1 │ 1 │ 1 │ 1 │ 0-255 │ 2 │
│ (1B) │ (1B) │ (1B) │ (1B) │ (1B) │ (1B) │ (变长) │ (2B) │
└──────┴──────┴──────┴──────┴──────┴──────┴──────────┴────────┘
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
│ │ │ │ │ │ │ └─ CRC-16校验和
│ │ │ │ │ │ └─ 消息数据载荷
│ │ │ │ │ └─ 消息ID (8位)
│ │ │ │ └─ 组件ID
│ │ │ └─ 系统ID
│ │ └─ 序列号
│ └─ 载荷长度
└─ 起始标志
最小帧长: 8字节 (无载荷)
最大帧长: 263字节 (含最大载荷255字节)
mavlink v2.0数据帧结构
bash
┌───────────────────────────────────────────────────────────────────────────────────────┐
│ MAVLink v2.0 消息帧 │
├──────┬──────┬──────────┬──────────┬──────┬──────┬──────┬──────────┬────────┬──────────┐
│ STX │ LEN │INC_FLAGS │CMP_FLAGS │ SEQ │SYSID │COMPID│ MSGID │ Payload│Checksum │
│ 0xFD │ 1 │ 1 │ 1 │ 1 │ 1 │ 1 │ 3 │ 0-255 │ 2 │
│ (1B) │ (1B) │ (1B) │ (1B) │ (1B) │ (1B) │ (1B) │ (3B) │ (变长) │ (2B) │
└──────┴──────┴──────────┴──────────┴──────┴──────┴──────┴──────────┴────────┴──────────┘
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ └─ CRC-16校验和
│ │ │ │ │ │ │ │ └─ 消息数据载荷
│ │ │ │ │ │ │ └─ 消息ID (24位)
│ │ │ │ │ │ └─ 组件ID
│ │ │ │ │ └─ 系统ID
│ │ │ │ └─ 序列号
│ │ │ └─ 兼容性标志
│ │ └─ 不兼容性标志
│ └─ 载荷长度
└─ 起始标志
可选签名 (仅当启用签名时):
┌─────────────────────────────────────────────────────────────┐
│ Signature (13字节) - 包含时间戳、链路ID和加密签名
└─────────────────────────────────────────────────────────────┘
最小帧长: 10字节 (无载荷,无签名)
最大帧长: 280字节 (含最大载荷255字节 + 签名13字节)
字段说明:
字段 长度 (字节) 说明
STX 1 起始标志,v1为0xFE,v2为0xFD。
LEN 1 载荷(Payload)的字节长度 (0-255)。
SEQ 1 包序列号,用于检测丢包。
SYSID 1 发送方系统ID (1-255),区分不同载具。
COMPID 1 发送方组件ID (1-255),区分同一系统内的不同部件。
MSGID 1 (v1) / 3 (v2) 消息ID,决定载荷如何解析。
INC_FLAGS 1 (仅v2) 不兼容性标志,接收方不理解则丢弃。
CMP_FLAGS 1 (仅v2) 兼容性标志,接收方不理解仍可处理。
Payload 0-255 消息的实际数据。
Checksum 2 CRC-16校验和,确保数据完整性。
Signature 0或13 (仅v2) 可选的13字节数字签名,用于链路认证。
上述知识点来着链接:https://blog.csdn.net/u011487024/article/details/155912684
由上可知,mavlink 2.0 比mavlink 1.0增加了如下特性:
(1)MSGID三字节,可用于描述更多的消息对象,定义远超256个消息;
(2)增加可选的13字节签名数据,使得协议传输安全性更高;
注:最小帧字节从8字节,增长到了14字节。
SYSID系统ID:
同一总线上,不同系统有不同的ID。如:飞控、地面站(不在一个系统中的对象);
COMPID组件ID:
同一系统中,不同的组件设备。如:飞机是一个系统,飞机上有飞控、云台、相机、舵机控制模块等,每个组件都有分配的ID
待补充...
3 项目应用
项目中,使用了物理层串口+上层应用mavlink 2.0协议,实现飞机姿态信息、位置信息到RID模块的通信交互。
4 结束
over!