diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index cebc08ae94..0b7d4a3e91 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -1921,19 +1921,7 @@ void Commander::run() _vehicle_status_pub.publish(_vehicle_status); // failure_detector_status publish - failure_detector_status_s fd_status{}; - fd_status.fd_roll = _failure_detector.getStatusFlags().roll; - fd_status.fd_pitch = _failure_detector.getStatusFlags().pitch; - fd_status.fd_alt = _failure_detector.getStatusFlags().alt; - fd_status.fd_ext = _failure_detector.getStatusFlags().ext; - fd_status.fd_arm_escs = _failure_detector.getStatusFlags().arm_escs; - fd_status.fd_battery = _failure_detector.getStatusFlags().battery; - fd_status.fd_imbalanced_prop = _failure_detector.getStatusFlags().imbalanced_prop; - fd_status.fd_motor = _failure_detector.getStatusFlags().motor; - fd_status.imbalanced_prop_metric = _failure_detector.getImbalancedPropMetric(); - fd_status.motor_failure_mask = _failure_detector.getMotorFailures(); - fd_status.timestamp = hrt_absolute_time(); - _failure_detector_status_pub.publish(fd_status); + _failure_detector.publishStatus(); } checkWorkerThread(); diff --git a/src/modules/commander/Commander.hpp b/src/modules/commander/Commander.hpp index af16a7f81d..67f5bd3a55 100644 --- a/src/modules/commander/Commander.hpp +++ b/src/modules/commander/Commander.hpp @@ -54,7 +54,6 @@ #include #include #include -#include #include #include #include @@ -312,7 +311,6 @@ private: // Publications uORB::Publication _actuator_armed_pub{ORB_ID(actuator_armed)}; uORB::Publication _actuator_test_pub{ORB_ID(actuator_test)}; - uORB::Publication _failure_detector_status_pub{ORB_ID(failure_detector_status)}; uORB::Publication _vehicle_command_ack_pub{ORB_ID(vehicle_command_ack)}; uORB::Publication _vehicle_command_pub{ORB_ID(vehicle_command)}; uORB::Publication _vehicle_control_mode_pub{ORB_ID(vehicle_control_mode)}; diff --git a/src/modules/commander/failure_detector/FailureDetector.cpp b/src/modules/commander/failure_detector/FailureDetector.cpp index da219f5747..0923a7b5b5 100644 --- a/src/modules/commander/failure_detector/FailureDetector.cpp +++ b/src/modules/commander/failure_detector/FailureDetector.cpp @@ -206,6 +206,23 @@ bool FailureDetector::update(const vehicle_status_s &vehicle_status, const vehic return _failure_detector_status.value != status_prev.value; } +void FailureDetector::publishStatus() +{ + failure_detector_status_s failure_detector_status{}; + failure_detector_status.fd_roll = _failure_detector_status.flags.roll; + failure_detector_status.fd_pitch = _failure_detector_status.flags.pitch; + failure_detector_status.fd_alt = _failure_detector_status.flags.alt; + failure_detector_status.fd_ext = _failure_detector_status.flags.ext; + failure_detector_status.fd_arm_escs = _failure_detector_status.flags.arm_escs; + failure_detector_status.fd_battery = _failure_detector_status.flags.battery; + failure_detector_status.fd_imbalanced_prop = _failure_detector_status.flags.imbalanced_prop; + failure_detector_status.fd_motor = _failure_detector_status.flags.motor; + failure_detector_status.imbalanced_prop_metric = _imbalanced_prop_lpf.getState(); + failure_detector_status.motor_failure_mask = _motor_failure_esc_timed_out_mask | _motor_failure_esc_under_current_mask; + failure_detector_status.timestamp = hrt_absolute_time(); + _failure_detector_status_pub.publish(failure_detector_status); +} + void FailureDetector::updateAttitudeStatus(const vehicle_status_s &vehicle_status) { vehicle_attitude_s attitude; diff --git a/src/modules/commander/failure_detector/FailureDetector.hpp b/src/modules/commander/failure_detector/FailureDetector.hpp index 15e5465344..2572e06ba6 100644 --- a/src/modules/commander/failure_detector/FailureDetector.hpp +++ b/src/modules/commander/failure_detector/FailureDetector.hpp @@ -50,9 +50,12 @@ #include // subscriptions -#include #include +#include #include +#include +#include +#include #include #include #include @@ -61,8 +64,6 @@ #include #include #include -#include -#include union failure_detector_status_u { struct { @@ -102,9 +103,8 @@ public: bool update(const vehicle_status_s &vehicle_status, const vehicle_control_mode_s &vehicle_control_mode); const failure_detector_status_u &getStatus() const { return _failure_detector_status; } - const decltype(failure_detector_status_u::flags) &getStatusFlags() const { return _failure_detector_status.flags; } - float getImbalancedPropMetric() const { return _imbalanced_prop_lpf.getState(); } - uint16_t getMotorFailures() const { return _motor_failure_esc_timed_out_mask | _motor_failure_esc_under_current_mask; } + + void publishStatus(); private: void updateAttitudeStatus(const vehicle_status_s &vehicle_status); @@ -139,6 +139,8 @@ private: uORB::Subscription _vehicle_imu_status_sub{ORB_ID(vehicle_imu_status)}; uORB::Subscription _actuator_motors_sub{ORB_ID(actuator_motors)}; + uORB::Publication _failure_detector_status_pub{ORB_ID(failure_detector_status)}; + FailureInjector _failure_injector; DEFINE_PARAMETERS(