MAVLink v1.0详解——结构

2023-05-16

  本文针对 MAVLink v1.0版本,协议版本:3。

  MAVLink是为微型飞行器MAV(Micro Air Vehicle)设计的(LGPL)开源的通讯协议。是无人飞行器和地面站(Ground Control Station ,GCS)之间,以及无人飞行器之间通讯常用的协议。APM、PIXHAWK飞控,Mission Planner、QGroundControl地面站均使用了MAVLink协议进行通讯。

  MAVLink源码下载地址(现已更新至v2.0):https://github.com/mavlink/qgroundcontrol

  用户手册:https://docs.qgroundcontrol.com/en/

MAVLink源文件结构

 

1、 common文件夹:原始的MAVLink消息,包括各种消息的头文件

    common.h:定义MAVLink各个消息包中用到的枚举类型,各个消息包对应的CRC—EXTRA值、LENGTH值,包含(include)各个消息包的头文件

    各个消息的头文件:1)定义消息内容对应的数据结构,2)打包、发送消息的便捷函数,3)消息包解析并获取各个参数

2、 autopilotmega,ASLUAV,pixhawk等文件夹:这些文件夹包含各个飞控自定义的MAVLink消息类型 

3、 checksum.h:计算校验码的代码 

4、 mavlink_conversions.h:dcm,欧拉角,四元数之间的转换

5、 mavlink_helper.h:提供各种便捷函数:

  1)将各个消息包补充完整并发送。将数据载荷加上消息帧的头部,如sysid和compid等,计算校验码,补充成为完整的mavlink消息包后发送;

  2)MAVLink消息包解析。

6、 mavlink_types.h:定义用到的各种基本结构体(如mavlink_message_t)、枚举类型(如 mavlink_param_union_t)

MAVLink消息包结构

  MAVLink传输时,以消息包作为基本单位,数据长度为8~263字节。消息数据包的结构如下:

 

字节索引

内容

解释

STX

0

包起始标志

v1.0:0xFE

包的起始标志,在v1.0中以“FE”作为起始标志(FE=254)

LEN

1

有效载荷长度

0~255

有效载荷数据的字节长度(N)

SEQ

2

包的序列号

0~255

每发送完一个消息,内容加1。用以检测丢包情况

SYS

3

系统ID编号

1~255

发送本条消息包的系统/飞行器的编号。用于消息接收端在同一网络中识别不同的MAV系统

COMP

4

部件ID编号

0~255

发送本条消息包的部件的编号。用于消息接收端在同一系统中区分不同的组件,如IMU和飞控

MSG

5

消息包ID编号

0~255

有效载荷中消息包的编号。该id定义了有效载荷内放的是什么类型的消息,以便消息接收端正确地解码消息包

PAYLOAD

6~N+6

有效载荷数据

0~255字节

要用的数据放在有效载荷里。内容取决于message id。

CKA

N+7

校验和低字节

 

16位校验码;

ITU X.25/SAE AS-4哈希校验(CRC-16-CCITT),不包括数据包起始位,从第一个字节到有效载荷(字节1 ..(N+6))进行crc16计算(还要额外加上一个MAVLINK_CRC_EXTRA字节),得到一个16位校验码

CKB

N+8

校验和高字节

  注:校验(checksum)功能。加入MAVLINK_CRC_EXTRA,当两个通讯终端之间(飞行器和地面站,或飞行器和飞行器)使用不同版本的MAVLink协议时,双方计算得到的校验码会不同,则不同版本的MAVLink协议之间将无法通讯。MAVLINK_MESSAGE_CRCS中存储了每种消息包对应的MAVLINK_CRC_EXTRA。这个 MAVLINK_CRC_EXTRA在用python生成MAVLink代码时在common.h头文件中自动生成。

  MAVLink数据包的结构在mavlink_types.h中用mavlink_message_t结构体定义:


 1 typedef struct __mavlink_message {  
 2 uint16_t checksum; /// CRC
 3 uint8_t magic;   /// STX
 4 uint8_t len;     /// LEN
 5 uint8_t seq;     /// SEQ
 6 uint8_t sysid;   /// SYS
 7 uint8_t compid;  /// COMP
 8 uint8_t msgid;   /// MSG
 9 uint64_t payload64[(MAVLINK_MAX_PAYLOAD_LEN+MAVLINK_NUM_CHECKSUM_BYTES+7)/8];  
10 } mavlink_message_t;    

