PX4飞控开发基础之Mavlink 协议
协议介绍
MAVLink协议是一种用于与小型无人机通信的消息协议。它在无人机行业中得到了广泛应用,特别是在基于PX4飞行控制软件的系统中。MAVLink专为无人机通信设计,它轻巧简洁,但在带宽有限的环境中非常有效。
PX4是一种开源的飞行控制软件,适用于无人机和其他无人车辆,MAVLink充当主要通信协议,用于飞行控制器(运行PX4)与任何地面控制站(GCS),如QGroundControl,以及飞行控制器与机载组件(如传感器和执行器)之间的通信,还用于遥测和任务控制。
Mavlink现在最新版本是2.0,它的数据结构可以参见:https://mavlink.io/en/about/overview.html
PX4中MAVLink的关键特性:
- 标准化消息集:MAVLink定义了一整套消息,用于各种动作和数据,如车辆状态、GPS坐标和指令操作。这种标准化促进了不同地面控制站和硬件之间的互操作性。
- 轻量级:该协议被设计得尽可能轻量,这对于无人车辆操作中典型的高延迟或低带宽通信渠道至关重要。
- 可扩展性:尽管MAVLink附带了一套标准消息,但它也被设计为可扩展的,允许开发人员为特定需求定义自定义消息,而不会破坏对标准集的兼容性。
- 校验和以确保可靠性:每个MAVLink消息都包含一个校验和,用于错误检测,以确保数据传输的完整性,在错误数据可能导致严重故障的无人车辆操作中,这一点至关重要。
- 序列号用于丢失检测:MAVLink对每个数据包使用序列号,使系统能够检测到丢失的数据包,并确保系统可以请求重新传输丢失的信息。
- 兼容性:MAVLink支持多种类型的通信链路,包括串行、UDP和TCP,使其适用于PX4系统中不同的通信设置。
- 双向通信:MAVLink允许飞行控制器与地面站或机载组件之间的双向通信,不仅可以监视车辆状态,还可以实时控制车辆。
- MAVLink库 :有各种编程语言的MAVLink库,使将MAVLink通信集成到广泛的系统和应用程序中变得更加容易。
- 参数协议:MAVLink包括一个参数管理协议,允许从地面控制站远程配置车辆的参数。
总的来说,MAVLink在PX4生态系统中发挥着至关重要的作用,通过促进无人车辆的通信、控制和配置,从而增强了它们的能力和性能。
PX4飞控集成
- PX4中的MAVLink :PX4使用MAVLink与地面站(如QGroundControl)以及其他组件(如伴随计算机和相机)通信。协议定义了数据交换的标准消息和微服务,其中许多已在PX4中实现。
- 自定义MAVLink消息 :如果您需要在PX4中添加对新的“自定义”消息的支持,您可以。这包括在PX4固件中创建一个自定义uORB消息,定义一个自定义MAVLink消息,然后修改固件以处理这种新的消息类型。
- 定义自定义消息:定义新的消息并将它们构建到特定于编程的库中。消息在XML文件中定义,这些文件描述了MAVLink系统支持的消息集,称为“方言”。定义消息后,您可以使用Python工具生成MAVLink头文件。
- 发送自定义MAVLink消息 :通过在代码中包含必要的头文件并在
mavlink_messages.cpp
中为消息创建一个新类,将自定义uORB消息与MAVLink集成。您需要为自定义消息类型实现几种方法,以便它能够通过MAVLink发送。 - 流式传输MAVLink消息 :对于您想要定期发送的数据(如电池状态或传感器读数),您将创建一个从
MavlinkStream
派生的流式类。这涉及到实现几种方法,以提供PX4从您的自定义MAVLink消息定义所需的信息。
记住,如果您使用自定义定义,您需要在PX4、地面站和任何其他与您的无人机通信的SDK中维护这些定义。通常建议使用或添加到标准定义中,以减少维护工作。
参考链接
https://mavlink.io/en/getting_started/generate_libraries.html
https://diydrones.com/group/arducopterusergroup/forum/mavlink-tutorial-for-absolute-dummies-part-i
回到教程目录:Kerloud飞控系列教程(1):目录