六、外部通讯总线MAVLink服务

笔记来源于:无人机中级篇:第十四讲:外部通信总线Mavlink服务

官网:MAVLink 通讯


 

MAVLink 是一个针对无人机生态系统设计的非常轻量化的消息传递协议。

PX4 使用 MAVLink 实现与 QGroundControl (或者其它地面站软件)的通讯交流,同时也将其用于整合飞控板与飞控板之外的无人机部件:伴随计算机、支持 MAVLink 的摄像头等。

官网上有介绍到如何创建自定义MAVLink的消息!还有如何实例和用法在界面中:mavlink

 

Mavlink为无人机与外部通信的接口,在mavlink文件夹中的内容是mavlink协议所要用的头文件内容,实际上就是mavlink各类协议的定义部分和公共调用函数部分。

文件夹中的内容如下:

六、外部通讯总线MAVLink服务

注意!!!在此文件夹中所存放的只是Mavlink协议的头文件和公共调用函数,而不是飞控与地面站通信的功能实现。目前Mavlink的版本为2.0,在mavlink/include/mavlink/v2.0中定义了此版本中所有的头文件。common文件夹中以mavlink_msg_开头的文件,都是Mavlink的消息,目前的支持的消息有164个。

Mavlink服务是无人机与外部系统通信的数据总线源代码位置在src/modules/mavlink中。

其目录文件列表如下:

六、外部通讯总线MAVLink服务

主要包括发送和接收两个大的方向:

  • 在发送功能中飞控程序将无人机当前的主状态、导航状态、姿态、速度、位置等信息发送给地面站程序,以便地面站程序能够实时了解无人机的状态。
  • 于此同时,地面站程序可以向飞机发送特定的指令和飞行航线,例如:对飞控锁定/解锁、切换飞行状态、上传飞行任务航迹点等。数据在飞控和地面站交互数据的过程都是通过Malvink协议来完成的。
  1. MavlinkStream是所有周期下发消息类的基类:定义了整个周期下发消息统一格式,包括消息ID、消息名称、消息大小、发送频率、最近发送时间、实际发送函数等等。而其它实际消息都继承了MavlinkStream类。在实际消息发送时使用MavlinkStream的指针对象指向每一个实际的子类对象,然后通过这个指针来统一发送消息。
  2. MavlinkReceiver负责接收消息:从底层链路读取数据解析Mavlink消息数据处理一般消息和命令;处理任务相关消息;处理参数相关消息;处理文件传输协议等相关内容。在消息接收过程中,MavlinkReceiver并没有将消息转换为具体的不同类型的消息,而是直接将消息交给不同的业务功能自行处理。
  3. MavlinkMissionManager:主要用于地面站与飞控之间传输任务之间相关数据,包括航迹点、电子围栏点、集结点等相关内容。包括任务信息的上传与下载。通常情况下在无人机起飞前需要使用地面站程序规划一系列的自动飞行任务航迹点,并通过Mavlink消息将这些任务信息点上传到飞控当中。飞控会接收这些航迹点并将其保存到SDCard当中,为飞行时使用。另外,地面站还可以根据需要将飞控中已经保存好的所有任务点下载到本地。接收地面站请求任务数据,向地面站发送任务数据,将任务数据保存到SDCard当中,或从SDCard中读取任务数据。
  4. MavlinkParametersManager:主要负责处理地面站向飞控发送参数读写的相关功能。主要分为3个部分:处理参数请求列表、设置参数、读取参数。
  5. MavlinkFTP:是一个文件传输服务,负责处理所有地面站向飞控传输的文件相关操作,包括文件夹的创建,删除,显示列表和文件的创建,读写,删除等等一系列功能。地面站程序在使用MavlinkFTP服务时可以将飞控程序当作一个文件操作服务器,向其发送相应的指令,服务器即为地面站返回相应的数据内容。