系统故障注入
系统故障注入允许你通过两种方式引发不同类型的传感器和系统故障:一种是使用 MAVSDK 故障插件 以编程方式实现;另一种是通过像 MAVLink 控制台 这样的 PX4 控制台“手动”实现。这使得对 安全失效保护 行为的测试更加容易,更广泛地说,也便于测试当系统和传感器无法正常工作时 PX4 的表现。
故障注入默认是禁用的,可以使用 SYS_FAILURE_EN 参数来启用它。
WARNING
故障注入功能仍在开发中。在撰写本文时(PX4 v1.14):
- 它只能在仿真环境中使用(计划支持在实际飞行中进行故障注入)。
- 它需要仿真器的支持,目前在 Gazebo Classic 中得到支持。
- 许多故障类型并未广泛实现,在这些情况下,命令将返回“不支持”的消息。
故障系统命令
可以从任何 PX4 控制台/终端使用 故障系统命令 注入故障,需要同时指定故障的目标和类型。
语法
failure 命令的完整语法如下:
sh
failure <组件> <故障类型> [-i <实例编号>]
其中:
- 组件:
- 传感器:
gyro
:陀螺仪。accel
:加速度计。mag
:磁力计。baro
:气压计。gps
:全球定位系统(GPS)。optical_flow
:光流传感器。vio
:视觉惯性里程计。distance_sensor
:距离传感器(测距仪)。airspeed
:空速传感器。
- 系统:
battery
:电池。motor
:电机。servo
:舵机。avoidance
:避障系统。rc_signal
:遥控(RC)信号。mavlink_signal
:MAVLink 信号(数据遥测)。
- 传感器:
- 故障类型:
ok
:正常发布数据(禁用故障注入)。off
:停止发布数据。stuck
:每次都报告相同的值(可能表示传感器故障)。garbage
:发布随机噪声,看起来就像读取未初始化的内存。wrong
:发布无效但看起来仍合理(并非“垃圾数据”)的值。slow
:以降低的速率发布数据。delayed
:发布有显著延迟的有效数据。intermittent
:间歇性地发布数据。
- 实例编号(可选):受影响传感器的实例编号。0(默认值)表示指定类型的所有传感器。
示例
要在不关闭遥控控制器的情况下模拟失去遥控信号,可以按以下步骤操作:
- 启用 SYS_FAILURE_EN 参数。
- 在 MAVLink 控制台或 SITL 的 pxh 终端 中输入以下命令:
sh
# 使遥控信号失效(停止发布)
failure rc_signal off
# 重新启动遥控信号发布
failure rc_signal ok
MAVSDK 故障插件
MAVSDK 故障插件 可用于以编程方式注入故障。它在 PX4 集成测试 中用于模拟故障情况(例如,参见 PX4 - Autopilot/test/mavsdk_tests/autopilot_tester.cpp)。
该插件的 API 是上述故障命令的直接映射,此外还包含一些与连接相关的额外错误信号。