From 9d5aebd235bb9cc6abbc7a8d7b9c3f07eacc5958 Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Sat, 14 Mar 2020 23:01:19 +0100 Subject: [PATCH] Commander: Run continuous pre-flight checks silently As we are checking the current pre-flight state and validate wether the system could be armed, we do not want to spam the console or user with continously failing checks. These checks are reported to the GCS separately and are processed and displayed there. --- .../Arming/PreFlightCheck/PreFlightCheck.hpp | 3 +- .../PreFlightCheck/checks/preArmCheck.cpp | 29 ++++++++++--------- src/modules/commander/Commander.cpp | 4 +-- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.hpp b/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.hpp index f820c658c4..fa9c1722d3 100644 --- a/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.hpp +++ b/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.hpp @@ -89,7 +89,8 @@ public: }; static bool preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_status_flags_s &status_flags, - const safety_s &safety, const arm_requirements_t &arm_requirements, const vehicle_status_s &status); + const safety_s &safety, const arm_requirements_t &arm_requirements, const vehicle_status_s &status, + bool report_fail = true); private: static bool magnometerCheck(orb_advert_t *mavlink_log_pub, vehicle_status_s &status, const uint8_t instance, diff --git a/src/modules/commander/Arming/PreFlightCheck/checks/preArmCheck.cpp b/src/modules/commander/Arming/PreFlightCheck/checks/preArmCheck.cpp index ba84aa3472..b58988705c 100644 --- a/src/modules/commander/Arming/PreFlightCheck/checks/preArmCheck.cpp +++ b/src/modules/commander/Arming/PreFlightCheck/checks/preArmCheck.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2019 PX4 Development Team. All rights reserved. + * Copyright (c) 2019-2020 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -38,13 +38,13 @@ #include bool PreFlightCheck::preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_status_flags_s &status_flags, - const safety_s &safety, const arm_requirements_t &arm_requirements, const vehicle_status_s &status) + const safety_s &safety, const arm_requirements_t &arm_requirements, const vehicle_status_s &status, bool report_fail) { bool prearm_ok = true; // USB not connected if (!status_flags.circuit_breaker_engaged_usb_check && status_flags.usb_connected) { - mavlink_log_critical(mavlink_log_pub, "Arming denied! Flying with USB is not safe"); + if (report_fail) { mavlink_log_critical(mavlink_log_pub, "Arming denied! Flying with USB is not safe"); } prearm_ok = false; } @@ -54,7 +54,7 @@ bool PreFlightCheck::preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_st // Fail transition if power is not good if (!status_flags.condition_power_input_valid) { - mavlink_log_critical(mavlink_log_pub, "Arming denied! Connect power module"); + if (report_fail) { mavlink_log_critical(mavlink_log_pub, "Arming denied! Connect power module"); } prearm_ok = false; } @@ -62,7 +62,7 @@ bool PreFlightCheck::preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_st // main battery level if (!status_flags.condition_battery_healthy) { if (prearm_ok) { - mavlink_log_critical(mavlink_log_pub, "Arming denied! Check battery"); + if (report_fail) { mavlink_log_critical(mavlink_log_pub, "Arming denied! Check battery"); } } prearm_ok = false; @@ -74,7 +74,7 @@ bool PreFlightCheck::preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_st if (!status_flags.condition_auto_mission_available) { if (prearm_ok) { - mavlink_log_critical(mavlink_log_pub, "Arming denied! No valid mission"); + if (report_fail) { mavlink_log_critical(mavlink_log_pub, "Arming denied! No valid mission"); } } prearm_ok = false; @@ -82,7 +82,7 @@ bool PreFlightCheck::preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_st if (!status_flags.condition_global_position_valid) { if (prearm_ok) { - mavlink_log_critical(mavlink_log_pub, "Arming denied! Missions require a global position"); + if (report_fail) { mavlink_log_critical(mavlink_log_pub, "Arming denied! Missions require a global position"); } } prearm_ok = false; @@ -94,7 +94,7 @@ bool PreFlightCheck::preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_st if (!status_flags.condition_global_position_valid) { if (prearm_ok) { - mavlink_log_critical(mavlink_log_pub, "Arming denied! Global position required"); + if (report_fail) { mavlink_log_critical(mavlink_log_pub, "Arming denied! Global position required"); } } prearm_ok = false; @@ -105,7 +105,7 @@ bool PreFlightCheck::preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_st if (safety.safety_switch_available && !safety.safety_off) { // Fail transition if we need safety switch press if (prearm_ok) { - mavlink_log_critical(mavlink_log_pub, "Arming denied! Press safety switch first"); + if (report_fail) { mavlink_log_critical(mavlink_log_pub, "Arming denied! Press safety switch first"); } } prearm_ok = false; @@ -113,7 +113,7 @@ bool PreFlightCheck::preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_st if (status_flags.avoidance_system_required && !status_flags.avoidance_system_valid) { if (prearm_ok) { - mavlink_log_critical(mavlink_log_pub, "Arming denied! Avoidance system not ready"); + if (report_fail) { mavlink_log_critical(mavlink_log_pub, "Arming denied! Avoidance system not ready"); } } prearm_ok = false; @@ -122,7 +122,8 @@ bool PreFlightCheck::preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_st if (arm_requirements.esc_check && status_flags.condition_escs_error) { if (prearm_ok) { - mavlink_log_critical(mavlink_log_pub, "Arming denied! One or more ESCs are offline"); + if (report_fail) { mavlink_log_critical(mavlink_log_pub, "Arming denied! One or more ESCs are offline"); } + prearm_ok = false; } } @@ -131,7 +132,8 @@ bool PreFlightCheck::preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_st if (status.in_transition_mode) { if (prearm_ok) { - mavlink_log_critical(mavlink_log_pub, "Arming denied! Vehicle is in transition state"); + if (report_fail) { mavlink_log_critical(mavlink_log_pub, "Arming denied! Vehicle is in transition state"); } + prearm_ok = false; } } @@ -139,7 +141,8 @@ bool PreFlightCheck::preArmCheck(orb_advert_t *mavlink_log_pub, const vehicle_st if (!status_flags.circuit_breaker_vtol_fw_arming_check && 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"); + if (report_fail) { 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 3e5b8025ea..ea70ce1ef7 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -2254,9 +2254,9 @@ Commander::run() // Evaluate current prearm status if (!armed.armed) { - bool preflight_check_res = PreFlightCheck::preflightCheck(nullptr, status, status_flags, true, true, true, 30_s); + bool preflight_check_res = PreFlightCheck::preflightCheck(nullptr, status, status_flags, true, false, true, 30_s); bool prearm_check_res = PreFlightCheck::preArmCheck(nullptr, status_flags, _safety, - _arm_requirements, status); + _arm_requirements, status, false); set_health_flags(subsystem_info_s::SUBSYSTEM_TYPE_PREARM_CHECK, true, true, (preflight_check_res && prearm_check_res), status); }