Mavlink无人机通讯协议理解
    主页 > 新闻中心 >
  1. Mavlink无人机通讯协议理解

Mavlink无人机通讯协议理解

  之前看了mavlink协议,网上关于mavlink的资料不多。本文大概总结了下对mavlink协议的理解。以下如不说明都是说mavlink v1.0版本。

  首先附上mavlink的各个消息的简介(这里的内容很多,建议大概了解mavlink后再去浏览),mavlink协议介绍

  之后会在我的资源里上传一份为初学者准备的mavlink资料(转载)已经上传至笔者资源,免费下载。mavlink 纯小白教程(英文)它用通俗的说法帮助新人理解什么是mavlink,mavlink能干嘛等等。资料只有第一部分,第二部分笔者没有找到(可能是原作者没继续第二部分吧)。

  果师兄希望用户能更容易、更便捷的使用现在流行的科技产品和服务,当遇到问题和疑问能得到我们及时的帮助和技术支持; 通过果师兄专业的技术和热情的服务,让用户的科技生活因为我们存在而更简单。果师兄团队价值观是:客户第一、诚信担当、共创共享、拥抱变化、勇于创新、精益求精。另外,果师兄工程师团队承诺:凡是通过我们平台没能恢复成功,通过其他渠道成功恢复的,凭相关凭证,可双倍退款,比免费赠送数据恢复软件一套。

  使用Modbus的主要优点是它是一个简单的开源协议。Modbus的开发成本很低,并且需要最少的硬件设计。此外,Modbus还支持与各种设备(来自不同供应商)和系统的互操作性和兼容性。

  先简单介绍下mavlink协议。Mavlink协议最早由 苏黎世联邦理工学院 计算机视觉与几何实验组 的 Lorenz Meier 于2009年发布,并遵循LGPL开源协议。Mavlink协议是在串口通讯基础上的一种更高层的开源通讯协议,主要应用在微型飞行器(micro aerial vehicle)的通讯上。Mavlink是为小型飞行器和地面站(或者其他飞行器)通讯时常常用到的那些数据制定一种发送和接收的规则并加入了校验(checksum)功能。

  【1】下面开始说介绍mavlink所发送的数据结构。Mavlink传输时的基本单位是消息帧。

  如图所示,每个消息帧都是上述的结构,除了灰色外,其他的格子都代表了一个字节的数据。

  红色的是起始标志位(stx),在v1.0版本中以“FE”作为起始标志。这个标志位在mavlink消息帧接收端进行消息解码时有用处。

  第二个格子代表的是灰色部分(payload,称作有效载荷,要用的数据在有效载荷里面)的字节长度(len),范围从0到255之间。在mavlink消息帧接收端可以用它和实际收到的有效载荷的长度比较,以验证有效载荷的长度是否正确。

  智能手机已经成为了人们日产生活中必不可少的东西,几乎所有的人们都会使用智能手机。有的人使用智能手机购物,有的人使用智能手机玩游戏,甚至有的人使用手机办公,但是人们想要实现这些东西就必须要拥有非常好的信号数据,因此强大的信号已经成为现在的人们购买手机的一个选择。而小编给大家介绍的智能手机信号就是非常不错的。

  第三个格子代表的是本次消息帧的序号(seq),每次发完一个消息,这个字节的内容会加1,加到255后会从0重新开始。这个序号用于mavlink消息帧接收端计算消息丢失比例用的,相当于是信号强度。

  第四个格子代表了发送本条消息帧的设备的系统编号(sys),使用PIXHAWK刷PX4固件时默认的系统编号为1,用于mavlink消息帧接收端识别是哪个设备发来的消息。

  第五个格子代表了发送本条消息帧的设备的单元编号(comp),使用PIXHAWK刷PX4固件时默认的单元编号为50,用于mavlink消息帧接收端识别是设备的哪个单元发来的消息(暂时没什么用) 。

  第六个格子代表了有效载荷中消息包的编号(msg),注意它和序号是不同的,这个字节很重要,mavlink消息帧接收端要根据这个编号来确定有效载荷里到底放了什么消息包并根据编号选择对应的方式来处理有效载荷里的信息包。

  对于手机来说,大部分软件甚至在单核条件下都可以正常运行,与之相对应的,还是“大部分”——大部分软件都没有对多核并行做相应的设计优化。这就像是你修建了四条并行铁轨,但大部分火车都在第一条上面运行。

  最后两个字节是16位校验位,ckb是高八位,cka是低八位。校验码由crc16算法得到,算法将整个消息(从起始位开始到有效载荷结束,还要额外加上个MAVLINK_CRC_EXTRA字节)进行crc16计算,得出一个16位的校验码。之前提到的每种有效载荷里信息包(由消息包编号来表明是哪种消息包)会对应一个MAVLINK_CRC_EXTRA,这个MAVLINK_CRC_EXTRA 是由生成mavlink代码的xml文件生成的,加入这个额外的东西是为了当飞行器和地面站使用不同版本的mavlink协议时,双方计算得到的校验码会不同,这样不同版本间的mavlink协议就不会在一起正常工作,避免了由于不同版本间通讯时带来的重大潜在问题。

  为了方便叙述,消息包将称作包,包所代表的信息称作消息。上图中的sys将称为sysid,comp将称为compid,msg将称为msgid。

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  由于图片上传量到达上限,将在接下去的博客中继续介绍mavlink协议。下节主要介绍mavlink里消息的种类和如何看懂开始时提到的那个官方的mavlink消息介绍。

  [摘要:本文松接上文(一),先容mavlink里音讯的品种战若何看懂最先时提到的阿谁民圆的mavlink音讯先容(一)中已提到了正在mavlink音讯帧里最紧张的两个器。

  对政务服务大数据报告的目的分析而言, 这一步都是人工操作, 没有人工智能或者算法能够代替。特别是数据采集的来源, 通常都是由技术人员和用户来定义, 无法像传统的搜索引擎一样, 能够对整个Internet网进行全面的搜索。但是随着大数据的逐渐发展, 最终它的数据来源会面向整个Internet网络。

  本文紧接上文(一),介绍mavlink里消息的种类和如何看懂开始时提到的那个官方的mavlink消息介绍

  昆明理工大学召开2019年科技工作会暨2020年国家自科基金申报动员...(2019-10-22)

  (一)中已经提到了在mavlink消息帧里最重要的两个东西,一个是msgid;一个是payload,前者是payload中内容的编号,后者则存放了消息。消息有许多种类型,在官网的网页中中以蓝色的“#”加数字的方式来表示消息的编号如 “#0”(这样的表示方法应该是为了方便在网页中查找相应编号消息的定义)。在官网介绍网页里往下拉,大概拉到二分之一的位置处,开始出现“MAVLink Messages”的介绍,往下看是各种消息的数据组成说明。下面将以几个消息为例,讲解mavlink消息。

  优点:是2012年业界体积最小的四核A9架构处理器。他是一款高性能CPU,是华为自主设计。

  基于LabVIEW、NI TestStand和PXI测试医疗血糖仪和胰岛素输送系统

  先以#0消息为例,这个消息叫心跳包(heartbeat)。它一般用来表明发出该消息的设备是活跃的,飞行器和地面站都会发出这个信号(一般以1Hz发送),地面站和飞行器会根据是否及时收到了心跳包来判断是否和飞行器或地面站失去了联系。

  总线拓扑结构是一种共享通路的物理结构。这种结构中总线具有信息的双向传输功能,普遍用于局域网的连接,总线一般采用同轴电缆或双绞线。

  从图上1可以看出,心跳包由6个数据组成,第一个是占一个字节的飞行器类型数据type,这个数据表示了当前发消息的是什么飞行器,比如四旋翼,固定翼等。type的取值如何与飞行器类型对应,这要在官方的mavlink消息介绍网页上找,位于网页开始出的数据枚举中。如下图所示:

  这里只是一部分的类型,第一个是通用飞行器,对应的type数值是0;第二个是固定翼类型,对应的数值是1;第三个对应的是四旋翼,对应的数值是2.这个飞行器类型,其实对于发心跳包的地面站来说可能没什么意义(不同飞控对该消息的处理方法不同,至少刷了PX4固件的Pixhawk飞控对地面站发来的心跳包里的这个参数并不关心,如无特殊说明,之后所说的Pixhawk飞控都是指刷PX4固件的飞控),对于飞行器端来说代表了当前飞行器的类型,地面站可以根据这个参数来判断飞行器的类型并作出其他的反应。

  随着智能手机的兴起和移动互联网的发展,iphone,android应用开发已成为炙手可热的方向,移动应用产品经理将拥有较强的薪酬竞争力。

  第二个参数是自驾仪(即通常所说的飞控)类型,比如apm,ppz,Pixhawk等飞控,具体定义查找和之前查找飞行器类型时的方法一样。同样的,对于发送心跳包的飞行器来说代表了自己的飞控类性,对地面站发出的心跳包来说意义不大。

  第三个参数是基本模式(base mode),是指飞控现在处在哪个基本模式,对于发心跳包的地面站来说没有意义,对于发送心跳包的飞控来说是有意义的。这个参数要看各个飞控自己的定义方式,mavlink介绍网页并不会给出具体的模式。在Pixhawk中基本模式可以分为使用用户模式(custom mode)还是基本模式(这里有点绕,其实是就是是否使用用户模式)。使用用户模式将在讲下个参数时说明,使用基本模式又会分为自动模式(auto),位置控制模式(posctl)和手动模式(manual)。一般情况下都会使用用户模式,普通用户不用关心这个参数。开发者在使用mavlink修改飞行器模式时需要注意基本模式的设置,具体请看PX4代码,下载地址。

  另外,Pixhawk的模式和apm的有很大的不同,具体请看官网介绍,里面还有关于遥控器如何设置模式的教程链接。用QGroundControl地面站(以后简称QGC,下载地址)的图形界面来设置飞行模式的功能很鸡肋,建议直接在QGC中读取飞控参数值,并对遥控器的设置参数进行修改,记得改变参数后只是改变了飞控ram参数,要把参数写入到rom中才可以。

  第四个参数是用户模式(custom mode),大概说一下Pixhawk的用户模式。以多轴为例。它分为主模式(main mode)和子模式(sub mode),两种模式组合在一起成为最终的模式,主模式分为3种,手动(manual),辅助(assist),自动(auto)。手动模式类似apm的姿态模式。在辅助模式中,又分为高度控制模式(altctl)和位置控制模式(posctl)两个子模式,高度控制模式就类似apm的定高模式,油门对应到飞行器高度控制上。位置模式控制飞行器相对地面的速度,油门和高度控制模式一样,yaw轴控制和手动模式一样。自动模式里又分为3个子模式,任务模式(mission),留待模式(loiter),返航模式(return),任务模式就是执行设定好的航点任务,留待模式就是gps悬停模式,返航模式就是直线返回home点并自动降落。在apm里这个参数貌似是没有用的,注意这个数据占了4个字节,在Pixhawk中,前两个字节(低位)是保留的,没有用,第三个字节是主模式,第四个字节是子模式。普通用户请无视,开发者请注意:官网给出的通过程序设置模式的代码是错误的。如图,最后一行代码有误,应该为:

  展开全部接地桩采用热镀锌角钢(50X5X2500),每隔20米打一根。桩顶距地面0.6米,接地线)。电缆沟两侧接地线与电缆主架逐一焊接,每隔20米将接地线引出与接地桩焊接,同时将电缆沟内两侧接地线过沟底部连接,接地线热镀锌圆钢。所有接地装置连接处需焊接牢固,焊接处用沥青做防腐处理。

  第五个是系统状态(system status),查定义就好了,其中的standby状态在Pixhawk里就是还没解锁的状态,active状态就是已经解锁,准备起飞的状态。

  其余的消息也是类似的结构,各个数据的定义可以查看mavlink官方网页的说明,这些说明一般在网页的前面部分。具体说明以飞控为准,mavlink仅提供基本的定义。

  #76消息(command long),该消息是发送长命令,一般是地面站发送给飞控命令用的。该消息组成如下图。目标系统(命令的接收方,就是目标系统编号sysid),目标单元(命令的接收单元,就是目标单元编号compid)。command数据是这条命令的编号,用于区别不同的命令。confirmation数据,笔者还不是很明白,大概是是否需要收到命令后回复确认信号的意思。接下去有七个参数,这些参数是执行这条命令所需要告诉飞控的,许多命令都用不到七个参数,多余的参数清0就可以了。

  Pixhawk支持的命令有许多种(但不是所有mavlink命令都支持)。要看mavlink提供了哪些命令请在介绍mavlink的官网查询mav_cmd,在网页的中上部分。比如:第176号命令 MAV_CMD_DO_SET_MODE。这条命令用于改变飞行器的飞行模式,第一个参数就是设置飞控的base_mode,第二个是设置custom_mode。想要通过这条命令正确设置pixhawk的模式需要查看PX4代码,mavlink对参数的描述不够具体。

  2013年12月17日,刘作虎在微博中宣布,正式成立新的手机品牌公司“一加科技”(OnePlus),并表示一加不仅立志创造出让人惊叹的完美的手机产品,更要成为一家受人尊敬的国际品牌。同时,“不将就”也成为了一加的理念。

  现在应该对介绍mavlink官网的布局有所了解了吧。网页前面主要讲了各类数据的取值和含义,比如飞控类型(mav_autopilot),飞行器类型(mav_type)等,其中mav_cmd是比较特殊和重要的一种数据。网页的后半部分主要讲了mavlink消息的种类和数据组成,这里会用到各种数据,具体数据定义的可以回到前半部分去找。但是mavlink是个通用的通讯协议,不同的飞控支对mavlink支持方式不一样,一般都只支持一部分mavlink消息,还会自己扩展一些mavlink协议所没有定义的消息(pixhawk和apm都是如此),具体都以飞控代码为准。

  大概说说地面站和飞控的通讯流程,由于没看过地面站的代码,所以很可能有误,还望发评论指正!一般飞控在连接上地面站后都会主动向地面站发送心跳包,飞行器姿态,系统状态,遥控器信号等组成的数据流。各个数据都会以一定的频率发送,比如心跳包一般是1Hz,姿态信息会快些,pixhawk用数传连接QGC时的姿态数据发送频率在7-8Hz左右。一般地面站会在刚连接上飞控时发送命令,请求飞控传回所有参数(QGC就是这样),飞控根据自己的情况判断是否接受地面站的请求,并根据不同的命令执行相应的操作(有些命令需要飞控回复地面站确认信号)。之后地面站根据用户的操作会发送相应的mavlink消息给飞控,比如设置航点,改写飞控参数等。据说数传是半双工的(在同一时刻只能选择发送或者选择接受数据,不能同时收发数据),地面站和飞控之间如何避免数据冲突(即双方同时向对方发送消息)的机制笔者并不清楚,希望能抛砖引玉。

  的开发商开发了不同的通信方式。为了使通信成功可靠,网络中的所有主机都必须使用同

  本文在上两篇博客的基础上,介绍mavlink代码的结构和编解码流程。mavlink有很多的版本,虽然都是mavlink v1.0,但还是有很多不一样的地方,不同飞控,不同时间的mavlink文件都会不一样,笔者讲的mavlink是在这里下载的a href=。mavlink代码全部由头文件组成,可以很方便的添加到你自己的代码中。

  可以看到,里面有多个文件夹和几个头文件。pixhawk,ardupilotmega(apm),matrixpilot这类的文件夹里都是各个飞控自己定义的mavlink消息类型,原始的mavlink消息放在common文件夹里面(大部分消息都在common文件夹中)。checksum.h中存放的是计算校验码的代码。mavlink_helper.h里面是将各个消息包补充完整(调用checksum.h中的函数计算校验码并补上消息帧的头,比如sysid和compid等)成为mavlink消息帧再发送。最主要的功能集中在这两个文件夹中。mavlink_conversions.h里是dcm,欧拉角,四元数三种姿态表示方法之间的转换代码。

  下面以发送心跳包(heartbeat)为例,说明下如何使用mavlink头文件来发送心跳包。首先打开common文件夹中的mavlink_msg_heartbeat.h头文件。这个头文件可以分为两部分,一部分用来打包、发送heartbeat消息,另一部分用来接收到heartbeat消息时解码消息。heartbeat.h定义了heartbeat消息对应的数据类型:

  如果mavlink的发送方式可以使用(串口发送,函数接口也兼容),则可以调用 【1】

  其中的chan是channel的缩写,用于选择发送的串口或者usb口。type就是飞行器类型,其余参数不明的可以看看本博客的第一篇文章。

  该函数功能是将传入的各个参数按照对应的格式放到heartbeat消息包中(即打包)这个函数内部有一句预处理:

  是说是否使用额外的crc校验字符(默认使用),详情请看第一篇博客中对于两个校验字节的说明。

  这个函数位于mavlink_helper.h中,用于更新消息帧的编号(seq 每发送一帧加1)并将消息帧的头和计算校验码,使得成为完整的一个mavlink消息帧。最后调用串口发送函数进行消息帧的发送。

  网络通信的工作原理-教案_其它课程_高中教育_教育专区。高中信息技术选修《网络技术应用》第三章网络通信工作原理

  它会将收到的字符一个个进行解码,会检验收到的校验码是否正确;有效载荷的长度小于最大长度并且和该消息的长度一致。如果一切顺利,将会得到解码到的消息,放在解码得到的消息帧类型中

  其余的mavlink消息也是类似的,旧的mavlink代码中有些类型的消息类型可能会找不到,使用时要注意接受和发送方使用的mavlink版本是否兼容。common文件夹中的common.h里面包含了要用到的数据类型和所有消息的头文件,使用时直接包含进来即可。

  mavlink系列博客到此告一段落,请多指正。有错误欢迎回复评论,或联系我。