MAVLINK Common Message Set

  MAVLink通用消息集可以在《MAVLLINK Common Message set specifications》文档中查看。这些消息定义了通用消息集,这是大多数地面控制站和自动驾驶仪实现的参考消息集,头文件包含在common文件夹中。

  分为两部分:MAVLink Type Enumerations(MAVLink类型枚举 )和MAVLink Messages(MAVLink消息包)。

MAVLink Type Enumerations

  MAVLink Type Enumerations在common.h文件中定义。如下,枚举变量定义了飞行器的类型MAV_AUTOPILOT。

 


 1 typedef enum MAV_AUTOPILOT
 2 {
 3     MAV_AUTOPILOT_GENERIC=0, /* Generic autopilot, full support for everything | */
 4     MAV_AUTOPILOT_RESERVED=1, /* Reserved for future use. | */
 5     MAV_AUTOPILOT_SLUGS=2, /* SLUGS autopilot, http://slugsuav.soe.ucsc.edu | */
 6     MAV_AUTOPILOT_ARDUPILOTMEGA=3, /* ArduPilotMega / ArduCopter, http://diydrones.com | */
 7     MAV_AUTOPILOT_OPENPILOT=4, /* OpenPilot, http://openpilot.org | */
 8     MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY=5, /* Generic autopilot only supporting simple waypoints | */
 9     MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY=6, /* Generic autopilot supporting waypoints and other simple navigation commands | */
10     MAV_AUTOPILOT_GENERIC_MISSION_FULL=7, /* Generic autopilot supporting the full mission command set | */
11     MAV_AUTOPILOT_INVALID=8, /* No valid autopilot, e.g. a GCS or other MAVLink component | */
12     MAV_AUTOPILOT_PPZ=9, /* PPZ UAV - http://nongnu.org/paparazzi | */
13     MAV_AUTOPILOT_UDB=10, /* UAV Dev Board | */
14     MAV_AUTOPILOT_FP=11, /* FlexiPilot | */
15     MAV_AUTOPILOT_PX4=12, /* PX4 Autopilot - http://pixhawk.ethz.ch/px4/ | */
16     MAV_AUTOPILOT_SMACCMPILOT=13, /* SMACCMPilot - http://smaccmpilot.org | */
17     MAV_AUTOPILOT_AUTOQUAD=14, /* AutoQuad -- http://autoquad.org | */
18     MAV_AUTOPILOT_ARMAZILA=15, /* Armazila -- http://armazila.com | */
19     MAV_AUTOPILOT_AEROB=16, /* Aerob -- http://aerob.ru | */
20     MAV_AUTOPILOT_ASLUAV=17, /* ASLUAV autopilot -- http://www.asl.ethz.ch | */
21     MAV_AUTOPILOT_ENUM_END=18, /*  | */
22 } MAV_AUTOPILOT;  

MAVLink Messages

  MAVLink Messages在common文件夹内每个消息包的头文件中定义。在文档中msgid以蓝色的“#”加数字的方式来表示,如心跳包的“#0”,在心跳包的头文件mavlink_msg_heartbeat.h中,MAVLINK_MSG_ID_HEARTBEAT对应心跳包的message ID,为0。


#define MAVLINK_MSG_ID_HEARTBEAT 0  

  心跳包的内容存放在payload数据载荷中。以心跳包为例,


