☰
QGroundControl ArduPilot 失效保护(Failsafes)配置完全指南
2026/10/13 1:44:56 网站建设 项目流程
  • 无人机
  • 智能硬件

【免费下载链接】qgroundcontrol

Cross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)

项目地址:https://gitcode.com/gh_mirrors/qg/qgroundcontrol
点击查看免费下载

本篇技术指南以 QGroundControl 用户手册中 ArduPilot Failsafes 配置页 为骨架,系统讲解电池、地面站(GCS)、油门(Throttle)、EKF 及其他失效保护项的配置方法与底层参数映射。读完本文,你将掌握 Copter / Plane / Rover / Submarine 四类 ArduPilot 机型的失效保护差异、每个配置项对应的飞控参数(如FS_GCS_ENABLE、FS_THR_ENABLE、FS_EKF_ACTION等),并能依据 QGroundControl 源码理解这些配置是如何在“设置 → 失效保护(Failsafes)”页面中动态生成与展示的。

Failsafes 页面概述

Failsafes(失效保护)页面用于配置当关键系统发生故障时自动触发的安全动作。其核心设计思想是:当检测到电池电量不足、地面站心跳丢失、RC 油门信号丢失或导航状态估计不可靠等异常情况时,由飞控自动执行预定义的安全动作(如 RTL 返航、Land 降落、Hold 悬停),而不是依赖操作员的临场反应。

可用的失效保护选项因机型而异:四旋翼类(multiRotor)机型可配置电池、GCS、RC/Throttle、EKF 与 Dead Reckoning 失效保护;固定翼(Plane)机型关注电池、GCS 与油门失效保护;地面车(Rover)机型可配置电池、GCS、Throttle、EKF 与 Crash Check;潜艇(Submarine)机型则额外支持漏水检测与环境温度/压力限制。

页面入口与组件实现

从源码结构看,该页面由 ArduPilot 自动驾驶插件中的独立组件承载:

  • 组件类定义:APMFailsafesComponent.h(组件名为 “Failsafes”,requiresSetup() == false、setupComplete() == true,即不强制要求完成配置)
  • 组件实现:APMFailsafesComponent.cc
  • 页面 UI 描述:APMFailsafes.VehicleConfig.json(QGroundControl 通过该 JSON 声明式生成实际设置页)
  • 组件注册:APMAutoPilotPlugin.cc 在vehicleComponents()中为每台 ArduPilot 飞行器创建APMFailsafesComponent实例

APMFailsafesComponent::description()按机型返回不同说明文案,正好对应文档所述的机型差异:

机型(MAVLink 类型)组件说明
Submarine配置失效保护动作与漏水检测(leak detection)
Ground Rover配置电池、GCS、Throttle、EKF 失效保护
Fixed Wing配置电池、GCS、Throttle 失效保护
其他(Copter 等)配置电池、GCS、RC、Throttle、EKF 与 Dead Reckoning 失效保护

此外,allowSetupWhileArmed()与allowSetupWhileFlying()均返回true,说明该页允许在飞行器已解锁(armed)甚至飞行过程中打开查看——这与setupComplete()恒为true的设计一致:失效保护属于“随时可查阅与微调”的安全配置,而非一次性校准步骤。

Battery Failsafe(电池失效保护)

电池失效保护用于在电池电压或剩余容量跌破阈值时执行安全动作。若飞行器配备多块电池(通过 Power 设置页 启用),QGroundControl 会为每块电池分别显示一套相同的配置面板。

配置项

配置项对应飞控参数说明
Low action(低电量动作)BATT_FS_LOW_ACT电池达到低电量水平时的动作(RTL / Land / SmartRTL 等)
Critical action(严重低电量动作)BATT_FS_CRT_ACT电池达到严重低电量水平时的动作
Low voltage threshold(低电压阈值)BATT_LOW_VOLT触发“低电量动作”的电压值
Critical voltage threshold(严重低电压阈值)BATT_CRT_VOLT触发“严重低电量动作”的电压值
Low mAh threshold(低容量阈值)BATT_LOW_MAH触发“低电量动作”的剩余容量值(mAh)
Critical mAh threshold(严重低容量阈值)BATT_CRT_MAH触发“严重低电量动作”的剩余容量值(mAh)

