目的和范围
固件插件系统提供了一个固件抽象层,使 QGroundControl 能够通过统一的接口支持多种自动驾驶仪固件类型(PX4、ArduPilot 等)。该系统封装了特定于固件的行为、飞行模式、参数处理和功能,同时为 QGroundControl 的其他部分提供了一致的 API。
车辆管理和生命周期请参见车辆类别和多车辆管理。参数体系请参见事实体系和参数管理。
架构概述
固件插件系统遵循一种策略模式,其中不同的固件实现通过通用接口提供特定行为。每个车辆实例都与一个特定的固件插件相关联,该插件负责处理特定于固件的操作。
插件选择和实例化流程
核心插件接口
基FirmwarePlugin
类定义了所有固件实现必须遵循的契约。关键接口方法包括:
飞行模式管理
车辆性能和操作
插件系统定义了决定车辆支持哪些操作的功能标志:
能力 | 描述 |
---|---|
SetFlightModeCapability | 车辆支持改变飞行模式 |
PauseVehicleCapability | 车辆可以在当前位置暂停 |
GuidedModeCapability | 车辆支持引导模式命令 |
OrbitModeCapability | 飞行器支持轨道运行 |
TakeoffVehicleCapability | 车辆支持起飞指令 |
ROIModeCapability | 车辆支持感兴趣区域 |
ChangeHeadingCapability | 车辆可以在当前位置改变航向 |
GuidedTakeoffCapability | 车辆支持制导起飞 |
PX4 实现
实现PX4FirmwarePlugin
PX4 特定的行为和飞行模式:
PX4 特有功能
- 参数元数据:使用
PX4ParameterMetaData
类从 XML 加载参数定义 - 任务命令:支持全面的 MAV_CMD 命令,包括 VTOL 特定操作
- 引导模式:实现引导起飞、降落、前往位置和高度变化
- 版本检查:自动检查固件更新并通知用户
ArduPilot 实现层次结构
ArduPilot 采用两级层次结构,包含基础子类APMFirmwarePlugin
和特定于车辆的子类:
ArduPilot 特定功能
- MAVLink 消息处理:处理 ArduPilot 特定的消息怪癖和参数编码
- 流速率管理:配置遥测流速率以实现最佳数据流
- 组件检测:跟踪哪些组件属于 ArduPilot 堆栈的一部分,哪些属于配套计算机
- 校准消息:调整面向用户的校准消息的严重性
车辆集成
车辆在其整个生命周期内都会与固件插件进行交互:
关键集成点
- 车辆构造:插件是根据
MAV_AUTOPILOT
心跳MAV_TYPE
选择的 - 参数系统:插件提供用于参数验证和 UI 生成的元数据
- 飞行模式:插件在用户友好名称和 MAVLink 模式值之间进行转换
- 任务规划:插件定义支持的任务命令和覆盖
- 引导操作:插件实现特定于固件的引导模式行为
- 消息处理:插件可以调整传入/传出的 MAVLink 消息
消息处理和适配
固件插件系统处理固件堆栈之间 MAVLink 实现的差异:
消息流架构

关键处理示例
- APM 参数编码:从 ArduPilot 的非标准浮点编码转换参数值
- 状态文本严重性:降低 ArduPilot 校准消息的严重性,以防止用户中断
- 组件识别:跟踪哪些组件是 ArduPilot,哪些是配套计算机
- 流速率初始化:建立连接时配置遥测速率
扩展和定制
插件系统提供了几个用于添加新固件支持的扩展点:
核心扩展点
- 新的固件插件:继承
FirmwarePlugin
并实现虚拟方法 - 参数元数据:提供参数定义的 XML 元数据文件
- 任务命令覆盖:提供定义支持的任务命令的 JSON 文件
- UI 指示器:自定义工具栏指示器和状态显示
- 功能标志:定义固件支持的操作
自定义插件实现模式
固件插件系统的模块化设计允许 QGroundControl 支持不同的自动驾驶系统,同时保持一致的用户体验和代码库架构。