typedef struct __mavlink_heartbeat_t
{
 uint32_t custom_mode; /*< A bitfield for use for autopilot-specific flags.*/
 uint8_t type; /*< Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)*/
 uint8_t autopilot; /*< Autopilot type / class. defined in MAV_AUTOPILOT ENUM*/
 uint8_t base_mode; /*< System mode bitfield, see MAV_MODE_FLAG ENUM in mavlink/include/mavlink_types.h*/
 uint8_t system_status; /*< System status flag, see MAV_STATE ENUM*/
 uint8_t mavlink_version; /*< MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version*/
} mavlink_heartbeat_t;  

  心跳包一般用来表明发出该消息的设备是否活跃(一般以1Hz发送),消息接收端会根据是否及时收到了心跳包来判断是否和消息发送端失去了联系。

  心跳包由6个数据成员组成,占用9个字节。

  1、 type:飞行器类型,表示了当前发消息的是什么飞行器,如四旋翼,直升机等。type的取值对应枚举类型MAV_TYPE(如四旋翼,对应数值2)。

  2、autopilot:飞控类型,如apm,Pixhawk等,发送心跳包的飞行器的飞控类型。autopilot的取枚举类型MAV_AUTOPILOT。

  3、base mode(基本模式):飞控现在所处的飞行模式,这个参数要看各个飞控自己的定义方式,会有不同的组合、计算方式。

  4、custom mode(用户模式):飞控现在所处的飞行模式,这个参数要看各个飞控自己的定义方式,会有不同的组合、计算方式。

  5、system status:系统状态,见MAV_STATE枚举变量。

  6、mavlink version:消息发送端的MAVLink版本。

  其余的消息也是类似的结构,基本消息的定义可以查看官方网页的说明(具体说明以各个飞控为准),也可查看各个消息包头文件的定义。

 

转载于:https://www.cnblogs.com/warrior1988/p/7729997.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MAVLink v1.0详解——结构 的相关文章

  • PX4模块设计之四十七:mavlink模块

    PX4模块设计之四十七 xff1a mavlink模块 1 mavlink模块简介2 模块入口函数mavlink main3 mavlink模块重要函数3 1 Mavlink start3 2 Mavlink task main3 3 Ma
  • mavlink里面有个关键词 msg

    mavlink里面有个关键词 msg 已经看到很多次了 https blog csdn net sinat 16643223 article details 108913088 https blog csdn net sinat 16643
  • mavlink消息帧里最重要的两个东西,一个是msgid;一个是payload

    mavlink消息帧里最重要的两个东西 xff0c 一个是msgid xff1b 一个是payload 在这里也可以看出 https blog csdn net sinat 16643223 article details 10891315
  • 【无人机开发】通讯协议MavLink详解

    摘自 xff1a https blog csdn net myboyer article details 81109991 1 MAVLink简介 MAVLink xff08 Micro Air Vehicle Link xff0c 微型空
  • *我发觉不管是mavlink还是传感器驱动都是基于串口协议的一个更高层的协议!!!!!!!(没有协议没有规则是没有办法进行通信的)

    驱动做的事情就是协议解析 ACfly的光流还有TFmini的驱动 xff0c 他们都有传感器自己定义的协议 串口只是帮你保证发送一个字节的数据 xff0c 传感器的协议它是定义多个字节代表的含义 xff01 xff01 xff01 可以去看
  • MavLink

    2 1 MAVLink xff08 Micro Air Vehicle Link xff09 是一种用于小型无人载具的通信协议 xff0c 于2009年首次发布 该协议广泛应用于地面站 xff08 Ground Control Statio
  • PX4中的mavlink

    简介 px4与地面站的通信协议是mavlink xff0c 对于其消息格式的介绍看这里和这里 需要注意几点 xff1a 不光是px4与qgroundcontrol通信通过mavlink xff0c 有一些sensor也支持mavlink m
  • px4调试bug--添加mavlink_log_info信息

    写在前面的话 有一阵子没有看px4的代码了 由于项目和论文的需要 又要接触这个 其中又遇到一些新的问题 找到了一些新的解决方法 故在此记录一下 总是在几种飞控代码之间跳来跳去 没有认真研究一个 有点遗憾 PX4的代码调试还没有找到什么好的方
  • C语言实现mavlink库与px4通信仿真

    参照网址 http mavlink io en mavgen c 首先从github上下载对应的C uart interface example 对应的github仓库网址为https github com mavlink c uart i
  • px4 mavlink消息自定义及其发送

    在px4源码中自定义消息 xff0c 并发送主要有以下三个大步骤 xff1a 一 自定义mavlink消息 1 在myMessage XML文件中自定义消息 xff08 注意消息ID不要与原有的重复 xff09 具体消息ID可参考这里 2
  • QGC通过网络连接飞控(树莓派+ROS桥接MavLink)

    1 为树莓派刷ubuntu 因为无界面的ubuntu在连接无线 设置自动登录等方面的设置比较复杂 我经过各种百度尝试后 均没有成功 所以我放弃了 转而又刷了ubuntu mate 带界面 然后连接了无线 设置了自动登录 静态IP 自此树莓派
  • Mavlink自定义协议

    参照本人博客 xff1a 博客直达 浏览密码 xff1a N414 这里不做描述 xff0c 详细过程请移步本人博客
  • MAVROS感觉只是起到一个数据格式转换的作用,把ROS TOPIC里面的指令转化为MAVLINK格式发给PX4

    MAVROS感觉只是起到一个数据格式转换的作用 xff0c 把ROS TOPIC里面的指令转化为MAVLINK格式发给PX4 xff0c 所以指令已经由GAAS或者一个功能包发出来了 xff0c MAVROS只是起到一个格式转换转发的作用
  • MAVLink简介

    MAVLink简介 Mavlink协议最早由 苏黎世联邦理工学院 计算机视觉与几何实验组 的 Lorenz Meier于2009年发布 xff0c 并遵循LGPL开源协议 Mavlink协议是在串口通讯基础上的一种更高层的开源通讯协议 xf
  • MAVLink v1.0详解——结构

    本文针对 MAVLink v1 0版本 xff0c 协议版本 xff1a 3 MAVLink是为微型飞行器MAV xff08 Micro Air Vehicle xff09 设计的 xff08 LGPL xff09 开源的通讯协议 是无人飞
  • QGC二次开发---自定义MAVLink消息

    MAVLink库下载 下载网站https github com mavlink mavlink 可以通过git工具 xff0c 在存放文件夹下打开git工具 xff0c 输入命令 xff1a git clone https github c
  • ardupilot之添加mavlink消息

    本文是这篇文章的复现 xff1a http www sohu com a 213599378 175233 一 mavlink分析 Mavlink 的全称是Micro Air Vehicle link xff0c pixhawk把它作为与地
  • DroneKit教程(五):使用自定义MAVLink指令

    DroneKit教程 xff08 五 xff09 xff1a 使用自定义MAVLink指令 DroneKit的实质是通过发送和接受MAVLink消息 xff0c 向飞控发送控制指令 从飞控获取各种状态信息 DroneKit的所有内置功能都是
  • mavlink python

    from pymavlink import mavutil Create the connection m 61 mavutil mavlink connection 39 udpin 0 0 0 0 14550 39 dir m mav
  • MISSION_MAVLINK

    上传航点的mavlink包 MISSION ITEM 39 Message encoding a mission item This message is emitted to announce the presence of a miss