界面生成机制(源码印证)

在 APMFailsafes.VehicleConfig.json 中,Battery Failsafe 区块使用"repeat"声明按电池序号循环生成面板:

"repeat": { "paramPrefix": "BATT", "probePostfix": "MONITOR", "indexing": "apm_battery", "enableParam": "MONITOR", "disabledParamValue": "_monitorParamValueDisabled" }

其含义是:以BATT为参数前缀探测BATT_MONITOR(第一块电池)、BATT2_MONITOR(第二块电池)等参数是否存在且值非 0,只有启用了电池监控的电池才会显示对应的失效保护面板。这一逻辑在摘要组件 APMFailsafesComponentSummary.qml 中同样可见:

property Fact _batt1Monitor: controller.getParameterFact(-1, "BATT_MONITOR") property Fact _batt2Monitor: controller.getParameterFact(-1, "BATT2_MONITOR", false /* reportMissing */) property bool _batt2MonitorAvailable: controller.parameterExists(-1, "BATT2_MONITOR") property bool _batt1MonitorEnabled: _batt1Monitor.rawValue !== 0 property bool _batt2MonitorEnabled: _batt2MonitorAvailable && _batt2Monitor.rawValue !== 0

每个电池区块内的控件(Low/Critical action 下拉框、电压/容量阈值输入框)均标记为"optional": true,并用showWhen: controller.parameterExists(-1, ...)条件控制显示——只有当对应参数在当前飞控固件中真实存在时才渲染该控件。

实操建议

  • 电压阈值应低于电池空载电压、高于保护板截止电压,并预留安全余量;容量(mAh)阈值按实际放电曲线整定,两者可以同时启用,任一条件先触发即生效。
  • 依据姊妹文档 Safety Setup(ArduPilot),阈值设为 0 可以禁用对应的触发条件。
  • 动作选项随固件/机型略有差异:Copter 常见选项包括 None、Land、RTL、SmartRTL、SmartRTL or Land、Terminate 等;Plane 的低/严重动作通常为 None、RTL、Land、Terminate。
  • 建议同时阅读 Flight Safety(ArduPilot) 中关于 RTL 高度、返航盘旋与最终降落高度的配置,使电池失效保护触发的 RTL 行为符合预期。

Ground Station Failsafe(地面站失效保护)

地面站失效保护在GCS 心跳(heartbeat)丢失时触发,用于应对数传链路中断或地面站软件崩溃等场景。不同机型的配置差异如下:

配置项Copter / RoverPlane
启用开关FS_GCS_ENABLEFS_GCS_ENABL(注意:无末尾 E,ArduPilot 原始参数名)
超时时间FS_GCS_TIMEOUT(Copter 与 Rover 均适用)由飞控内部逻辑决定
触发方式—Heartbeat only / Heartbeat + RSSI / Heartbeat + AUTO mode

各机型的具体配置

Copter(showWhen: controller.vehicle.multiRotor):启用后(写入FS_GCS_ENABLE = 1),可配置超时FS_GCS_TIMEOUT以及动作选项,选项枚举值在 VehicleConfig JSON 的constants中定义:

枚举值动作
1RTL
3SmartRTL or RTL
4SmartRTL or Land
5Land
6Auto DO_LAND_START or RTL
7Brake or Land

Plane(showWhen: controller.vehicle.fixedWing):FS_GCS_ENABL参数即触发方式本身:

枚举值触发方式
1Heartbeat(仅心跳丢失触发)
2Heartbeat and Remote RSSI(心跳丢失且 RSSI 过低)
3Heartbeat and AUTO(仅 AUTO 模式下心跳丢失触发)

