|
|
|
@ -41,10 +41,7 @@
@@ -41,10 +41,7 @@
|
|
|
|
|
#include "FailureDetector.hpp" |
|
|
|
|
|
|
|
|
|
FailureDetector::FailureDetector(ModuleParams *parent) : |
|
|
|
|
ModuleParams(parent), |
|
|
|
|
_sub_vehicle_attitude_setpoint(ORB_ID(vehicle_attitude_setpoint)), |
|
|
|
|
_sub_vehicule_attitude(ORB_ID(vehicle_attitude)), |
|
|
|
|
_sub_vehicle_status(ORB_ID(vehicle_status)) |
|
|
|
|
ModuleParams(parent) |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -57,11 +54,11 @@ bool FailureDetector::resetStatus()
@@ -57,11 +54,11 @@ bool FailureDetector::resetStatus()
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool |
|
|
|
|
FailureDetector::update() |
|
|
|
|
FailureDetector::update(const vehicle_status_s &vehicle_status) |
|
|
|
|
{ |
|
|
|
|
bool updated(false); |
|
|
|
|
|
|
|
|
|
if (isAttitudeStabilized()) { |
|
|
|
|
if (isAttitudeStabilized(vehicle_status)) { |
|
|
|
|
updated = updateAttitudeStatus(); |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
@ -72,35 +69,32 @@ FailureDetector::update()
@@ -72,35 +69,32 @@ FailureDetector::update()
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool |
|
|
|
|
FailureDetector::isAttitudeStabilized() |
|
|
|
|
FailureDetector::isAttitudeStabilized(const vehicle_status_s &vehicle_status) |
|
|
|
|
{ |
|
|
|
|
if (_sub_vehicle_status.update()) { |
|
|
|
|
const vehicle_status_s &vehicle_status = _sub_vehicle_status.get(); |
|
|
|
|
const uint8_t vehicle_type = vehicle_status.vehicle_type; |
|
|
|
|
const uint8_t nav_state = vehicle_status.nav_state; |
|
|
|
|
|
|
|
|
|
if (vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING) { |
|
|
|
|
_attitude_is_stabilized = nav_state != vehicle_status_s::NAVIGATION_STATE_ACRO && |
|
|
|
|
nav_state != vehicle_status_s::NAVIGATION_STATE_RATTITUDE; |
|
|
|
|
|
|
|
|
|
} else if (vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING) { |
|
|
|
|
_attitude_is_stabilized = nav_state != vehicle_status_s::NAVIGATION_STATE_MANUAL && |
|
|
|
|
nav_state != vehicle_status_s::NAVIGATION_STATE_ACRO && |
|
|
|
|
nav_state != vehicle_status_s::NAVIGATION_STATE_RATTITUDE; |
|
|
|
|
} |
|
|
|
|
bool attitude_is_stabilized{false}; |
|
|
|
|
const uint8_t vehicle_type = vehicle_status.vehicle_type; |
|
|
|
|
const uint8_t nav_state = vehicle_status.nav_state; |
|
|
|
|
|
|
|
|
|
if (vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING) { |
|
|
|
|
attitude_is_stabilized = nav_state != vehicle_status_s::NAVIGATION_STATE_ACRO && |
|
|
|
|
nav_state != vehicle_status_s::NAVIGATION_STATE_RATTITUDE; |
|
|
|
|
|
|
|
|
|
} else if (vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING) { |
|
|
|
|
attitude_is_stabilized = nav_state != vehicle_status_s::NAVIGATION_STATE_MANUAL && |
|
|
|
|
nav_state != vehicle_status_s::NAVIGATION_STATE_ACRO && |
|
|
|
|
nav_state != vehicle_status_s::NAVIGATION_STATE_RATTITUDE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Note that if we do not have an update from the vehicle_status topic, the previous value is sent
|
|
|
|
|
return _attitude_is_stabilized; |
|
|
|
|
return attitude_is_stabilized; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool |
|
|
|
|
FailureDetector::updateAttitudeStatus() |
|
|
|
|
{ |
|
|
|
|
bool updated(false); |
|
|
|
|
vehicle_attitude_s attitude; |
|
|
|
|
|
|
|
|
|
if (_sub_vehicule_attitude.update()) { |
|
|
|
|
const vehicle_attitude_s &attitude = _sub_vehicule_attitude.get(); |
|
|
|
|
if (_sub_vehicule_attitude.update(&attitude)) { |
|
|
|
|
|
|
|
|
|
const matrix::Eulerf euler(matrix::Quatf(attitude.q)); |
|
|
|
|
const float roll(euler.phi()); |
|
|
|
@ -134,9 +128,6 @@ FailureDetector::updateAttitudeStatus()
@@ -134,9 +128,6 @@ FailureDetector::updateAttitudeStatus()
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
updated = true; |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
updated = false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return updated; |
|
|
|
|