System Failure Injection
System failure injection allows you to induce different types of sensor and system failures, either programmatically using the MAVSDK failure plugin, or "manually" via a PX4 console like the MAVLink shell. This enables easier testing of safety failsafe behaviour, and more generally, of how PX4 behaves when systems and sensors stop working correctly.
Failure injection is disabled by default, and can be enabled using the SYS_FAILURE_EN parameter.
WARNING
Failure injection still in development. At time of writing (PX4 v1.14):
- Support may vary by failure type and between simulatiors and real vehicle.
- It requires support in the simulator. It is supported in Gazebo Classic
- Many failure types are not broadly implemented. In those cases the command will return with an "unsupported" message.
Failure System Command
Failures can be injected using the failure system command from any PX4 console/shell (such as the QGC MAVLink Console or SITL pxh shell), specifying both the target and type of the failure.
Syntax
The full syntax of the failure command is:
sh
failure <component> <failure_type> [-i <instance_number>]where:
- component:
- 传感器:
gyro: Gyroscopeaccel: Accelerometermag: Magnetometerbaro: Barometergps: Global navigation satellite systemoptical_flow: Optical flow.vio: Visual inertial odometrydistance_sensor: Distance sensor (rangefinder).airspeed: Airspeed sensor
- Systems:
battery: Batterymotor: Motorservo: Servoavoidance: Avoidancerc_signal: RC Signalmavlink_signal: MAVLink data telemetry connection
- 传感器:
- failure_type:
ok: Publish as normal (Disable failure injection)off: Stop publishingstuck: Constantly report the same value which can happen on a malfunctioning sensorgarbage: Publish random noise. This looks like reading uninitialized memorywrong: Publish invalid values that still look reasonable/aren't "garbage"slow: Publish at a reduced ratedelayed: Publish valid data with a significant delayintermittent: Publish intermittently
- instance number (optional): Instance number of affected sensor. 0 (default) indicates all sensors of specified type.
MAVSDK Failure Plugin
The MAVSDK failure plugin can be used to programmatically inject failures. It is used in PX4 Integration Testing to simulate failure cases (for example, see PX4-Autopilot/test/mavsdk_tests/autopilot_tester.cpp).
The plugin API is a direct mapping of the failure command shown above, with a few additional error signals related to the connection.
Example: RC signal
To simulate losing RC signal without having to turn off your RC controller:
Enable the SYS_FAILURE_EN parameter.
Enter the following commands on the MAVLink console or SITL pxh shell:
sh# Fail RC (turn publishing off) failure rc_signal off # Restart RC publishing failure rc_signal ok
Example: Motor
To stop a motor mid-flight without the system anticipating it or excluding it from allocation effectiveness:
Enable the SYS_FAILURE_EN parameter.
Enable CA_FAILURE_MODE parameter to allow turning off motors.
Enter the following commands on the MAVLink console or SITL pxh shell:
sh# Turn off first motor failure motor off -i 1 # Turn it back on failure motor ok -i 1