Rover(showWhen: _roverFirmware,以MODE1参数存在与否判定):启用后同样配置FS_GCS_TIMEOUT,并可通过FS_GCS_ENABLE = 2选择“在 Auto 模式下忽略失效保护”,还可通过FS_OPTIONS位掩码的 bit 1 选择“在 Hold 模式下忽略”。

忽略条件(FS_OPTIONS 位掩码)

在支持FS_OPTIONS参数的固件上(VehicleConfig 中通过"existsOnly": true探测),各机型页面会显示“Ignore failsafe if”(满足以下条件时忽略)复选项:

位(bitMask)含义应用场景
1In Auto modeCopter Throttle / Rover GCS / Rover Throttle / Copter RC
2In Auto mode(GCS)Copter GCS
4In Guided modeCopter RC / Throttle
8Landing(着陆过程中)Copter Throttle / EKF / Dead Reckoning
16In pilot controlCopter GCS
32Release gripper on any failsafeCopter 其他选项

Throttle Failsafe(油门失效保护)

油门失效保护在RC 接收机油门信号丢失(或 PWM 值跌破阈值)时触发,用于应对遥控器关机、超出遥控距离或接收机故障。核心配置是 PWM 阈值与触发后的动作。

Copter 与 Rover

  • Enabled(FS_THR_ENABLE):Copter 启用时写入动作枚举值,禁用写 0;Rover 启用写 1(_roverFsParamValueEnabled)。
  • PWM threshold(FS_THR_VALUE):当油门通道 PWM 值低于该阈值时判定信号丢失。
  • Copter 动作(FS_THR_ENABLE枚举):Always RTL(1)、Always Land(3)、Always SmartRTL or RTL(4)、Always SmartRTL or Land(5)、Auto DO_LAND_START or RTL(6)、Always Brake or Land(7)。
  • Rover 动作(FS_ACTION枚举):Nothing(0)、RTL(1)、Hold(2)、SmartRTL or RTL(3)、SmartRTL or Hold(4)、Terminate(5)、Loiter or Hold(6);另有FS_TIMEOUT超时参数。

Plane(固定翼)

固定翼的油门失效保护使用独立参数体系,配置项更多:

配置项对应参数说明
Throttle PWM threshold 启用THR_FAILSAFE设为 1 启用
PWM thresholdTHR_FS_VALUE触发油门失效保护的 PWM 阈值
Short failsafe actionFS_SHORT_ACTN信号短暂丢失(短超时)时的动作
Long failsafe actionFS_LONG_ACTN信号持续丢失(长超时)时的动作
Long failsafe timeoutFS_LONG_TIMEOUT判定“长期丢失”的超时时间
VTOL transition failure actionQ_TRANS_FAIL_ACTVTOL 机型过渡失败时的动作
VTOL transition failure timeoutQ_TRANS_FAILVTOL 过渡失败判定超时

RC Failsafe(多旋翼专属)

在 VehicleConfig JSON 中,多旋翼机型还有独立的 “RC Failsafe” 区块(showWhen: controller.vehicle.multiRotor),标注为 “Always enabled”(始终启用,不可关闭),仅提供忽略条件:In Auto mode(bit 1)、In Guided mode(bit 4)、Landing(bit 8)。

EKF Failsafe(EKF 失效保护)

EKF(扩展卡尔曼滤波器)失效保护在EKF 对位置/速度的估计变得不可靠时触发,典型场景是 GPS 信号严重退化、罗盘/加速度计数据异常导致导航解算发散。

配置项对应参数说明
EKF failsafe actionFS_EKF_ACTION触发时的动作(Land / AltHold / Hold 等)
EKF variance thresholdFS_EKF_THRESHEKF 方差水平,超过即触发失效保护

动作选项差异(Copter vs Rover)

