From 020215f1462b1ed32d1dbc4f9c46ff11c03788d5 Mon Sep 17 00:00:00 2001 From: David <40562170+DavidMackie@users.noreply.github.com> Date: Tue, 17 Dec 2019 21:21:11 +0100 Subject: [PATCH] commander: don't allow arming during VTOL transition --- .../commander/Arming/PreFlightCheck/PreFlightCheck.hpp | 2 +- .../Arming/PreFlightCheck/checks/preArmCheck.cpp | 9 ++++++++- src/modules/commander/Commander.cpp | 2 +- src/modules/commander/state_machine_helper.cpp | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.hpp b/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.hpp index 052aad9854..f08e1b8294 100644 --- a/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.hpp +++ b/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.hpp @@ -82,7 +82,7 @@ public: const bool checkGNSS, bool reportFailures, const bool prearm, const hrt_abstime &time_since_boot); static bool preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_status_flags_s &status_flags, - const safety_s &safety, const uint8_t arm_requirements); + const safety_s &safety, const uint8_t arm_requirements, const vehicle_status_s &status); typedef enum { ARM_REQ_NONE = 0, diff --git a/src/modules/commander/Arming/PreFlightCheck/checks/preArmCheck.cpp b/src/modules/commander/Arming/PreFlightCheck/checks/preArmCheck.cpp index d5030bae07..a38f87c734 100644 --- a/src/modules/commander/Arming/PreFlightCheck/checks/preArmCheck.cpp +++ b/src/modules/commander/Arming/PreFlightCheck/checks/preArmCheck.cpp @@ -38,7 +38,7 @@ #include bool PreFlightCheck::preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_status_flags_s &status_flags, - const safety_s &safety, const uint8_t arm_requirements) + const safety_s &safety, const uint8_t arm_requirements, const vehicle_status_s &status) { bool prearm_ok = true; @@ -127,6 +127,13 @@ bool PreFlightCheck::preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_st } } + if (status.is_vtol && status.in_transition_mode) { + if (prearm_ok) { + mavlink_log_critical(mavlink_log_pub, "Arming denied! Vehicle is in transition state"); + prearm_ok = false; + } + } + // Arm Requirements: authorization // check last, and only if everything else has passed if ((arm_requirements & ARM_REQ_ARM_AUTH_BIT) && prearm_ok) { diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index b752d11ee2..cac0d44579 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -374,7 +374,7 @@ int commander_main(int argc, char *argv[]) bool preflight_check_res = Commander::preflight_check(true); PX4_INFO("Preflight check: %s", preflight_check_res ? "OK" : "FAILED"); - bool prearm_check_res = PreFlightCheck::preArmCheck(&mavlink_log_pub, status_flags, safety, arm_requirements); + bool prearm_check_res = PreFlightCheck::preArmCheck(&mavlink_log_pub, status_flags, safety, arm_requirements, status); PX4_INFO("Prearm check: %s", prearm_check_res ? "OK" : "FAILED"); return 0; diff --git a/src/modules/commander/state_machine_helper.cpp b/src/modules/commander/state_machine_helper.cpp index 17d8871c98..86a03ff305 100644 --- a/src/modules/commander/state_machine_helper.cpp +++ b/src/modules/commander/state_machine_helper.cpp @@ -178,7 +178,7 @@ transition_result_t arming_state_transition(vehicle_status_s *status, const safe if (fRunPreArmChecks && preflight_check_ret) { // only bother running prearm if preflight was successful - prearm_check_ret = PreFlightCheck::preArmCheck(mavlink_log_pub, *status_flags, safety, arm_requirements); + prearm_check_ret = PreFlightCheck::preArmCheck(mavlink_log_pub, *status_flags, safety, arm_requirements, *status); } if (!preflight_check_ret || !prearm_check_ret) {