diff --git a/msg/vehicle_status_flags.msg b/msg/vehicle_status_flags.msg index 7ad39f081f..8d74dc0881 100644 --- a/msg/vehicle_status_flags.msg +++ b/msg/vehicle_status_flags.msg @@ -21,6 +21,7 @@ bool circuit_breaker_engaged_enginefailure_check bool circuit_breaker_flight_termination_disabled bool circuit_breaker_engaged_usb_check bool circuit_breaker_engaged_posfailure_check # set to true when the position valid checks have been disabled +bool circuit_breaker_vtol_fw_arming_check # set to true if for VTOLs arming in fixed-wing mode should be allowed bool offboard_control_signal_found_once bool offboard_control_signal_lost diff --git a/src/lib/circuit_breaker/circuit_breaker.h b/src/lib/circuit_breaker/circuit_breaker.h index cd62a00a35..fa7ace2d50 100644 --- a/src/lib/circuit_breaker/circuit_breaker.h +++ b/src/lib/circuit_breaker/circuit_breaker.h @@ -57,6 +57,7 @@ #define CBRK_ENGINEFAIL_KEY 284953 #define CBRK_USB_CHK_KEY 197848 #define CBRK_VELPOSERR_KEY 201607 +#define CBRK_VTOLARMING_KEY 159753 #include diff --git a/src/lib/circuit_breaker/circuit_breaker_params.c b/src/lib/circuit_breaker/circuit_breaker_params.c index 04d7a669be..424ef2d479 100644 --- a/src/lib/circuit_breaker/circuit_breaker_params.c +++ b/src/lib/circuit_breaker/circuit_breaker_params.c @@ -176,3 +176,18 @@ PARAM_DEFINE_INT32(CBRK_USB_CHK, 0); * @group Circuit Breaker */ PARAM_DEFINE_INT32(CBRK_VELPOSERR, 0); + +/** + * Circuit breaker for arming in fixed-wing mode check + * + * Setting this parameter to 159753 will enable arming in fixed-wing + * mode for VTOLs. + * WARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK + * + * @reboot_required true + * @min 0 + * @max 159753 + * @category Developer + * @group Circuit Breaker + */ +PARAM_DEFINE_INT32(CBRK_VTOLARMING, 0); diff --git a/src/modules/commander/Arming/PreFlightCheck/checks/preArmCheck.cpp b/src/modules/commander/Arming/PreFlightCheck/checks/preArmCheck.cpp index 261fc5abea..f28a4f91ce 100644 --- a/src/modules/commander/Arming/PreFlightCheck/checks/preArmCheck.cpp +++ b/src/modules/commander/Arming/PreFlightCheck/checks/preArmCheck.cpp @@ -134,7 +134,8 @@ bool PreFlightCheck::preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_st } } - if (status.is_vtol && status.vehicle_type != vehicle_status_s::VEHICLE_TYPE_ROTARY_WING) { + if (!status_flags.circuit_breaker_vtol_fw_arming_check && status.is_vtol + && status.vehicle_type != vehicle_status_s::VEHICLE_TYPE_ROTARY_WING) { if (prearm_ok) { mavlink_log_critical(mavlink_log_pub, "Arming denied! Vehicle is not in multicopter mode"); prearm_ok = false; diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index 70b8dc270b..f40a137dd4 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -2340,6 +2340,8 @@ Commander::get_circuit_breaker_params() CBRK_FLIGHTTERM_KEY); status_flags.circuit_breaker_engaged_posfailure_check = circuit_breaker_enabled_by_val(_param_cbrk_velposerr.get(), CBRK_VELPOSERR_KEY); + status_flags.circuit_breaker_vtol_fw_arming_check = circuit_breaker_enabled_by_val(_param_cbrk_vtolarming.get(), + CBRK_VTOLARMING_KEY); } void diff --git a/src/modules/commander/Commander.hpp b/src/modules/commander/Commander.hpp index 601e9310dc..d037fcbf5b 100644 --- a/src/modules/commander/Commander.hpp +++ b/src/modules/commander/Commander.hpp @@ -243,6 +243,7 @@ private: (ParamInt) _param_cbrk_enginefail, (ParamInt) _param_cbrk_flightterm, (ParamInt) _param_cbrk_velposerr, + (ParamInt) _param_cbrk_vtolarming, // Geofrence (ParamInt) _param_geofence_action,