Copter(showWhen: controller.vehicle.multiRotor):

枚举值动作
1Land if position required(需要位置时才降落)
2AltHold if position required(需要位置时进入 AltHold 高度保持)
3Land from all modes(所有模式下均降落)

启用开关写入FS_EKF_ACTION = 1,禁用写 0;启用后显示FS_EKF_THRESH阈值输入框,并可配置“Landing”位忽略条件。

Rover(showWhen: _roverFirmware):

枚举值动作
1Hold(原地保持)
2Report only(仅上报,不干预)

其他失效保护(Other Failsafes)

依据机型不同,Failsafes 页面还会出现以下额外区块:

Dead Reckoning(Copter,多旋翼)

当 GPS 丢失后飞控进入“航位推算”状态,若推算持续时间过长则触发失效保护。在 JSON 中以showWhen: controller.vehicle.multiRotor && controller.parameterExists(-1, "FS_DR_ENABLE")控制显示,即仅当固件支持FS_DR_ENABLE参数时出现:

  • 启用开关:FS_DR_ENABLE(启用写 1)
  • Timeout:FS_DR_TIMEOUT
  • Action 枚举:Land(1)、RTL(2)、SmartRTL or RTL(3)、SmartRTL or Land(4)、Auto Land/Return or RTL(6)

Crash Check(Copter / Rover)

  • Copter:FS_CRASH_CHECK复选框,用于检测并响应坠机(如自动解锁/停机)。
  • Rover:启用后(写 1)可选动作:Hold(1)、Hold and Disarm(2,保持并解锁)。

Vibration(多旋翼)

FS_VIBE_ENABLE复选框,用于检测过度振动。若飞控持续监测到超过阈值的振动,可判定为螺旋桨/电机故障等机械问题并触发安全动作。

Leak Detection(Submarine,潜艇)

潜艇固件在摘要组件 APMFailsafesComponentSummarySub.qml 中暴露以下参数,对应文档所述的漏水与环境限制配置:

  • FS_LEAK_ENABLE:漏水检测失效保护(可配置检测引脚与“干燥时逻辑电平”:Low / High)
  • FS_TEMP_ENABLE:内部温度失效保护(环境温度上限)
  • FS_PRESS_ENABLE:内部压力失效保护(环境压力限制)
  • FS_PILOT_INPUT:飞行员输入失效保护(早期固件 3.5 以下不支持,QML 中以_firmware34判断隐藏)

依据 Safety Setup(ArduPilot) 中对 Sub 机型的说明,上述动作典型选项为:GCS Heartbeat(Disabled / Warn only / Disarm / Enter depth hold / Enter surface)、Leak(Disabled / Warn only / Enter surface mode)、Battery、EKF(Disabled / Warn only / Disarm)、Pilot Input、Internal Temperature(Disabled / Warn only)、Internal Pressure(Disabled / Warn only)。

Gripper 联动(多旋翼)

FS_OPTIONS位掩码 bit 32 可配置“在任意失效保护触发时释放抓爪(Release gripper on any failsafe)”,适用于搭载投放机构的机型。

页面如何工作:从 JSON 到 UI 的声明式渲染

