文章目录

  • 协议简介
    • 一、Mavlink协议
      • 主要特点
    • 二、数据结构
      • 不兼容标志 (MAVLink 2)
      • 兼容性标志 (MAVLink 2)
      • 有效载荷格式
      • MAVLink 2 的数据包格式
    • 三、航点协议
    • 四、参数的读写
    • 五、增加新的mavlink消息
    • 六、消息的发送与解析
    • 七、通用的Mavlink消息
  • 参考资料

协议简介

不整理了,官方给出了新版本很清晰了已经。

官方中文文档:

https://github.com/mavlink/mavlink-devguide/tree/master/zh
https://github.com/mavlink/mavlink-devguide/tree/master/zh/guide

MavLink官网:https://mavlink.io/

MAVLink通讯协议是一个为微型飞行器设计的非常轻巧的、只由头文件构成的信息编组库。它可以通过串口非常高效地封装C结构数据,并将这些数据包发送至地面控制站。该协议被PX4, PIXHAWK, APM和Parrot AR.Drone平台所广泛测试并在以上的项目中作为MCU/IMU间以及Linux进程和地面站链路通信间的主干通信协议。

一、Mavlink协议

MAVLink 是一种非常轻量级的消息传递协议,用于与无人机(以及机载无人机组件之间)进行通信。
MAVLink 遵循现代混合发布-订阅和点对点设计模式:数据流作为主题发送/发布,而任务协议或参数协议等配置子协议是点对点重传。
消息在 XML 文件中定义。每个 XML 文件都定义了特定 MAVLink 系统支持的消息集,也称为“方言”。大多数地面控制站和自动驾驶仪实施的参考消息集在common.xml 中定义(大多数方言建立在此定义之上)。
代码生成器根据这些 XML 消息定义为特定编程语言创建软件库,然后无人机、地面控制站和其他 MAVLink 系统可以使用这些软件库进行通信。生成的库通常是 MIT 许可的,因此可以在任何闭源应用程序中不受限制地使用,而无需发布闭源应用程序的源代码。

主要特点

  • 非常有效率。MAVLink 1 每个数据包只有 8 个字节的开销,包括开始标志和数据包丢弃检测。MAVLink 2 只有 14 字节的开销(但它是一个更安全和可扩展的协议)。由于 MAVLink 不需要任何额外的成帧,因此非常适合通信带宽非常有限的应用。
  • 非常可靠。自 2009 年以来,MAVLink 已被用于在许多不同的车辆、地面站(和其他节点)之间通过各种且具有挑战性的通信渠道(高延迟/噪声)进行通信。它提供了检测数据包丢失、损坏和数据包身份验证的方法。
  • 可以使用多种不同的编程语言,在众多微控制器/操作系统(包括 ARM7、ATMega、dsPic、STM32 和 Windows、Linux、MacOS、Android 和 iOS)上运行。
  • 网络上最多允许 255 个并发系统(车辆、地面站等)
  • 启用机外和机载通信(例如 GCS 和无人机之间,以及无人机自动驾驶仪和启用 MAVLink 的无人机相机之间)。

MAVLink于2009年初由Lorenz Meier首次发布, 目前为止,已拥有数量可观的贡献者。
基于C封装的MAVLink库,是一个 header-only库, 其针对资源受限系统有限的ram 和闪存,进行了高度优化。 这种库,已经过现场验证, 并部署在许多产品中, 充当不同厂家组件之间的交互性接口。

MAVLink 2的主要新特性是:

24 位消息 ID(指令类型) - 允许方言中超过 1600 万个唯一消息定义(MAVLink 1 限制为 256)
数据包签名- 验证消息是由受信任的系统发送的。
消息扩展- 向现有 MAVLink 消息定义添加新字段,而不会破坏尚未更新的接收器的二进制兼容性。
空字节有效负载截断- 序列化有效负载末尾的空(零填充)字节必须在发送之前删除(所有字节都在MAVLink 1中发送,无论内容如何)。
Compatibility Flags / Incompatibility Flags - 通过指示必须以特殊/非标准方式处理的帧来允许协议的向后兼容演变(具有兼容性标志的数据包仍可以以标准方式处理,而具有不兼容标志的数据包必须是如果不支持该标志,则丢弃)。

二、数据结构

MAVLink 是一种二进制遥测协议,专为资源受限系统和带宽受限链接而设计。MAVLink 部署在两个主要版本中:v1.0 和 v2.0,它们向后兼容(v2.0 实现可以解析和发送 v1.0 数据包)。遥测数据流以多播设计发送,而改变系统配置和需要保证交付(如任务协议或参数协议)的协议方面是点对点重传。

Mavlink传输时基本单位是消息帧,消息帧的结构如下:

