MAVLink的全称是Micro Air Vehicle Link(微型航空器链接)。它是一种轻量级通信协议,主要用于无人机和其他小型飞行器的数据交换。这个协议设计得非常高效,适用于资源受限的系统,并且能够通过串行通信或者无线网络(如Wi-Fi或无线电)传输控制指令和传感器数据。
Mavlink消息(我们称之为'msg')是由任务规划器(MP),也就是地面站控制(GCS),编码后通过USB串行或遥测(就是遥控器)发送给飞行器的飞控软件(APM(或者PX4)的字节流。编码只是将数据放入数据帧中,并通过通道以字节形式发送,同时添加一些错误校正。
每个message是由一系列消息帧frame组成,帧的数据结构就是byte数组,每个帧的结构如下:
最前面6个字节(0-5)是消息头
消息头后面是可变长度0-255个字节的传输数据payload
最后两个字节是校验和。
单个消息不超过263字节(Mavlink版本1.0)或280字节(Mavlink版本2.0)。
发送方始终填写系统ID和组件ID字段,以便接收方知道数据包的来源。
系统ID是每个飞行器或地面站的唯一ID。地面站通常使用较高的系统ID,如“255”,而飞行器默认使用“1”()。地面站或飞行控制器的组件ID通常为“1”。飞行器上的其他支持MAVLink的设备(如伴侣计算机、云台)应使用与飞行控制器相同的系统ID,但使用不同的组件ID。
消息ID字段表示消息的类型,可以在common.xml和ardupilot.xml中看到。例如,HEARTBEAT消息的ID是“0”。以下举例三种最常见的消息类型:
1) MAVLINK_MSG_ID_HEARTBEAT: 0
a. 这是最重要的信息。GCS 不断向 APM/PX4 发送消息(每 1 秒一次),以确定是否与之连接。这是为了确保在您更新一些参数时,MP 与 APM 同步。如果错过一定数量的心跳,就会触发故障安全(机制),然后直升机降落、继续执行任务或者返航(也称为 RTL)。故障安全选项可以在 MP 中的配置/设置故障安全选项中启用/禁用。但一般不会禁用。
2) MAVLINK_MSG_ID_REQUEST_DATA_STREAM: 66
传感器、遥控通道、GPS位置、状态等等数据
3)MAVLINK_MSG_ID_COMMAND_LONG: 76
表示消息是对无人机的操作命令,比如悬停、返回、着陆、任务开始、上/下动力(Arm/Disarm)、重启等等。
不要误会,Arm/Disarm和武器没有关系。这个命令用于启用或禁用飞行器的动力系统。"Arm" 表示启用动力系统,准备起飞;而"Disarm" 表示禁用动力系统,防止意外起飞。
最后,说一下常见的自动驾驶仪软件系统
APM(ArduPilot Mega)和PX4(Proton eXtended 4)都是开源的自动驾驶仪软件系统,用于控制无人机、机器人和其他无人驾驶车辆。它们提供了丰富的功能,包括飞行控制、导航、传感器融合等,并且可以在多种硬件平台上运行。
APM(ArduPilot Mega)
● 用途:主要用于固定翼飞机、多旋翼无人机和地面车辆。
● 开发语言:C/C++。
● 社区支持:拥有庞大的开发者和用户社区,提供丰富的教程和文档。
● 特点:支持多种传感器(如IMU、GPS、气压计等)。
● 提供多种飞行模式(手动、稳定、定高、自驾等)。
● 可以通过地面站软件(如Mission Planner)进行配置和监控。
PX4
● 用途:主要用于多旋翼无人机和固定翼飞机。
● 开发语言:C/C++。
● 社区支持:同样拥有庞大的开发者和用户社区,提供详细的文档和教程。
● 特点:支持广泛的硬件平台(如Pixhawk系列、NuttX RTOS)。
● 强大的传感器融合算法,提高飞行稳定性。
● 提供API接口,便于集成到其他应用中。
二者的主要区别
● 架构:APM使用的是模块化的架构,而PX4采用的是更现代的微服务架构。
● 传感器融合:PX4的传感器融合算法更为先进,能够提供更高的精度和稳定性。
● 扩展性:PX4在扩展性和可配置性方面更具优势,更适合复杂的应用场景。
● 用户界面:APM提供了较为友好的地面站软件(如Mission Planner),而PX4则依赖于QGroundControl等第三方地面站软件。