随机推荐

  • [追加评论]三款SDR平台对比:HackRF,bladeRF和USRP

    这三个月 xff0c 有幸把3种板子都用到了 说说使用体会 我用过其中的HackRF xff0c bladeRF x115 xff0c USRP B210 我并没有仔细的测量各种板子的射频指标什么的 xff0c 只是做各种实验的时候用到它们
  • linux zip

    zip r myfile zip 将当前目录下的所有文件和文件夹全部压缩成myfile zip文件 xff0d r表示递归压缩子目录下所有文件 2 unzip unzip o d home sunny myfile zip 把myfile
  • Eclipse中文注释乱码解决

    将别人的项目或JAVA文件导入到自己的Eclipse中时 xff0c 常常会出现JAVA文件的中文注释变成乱码的情况 xff0c 主要原因就是别人的IDE编码格式和自己的Eclipse编码格式不同 总结网上的建议和自己的体会 xff0c 可
  • H3C子接口配置要点及实例说明

    xfeff xfeff 类型一 xff1a 以太网子接口配置要点 单臂路由 第一步 xff1a 在路由器对端的交换机上配置好vlan信息 xff08 如vlan10 vlan20 xff09 第二步 xff1a 将交换机上与路由器直接相连的
  • 常用的SQL聚合函数:

    AVG 返回集合的平均值 COUNT 返回集合中的项目数 MAX 返回集合中的最大值 MIN 返回集合中的最小值 SUM 返回集合中所有或不同值的总和 GROUP BY 将结果按照指定的列进行分组 HAVING 过滤分组后的结果 聚合函数不
  • int型除以int型

    int型除以int型得到的还是int型 就算你是这样的 xff1a float a 61 5 3 xff0c 虽然你定义的a是float型 xff0c 但a得到的结果依旧是1 0000而不是1 66666 5 3先得到1 xff0c 然后再
  • Keepalived两节点出现双VIP情况及解决方法【原创】

    1 故障现象 俩台服务器keepalived的vip在俩台服务器同时出现 A xff1a 10 70 12 72 B xff1a 10 70 12 73 2 问题分析 1 xff09 先分析那台服务器在提供服务 A xff1a 10 70
  • 10款值得推荐的论坛系统源码

    无论您是一个技术娴熟的站长朋友 xff0c 还是初入互联网并致力于在这片领土发展的准站长 xff0c 或者您只是一个还未毕业的学生 xff0c 在为了毕业设计 课程设计不停的搜集资料 xff0c 只要您需要的是社区论坛系统的源码 xff0c
  • make[1]: *** [storage/perfschema/unittest/CMakeFiles/pfs_connect_attr-t.dir/all] 错误 2 解决方法...

    make 2 storage perfschema unittest pfs connect attr t 错误 1 make 1 storage perfschema unittest CMakeFiles pfs connect att
  • Yii2 中cookie的用法(1)

    Yii使用 yii web Cookie对象来代表每个cookie xff0c yii web Request 和 yii web Response 通过名为 cookies 的属性维护一个cookie集合 xff0c 前者的cookie
  • 修改.srt格式字幕文件

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 正文前 xff1a 20160821104107 下载了 惊天魔盗团2 电影来看 xff0c 发现字幕只有英文没有中文 打开 srt文件 xff0c 随便改了一下 xff0
  • VC6.0+MSDN 下载(含链接)安装 全教程

    Microsoft Visual Studio 6 0 简体中文企业版 下载路径显示不出 xff0c 这个软件比较好下载 xff0c 主要是MSDN MSDN CD1 http ftp sdshiyan cn soft program DN
  • Dynamic Drop Down(Translate Values)

    This code i have got Ittool box com It is very usefull we usually have requirement when we want to hide some translate v
  • Windbg实用手册

    摘要 Windbg的命令分为标准命令 xff0c 原命令和扩展命令 xff0c 输入问号 可以显示所有的标准命令的帮助信息 元命令以一个点 开始 xff0c 输入 help可以显示所有的原命令的帮助信息 扩展命令以叹号 开始 阅读全文 Ri
  • Spring注解@Component、@Repository、@Service、@Controller区别 .

    Spring 2 5 中除了提供 64 Component 注释外 xff0c 还定义了几个拥有特殊语义的注释 xff0c 它们分别是 xff1a 64 Repository 64 Service 和 64 Controller 在目前的
  • sql 语句中如何写判断

    当ID为26时 xff0c 查询的result是ok span class token keyword select span name span class token punctuation span span class token
  • 光流定位原理是什么??【转】

    转自 xff1a https www zhihu com question 35980316 Jessie Lee HIT 控制 无人机 光流是测速算法 xff0c 并不是直接定位的 简单理解 xff0c 光流就是通过检测图像中光点和暗点的
  • 算法杂货铺——分类算法之决策树(Decision tree)

    3 1 摘要 在前面两篇文章中 xff0c 分别介绍和讨论了朴素贝叶斯分类与贝叶斯网络两种分类算法 这两种算法都以贝叶斯定理为基础 xff0c 可以对分类及决策问题进行概率推断 在这一篇文章中 xff0c 将讨论另一种被广泛使用的分类算法
  • 01-嵌入式入门-如何看原理图

    最近由于找到的工作是偏于嵌入式方向 xff0c 因此又重新开始学习已经丢弃两年的知识 新手学习知识感觉有一个通病 xff1a 喜欢收集各种各样的视频 资料 xff0c 网盘里收藏一大堆 xff0c 但是却从没有打开看过 xff0c 到头来还
  • MAVLink v1.0详解——结构

    本文针对 MAVLink v1 0版本 xff0c 协议版本 xff1a 3 MAVLink是为微型飞行器MAV xff08 Micro Air Vehicle xff09 设计的 xff08 LGPL xff09 开源的通讯协议 是无人飞