理解 Failsafes 页面的底层机制,对排查“为什么页面上看不到某个选项”很有帮助。整个页面由 APMFailsafes.VehicleConfig.json 声明式驱动,而非硬编码 QML 控件:

  1. 参数映射(params 段):为每个配置项定义与飞控参数名的绑定关系,例如"_copterGcsEnable": "FS_GCS_ENABLE"、"_planeThrFailsafe": "THR_FAILSAFE"、"_roverFsAction": "FS_ACTION"。注意 Copter 与 Plane 的 GCS 参数拼写不同(FS_GCS_ENABLEvsFS_GCS_ENABL),这是 ArduPilot 固件的原始命名差异。
  2. 条件绑定(bindings 段):用表达式计算各区块的启用状态,例如"_copterGcsEnabled": "_copterGcsEnable && _copterGcsEnable.rawValue !== 0"、"_planeThrEnabled": "_planeThrFailsafe && _planeThrFailsafe.value === _planeThrFsParamValueEnabled"。
  3. 区块与控件(sections 段):每个 section 用showWhen指定适用机型,控件类型包括combobox(下拉)、radiogroup(单选)、toggleCheckbox(开关)、checkbox、bitmaskCheckbox(位掩码复选)与label(说明文字)。大量控件带有"optional": true,配合showWhen: controller.parameterExists(...)实现“固件不支持该参数就不显示”的自适应渲染。
  4. 摘要展示:设置页顶部的摘要行(Summary)由 APMFailsafesComponentSummary.qml(普通机型)与 APMFailsafesComponentSummarySub.qml(Submarine)渲染,通过enumStringValue将参数原始值转换为可读的枚举文本。

因此,如果某个失效保护选项在你的页面上不可见,通常是三种原因之一:当前机型不匹配该区块的showWhen条件、固件不包含对应参数(parameterExists为假)、或电池监控未启用(BATT_MONITOR = 0)导致电池面板不显示。

配置注意事项

  1. 机型决定选项:先确认飞控固件对应的机型类型(Copter / Plane / Rover / Sub),不同机型即使名称相同的失效保护,其参数名与动作枚举也可能不同(如 GCS 的FS_GCS_ENABLE与FS_GCS_ENABL、EKF 动作的 Land/AltHold 与 Hold/Report only)。
  2. 阈值置 0 即禁用:电池电压/容量阈值可设为 0 以关闭对应触发条件,避免误触发。
  3. 忽略条件按需启用:FS_OPTIONS位掩码允许在特定飞行阶段(Auto / Guided / Landing / pilot control)忽略失效保护,适用于需要长航时自动任务的场景,但会降低安全冗余,务必权衡使用。
  4. 与 Flight Safety 页联动:多数失效保护动作指向 RTL / Land,其具体返航高度、盘旋时间、降落速度等由 Flight Safety(ArduPilot) 页面配置,建议两页一起核对。
  5. 固件版本敏感:部分参数(如FS_PILOT_INPUT、FS_DR_ENABLE、FS_OPTIONS)仅在较新固件中存在,QGroundControl 会按参数探测结果自动隐藏或显示对应控件;Submarine 的摘要界面还显式针对 3.5 以下固件做了降级处理(见 APMFailsafesComponentSummarySub.qml 中的_firmware34判断)。
  6. 更多参数入口:Failsafes 页面只覆盖最重要的一批安全选项,其余失效保护细节参数可通过 参数设置 页面直接搜索FS_、BATT_FS_、THR_FS_等前缀查看与修改(参考 Safety Setup(ArduPilot) 的说明)。

总结

QGroundControl 的 ArduPilot Failsafes 页面将飞控端数十个FS_*/BATT_FS_*参数封装为按机型自适应、按电池数量动态复用的图形化配置界面:电池失效保护关注电压与容量双阈值,地面站失效保护关注心跳超时与触发方式,油门失效保护关注 PWM 阈值与短/长超时动作,EKF 失效保护关注导航估计可靠性,而 Submarine 机型还涵盖漏水检测与环境温度/压力限制。理解 APMFailsafes.VehicleConfig.json 的声明式结构与参数映射关系,可以帮助你在遇到“选项缺失”或“动作不符”问题时快速定位到具体参数,并借助 参数设置 页面进行精细调校。

  • 无人机
  • 智能硬件

【免费下载链接】qgroundcontrol

Cross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)

项目地址:https://gitcode.com/gh_mirrors/qg/qgroundcontrol
点击查看免费下载
上一篇:构建专业气象服务:Open-Meteo开源天气API技术深度解析
下一篇:Docker Steam Headless GPU配置完全指南:NVIDIA、AMD和Intel显卡设置

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询