QGC代码解析之固件插件系统(七)

目的和范围

固件插件系统提供了一个固件抽象层,使 QGroundControl 能够通过统一的接口支持多种自动驾驶仪固件类型(PX4、ArduPilot 等)。该系统封装了特定于固件的行为、飞行模式、参数处理和功能,同时为 QGroundControl 的其他部分提供了一致的 API。

车辆管理和生命周期请参见车辆类别和多车辆管理。参数体系请参见事实体系和参数管理

架构概述

固件插件系统遵循一种策略模式,其中不同的固件实现通过通用接口提供特定行为。每个车辆实例都与一个特定的固件插件相关联,该插件负责处理特定于固件的操作。

插件选择和实例化流程

核心插件接口

FirmwarePlugin类定义了所有固件实现必须遵循的契约。关键接口方法包括:

飞行模式管理

车辆性能和操作

插件系统定义了决定车辆支持哪些操作的功能标志:

能力描述
SetFlightModeCapability车辆支持改变飞行模式
PauseVehicleCapability车辆可以在当前位置暂停
GuidedModeCapability车辆支持引导模式命令
OrbitModeCapability飞行器支持轨道运行
TakeoffVehicleCapability车辆支持起飞指令
ROIModeCapability车辆支持感兴趣区域
ChangeHeadingCapability车辆可以在当前位置改变航向
GuidedTakeoffCapability车辆支持制导起飞

PX4 实现

实现PX4FirmwarePluginPX4 特定的行为和飞行模式:

PX4 特有功能

  • 参数元数据:使用PX4ParameterMetaData类从 XML 加载参数定义
  • 任务命令:支持全面的 MAV_CMD 命令,包括 VTOL 特定操作
  • 引导模式:实现引导起飞、降落、前往位置和高度变化
  • 版本检查:自动检查固件更新并通知用户

ArduPilot 实现层次结构

ArduPilot 采用两级层次结构,包含基础子类APMFirmwarePlugin和特定于车辆的子类:

ArduPilot 特定功能

  • MAVLink 消息处理:处理 ArduPilot 特定的消息怪癖和参数编码
  • 流速率管理:配置遥测流速率以实现最佳数据流
  • 组件检测:跟踪哪些组件属于 ArduPilot 堆栈的一部分,哪些属于配套计算机
  • 校准消息:调整面向用户的校准消息的严重性

车辆集成

车辆在其整个生命周期内都会与固件插件进行交互:


关键集成点

  1. 车辆构造:插件是根据MAV_AUTOPILOT心跳MAV_TYPE选择的
  2. 参数系统:插件提供用于参数验证和 UI 生成的元数据
  3. 飞行模式:插件在用户友好名称和 MAVLink 模式值之间进行转换
  4. 任务规划:插件定义支持的任务命令和覆盖
  5. 引导操作:插件实现特定于固件的引导模式行为
  6. 消息处理:插件可以调整传入/传出的 MAVLink 消息

消息处理和适配

固件插件系统处理固件堆栈之间 MAVLink 实现的差异:

消息流架构

关键处理示例

  • APM 参数编码:从 ArduPilot 的非标准浮点编码转换参数值
  • 状态文本严重性:降低 ArduPilot 校准消息的严重性,以防止用户中断
  • 组件识别:跟踪哪些组件是 ArduPilot,哪些是配套计算机
  • 流速率初始化:建立连接时配置遥测速率

扩展和定制

插件系统提供了几个用于添加新固件支持的扩展点:

核心扩展点

  1. 新的固件插件:继承FirmwarePlugin并实现虚拟方法
  2. 参数元数据:提供参数定义的 XML 元数据文件
  3. 任务命令覆盖:提供定义支持的任务命令的 JSON 文件
  4. UI 指示器:自定义工具栏指示器和状态显示
  5. 功能标志:定义固件支持的操作

自定义插件实现模式

固件插件系统的模块化设计允许 QGroundControl 支持不同的自动驾驶系统,同时保持一致的用户体验和代码库架构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值