字节索引 名称 C版本 内容 含义
0 STX uint8_t magic 数据包起始标志 0xFD 协议特定的文本开始(STX)标记,用于指示新数据包的开始。
1 LEN uint8_t len 有效载荷长度 0 - 255 标识该消息包中负载长度
2 INC FLAGS uint8_t incompat_flags 不兼容标志 - 为实现MAVLink兼容性必须理解的标志(若实现不理解标志,则丢弃数据包)。
3 CMP FLAGS uint8_t compat_flags 兼容性标志 - 如果不理解,则可以忽略的标志(即使不理解标志,实现仍然可以处理数据包)。
4 SEQ uint8_t seq 包序列号 0 - 255 消息发送序列号,用于检测数据包的丢失
5 SYS ID uint8_t sysid 系统 ID (发送者) 1 - 255 发送信息的系统(车辆)的ID。用于区分网络上的系统.
6 COMP ID uint8_t compid 组件ID (发送者) 1 - 255 发送消息的组件的ID。用于区分系统中的组件(例如自动驾驶仪和摄像头)
7 to 9 MSG ID uint32_t msgid:24 消息IDID (low, middle, high bytes) 0 - 16777215 有效负载中消息类型的ID。用于将数据解码回消息对象。
For n-byte payload:n=0: NA, n=1: 10, n>=2: 10 to (9+n) PAYLOAD uint8_t payload[max 255] 消息载荷 - 消息内部的负载信息
(n+10) to (n+11) CHECKSUM uint16_t checksum Checksum (low byte, high byte) - CRC-16/MCRF4XX for message (excluding magic byte). Includes CRC_EXTRA byte.
(n+12) to (n+25) SIGNATURE uint8_t signature[13] 签名信息 - (可选) 签名以确保链接是防篡改的.
  • 对于没有有效负载的确认数据包,最小数据包长度为12字节。
  • 对于使用整个有效负载的签名消息,最大数据包长度为280字节。

注意:校验码由crc16算法得到,算法从消息包的1~n+6字节(不包含STX),还要额外加上个MAVLINK_CRC_EXTRA进行计算得到一个16位的校验码。每个消息的头文件里都包含MAVLINK_CRC_EXTRA,这个MAVLINK_CRC_EXTRA是由生成mavlink代码的xml文件生成的,加入这个额外的东西是为了当飞行器和地面站使用不同版本的mavlink协议时,双方计算得到的校验码会不同,这样不同版本间的mavlink协议就不会在一起正常工作,避免了由于不同版本间通讯时带来的重大潜在问题。

不兼容标志 (MAVLink 2)

不兼容标志用于指示 MAVLink 库必须支持才能处理数据包的功能。这包括影响数据包格式/排序的任何功能。

如果 MAVLink 实现不理解字段中的任何标志,则它必须丢弃数据包incompat_flags。

支持的不兼容标志包括(在撰写本文时):

旗帜 C旗 特征
0x01 MAVLINK_IFLAG_SIGNED 数据包已签名(签名已附加到数据包)。

兼容性标志 (MAVLink 2)

兼容性标志用于指示功能不会阻止 MAVLink 库处理数据包(即使该功能不被理解)。例如,这可能包括一个标志,用于指示应将数据包视为“高优先级”(此类消息可由任何 MAVLink 实现处理,因为数据包格式和结构不受影响)。
MAVLink 实现可以安全地忽略它在该compat_flags领域不理解的标志。

有效载荷格式

MAVLink 在有效载荷本身中不包含有关消息结构的信息(为了减少开销)!相反,发送方和接收方必须对在线格式的消息字段的含义、顺序和大小有共同的理解。

消息在 MAVLink 数据包中编码:

  • msgid(消息id)字段标识数据包中编码的特定消息,所有MavLink指令消息和应答消息都使用此标识标记类型
  • 有效负载字段包含消息数据:
    • MAVLink为有线传输重新排序有效负载中的消息字段(根据原始XML消息定义中的顺序)。
    • 在发送消息之前,MAVLink 2会截断有效负载末尾的任何零填充字节,并适当设置数据包长度字段(MAVLink 1始终发送所有字节)。
  • len字段包含有效负载数据的长度。
  • A CRC_EXTRA byte is added to the message checksum. 接收者可以使用它来确认它与有效负载消息格式/定义兼容。

A MAVLink library should notify a bad CRC during decoding if a message specification is incompatible (e.g. the C library mavlink_parse_char() gives a status MAVLINK_FRAMING_BAD_CRC).

MAVLink 2 的数据包格式

以下为在链路上传输的 MAVLink v2 数据包格式。 内存中的表示方式可能会有所不同。

