mavlink消息帧里最重要的两个东西,一个是msgid;一个是payload

2023-05-16

mavlink消息帧里最重要的两个东西,一个是msgid;一个是payload

在这里也可以看出

https://blog.csdn.net/sinat_16643223/article/details/108913150

摘自:https://blog.csdn.net/u013068887/article/details/79322689

这篇博客主要介绍了mavlink的消息组成和如何看懂繁杂的mavlink官网介绍以及简单介绍了下地面站与飞控的通讯流程。

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

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

                      

 

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

                                                                  

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

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

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

另外,Pixhawk的模式和apm的有很大的不同,具体请看官网介绍https://pixhawk.org/users/system_modes,里面还有关于遥控器如何设置模式的教程链接https://pixhawk.org/users/system_modes/mode_switch_config。用QGroundControl地面站(以后简称QGC,下载地址http://qgroundcontrol.org/downloads)的图形界面来设置飞行模式的功能很鸡肋,建议直接在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中,前两个字节(低位)是保留的,没有用,第三个字节是主模式,第四个字节是子模式。普通用户请无视,开发者请注意:官网给出的通过程序设置模式的代码是错误的。如图,最后一行代码有误,应该为:

[cpp]  view plain  copy

 

  1. uint32_t custom_mode = (main_mode<< 16) | (sub_mode << 24);  

 

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

第六个是mavlink版本(mavlink version),现在是“3”版本。

 

其余的消息也是类似的结构,各个数据的定义可以查看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对参数的描述不够具体。

 

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

 

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

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

mavlink消息帧里最重要的两个东西,一个是msgid;一个是payload 的相关文章

  • iNavFlight之电传MAVLink协议

    iNavFlight之电传MAVLink协议 1 业务逻辑框架2 MAVLink电传报文2 1 MAVLink电传报文格式2 2 iNav支持地面站报文 接收 2 3 iNav支持飞控报文 发送 3 MAVLink报文处理4 参考资料 本章
  • PX4模块设计之四十七:mavlink模块

    PX4模块设计之四十七 xff1a mavlink模块 1 mavlink模块简介2 模块入口函数mavlink main3 mavlink模块重要函数3 1 Mavlink start3 2 Mavlink task main3 3 Ma
  • 【无人机开发】通讯协议MavLink详解

    摘自 xff1a https blog csdn net myboyer article details 81109991 1 MAVLink简介 MAVLink xff08 Micro Air Vehicle Link xff0c 微型空
  • Ardupilot飞控Mavlink代码学习

    摘自 xff1a https blog csdn net lixiaoweimashixiao article details 80919995 Ardupilot飞控Mavlink代码学习 魔城烟雨 2018 07 05 23 36 33
  • xss payload

    gt lt SCRIPT gt alert 34 hello 34 lt SCRIPT gt 转载于 https www cnblogs com fanzi2009 archive 2009 08 13 1545474 html
  • MavLink

    2 1 MAVLink xff08 Micro Air Vehicle Link xff09 是一种用于小型无人载具的通信协议 xff0c 于2009年首次发布 该协议广泛应用于地面站 xff08 Ground Control Statio
  • 飞控接收到的每一条MAVLink消息包都会上传到uORB消息池中吗?

    1 飞控接收到的每一条MAVLink消息包都会上传到uORB消息池中吗 xff1f 2 如何自定义 xff08 选择 配置 xff09 发送给QGC的MAVLink消息 xff1f
  • PX4自定义mavlink消息

    PX4自定义mavlink消息 承接前面UORB发布消息 xff0c 然后现在要使用mavlink发布消息 xff0c 然后通过433MHz进行无线传输 这个阶段对我来说异常艰难 xff0c 我个人傻傻看了2天mavlink配置文件 xff
  • 新建Mavlink消息

    1 下载Mavlink生成器 1 1 Git clone 需要在翻墙的网络环境下下载 span class token function git span clone https github com mavlink mavlink git
  • QGC添加自定义组件和发送自定义MAVLINK消息

    QGC添加自定义组件和发送自定义MAVLINK消息 一 添加自定义组件1 1 在飞行界面添加组件1 2 实现组件事件1 3 在MOCK模拟链接中实现验证1 4 验证 二 自定义MAVLINK消息的一些预备知识三 QGC自定义MAVLINK消
  • wifi数传组网之精简mavlink

    1 无人机集群测绘在同一地点同一时间采集一片区域的多光谱数据 xff0c 经过后期的处理可得到该区域的植被生长情况 xff0c 本文就是讨论和测试利用wifi数传组网的机制实现多台的无人机集群 xff0c 组网内的无人机能够单独的进行控制
  • ardupilot之mavlink消息--从飞控发出--单向

    飞控采用mavlink消息进行数据的传输 普遍说法是 xff0c 现有的mavlink消息几乎已经涵盖了所有你的能想象到的内容 xff0c 完全可以覆盖多处需求 无奈科研总是要定义一些新鲜玩意 xff0c 所以总是有无法完全满足需求 xff
  • MAVLink代码

    MAVLink是一种通信协议 xff0c 用于在微型无人机 MAV 和其他系统之间进行通信 它是一种二进制消息格式 xff0c 用于在无人机和地面站之间传送数据 MAVLink代码通常用于编写无人机的固件或为无人机开发地面站软件 它也可以用
  • 在ubuntu上安装mavlink-router

    版本说明 xff1a ubuntu 20 0 04 mavlink router 2 为了安装mavlink router 需要预先安装一些依赖库 xff1a autoconf libtool python future python3 f
  • 【2020-8-9】APM,PX4,GAZEBO,MAVLINK,MAVROS,ROS之间的关系以及科研设备选型

    0 概述 无人机自主飞行平台可以分为四个部分 xff1a 动力平台 xff0c 飞行控制器 xff0c 机载电脑和模拟平台 动力平台 xff1a 负责执行飞行任务 xff0c 包括螺旋桨 电机 机架等 xff0c 用于科研的一般都是F380
  • DroneKit教程(五):使用自定义MAVLink指令

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

    XSS总结 xss分为三种 反射型xss DOM型XSS及存储型XSS 不同类型的XSS的危害不同 有兴趣的可以观看一下csdn上明智讲的关于XSS攻击及原理 https edu csdn net course detail 8585里面的
  • 如何计算android gcm有效负载长度

    在android GCM文档中 据说有效负载的限制为4096字节 但是 我发现我可以发送 16834 个字节的有效负载 我做错了吗 我计算长度如下 Map
  • php cURL CURLOPT_VERBOSE 不显示有效负载

    虽然curl 的以下输出提供了有用的标头信息 但它不提供有效负载信息 例如 我想在提供的调试信息中看到 jason index json value 1 是否可以以详细模式内联显示有效负载 2 查看 cURL 处理的发送有效负载的最佳方式是
  • 在 Objective-C 中为 POST HTTP 请求生成 JSON 负载

    有没有人有任何示例代码来创建 JSON 有效负载以作为 Objective C 中的 HTTP POST 请求发送 我希望生成的 json 有效负载示例如下 metadata Uri NewLoc Type Location NewLoc

随机推荐