uint8_t magic;              ///< protocol magic marker
uint8_t len;                ///< Length of payload
uint8_t incompat_flags;     ///< flags that must be understood
uint8_t compat_flags;       ///< flags that can be ignored if not understood
uint8_t seq;                ///< Sequence of packet
uint8_t sysid;              ///< ID of message sender system/aircraft
uint8_t compid;             ///< ID of the message sender component
uint8_t msgid 0:7;          ///< first 8 bits of the ID of the message
uint8_t msgid 8:15;         ///< middle 8 bits of the ID of the message
uint8_t msgid 16:23;        ///< last 8 bits of the ID of the message
uint8_t payload[max 255];   ///< A maximum of 255 payload bytes
uint16_t checksum;          ///< CRC-16/MCRF4XX
uint8_t signature[13];      ///< 保证正确连接的签名(可选)

三、航点协议

四、参数的读写

五、增加新的mavlink消息

六、消息的发送与解析

七、通用的Mavlink消息

参考资料

1.Mavlink协议
2.Mavlink协议第一版介绍

Mavlink协议(第二版)相关推荐

  1. Mavlink协议分析

    阿木社区:转载注意出处 http://www.amovauto.com Pixhawk/APM都是采用MAVLINK协议实现的飞控的数据链路传输.先简单介绍下mavlink协议.Mavlink协议最早 ...

  2. 整理对应_JSP第二版课后习题答案【侵权联系我删除】

    JSP第二版课后习题下载:https://download.csdn.net/download/weixin_42859280/11265785 JSP第二版课后习题答案下载:https://down ...

  3. 对《Clojure in Action》第二版的书评与作者问答

    由Amit Rahore及Francis Avila撰写,Manning出版的<Clojure in Action>第二版以本质性的.通透的.结构组织良好的方式对Clojure 1.6进行 ...

  4. 【译】JavaScript 核心(第二版)

    原文:JavaScript. The Core: 2nd Edition 作者:Dmitry Soshnikov 文章其他语言版本:俄语 这篇文章是 JavaScript. The Core 演讲的第 ...

  5. 【Python 自然语言处理 第二版】读书笔记1:语言处理与Python

    文章目录 前言 语言处理与Python 一.语言计算:文本和单词 1.NLTK入门 (1)安装(nltk.nltk.book) (2)搜索文本 (3)词汇计数 2.列表与字符串 (1)列表操作 (2) ...

  6. 《Cisco交换机配置与管理完全手册》(第二版)前言和目录

    史上最具人气.最受好评的网络设备图书领域"四大金刚"的全新升级版本再现江湖了,他们分别是:<Cisco交换机配置与管理完全手册>(第二版).<H3C交换机配置与管 ...

  7. TensorFlow 深度学习中文第二版·翻译完成

    原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>, ...

  8. TensorFlow 机器学习秘籍中文第二版·翻译完成

    原文:TensorFlow Machine Learning Cookbook 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>,生活原则 2.3 ...

  9. NumPy 秘籍中文第二版·翻译完成

    原文:NumPy Cookbook - Second Edition 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 Apache ...

最新文章

  1. 如何在Eclipse中开启代码自动提示功能
  2. Java对象初始化详解
  3. SQL解析和优化器获得重大思路进展
  4. ArcGIS JavaScript在线编辑
  5. Python 编程训练(3)
  6. javascript框架echarts插件实现超酷人立方效果图
  7. android wifi热点设置用户数,android 如何获取连接wifi热点的设备数量
  8. 获取图片中指定像素点的灰度值并画图显示
  9. 【转】常用的shell脚本
  10. 百度云盘秒传链接的建立
  11. c51实现老人跌倒,心率异常报警系统
  12. 运营版uniapp多商户商城小程序+H5+APP+商家入驻短视频社区种草直播阶梯拼团
  13. reset master和reset slave解析
  14. 50道简单家常菜~~~~~让你得意厨房
  15. windows注册表:开机启动的程序
  16. 淘宝如何做到懂你的推荐的?揭秘千人千面个性化推荐原理!
  17. 重庆大学考试计算机应用基础b卷,重庆大学2019年10月网上考试建筑结构设计B卷.docx...
  18. designate原理及自动化部署
  19. 常见操作系统命令注入思路
  20. 外星人寻找计划+Linux,霍金发起寻找外星人计划

热门文章

  1. 什么是表内业务,什么是表外业务
  2. 文档生成模型:多元贝努利分布vs多项式分布
  3. 2020最新中国上市公司市值500强:阿里、腾讯领跑,百度掉出前20,附全榜单
  4. 中国科学院计算机所张浩,专家人才库数据----中国科学院计算技术研究所
  5. vivo自带便签新版_vivo手机便签怎么导出到新手机?
  6. OpenCL优化案例研究 (2)
  7. 声音以模拟信号的形式存储在计算机中,2021年4月自考《广告媒体分析》模拟试题(三)...
  8. 计算机毕业设计Java高校实习实训管理系统(源码+系统+mysql数据库+Lw文档)
  9. 计算机的认识文档,计算机的初步认识.docx
  10. 数据后台管理系统项目数据库表设计以及项目效果展示