From 974a6f48c6b7c35dc081c37493d01e97f33e512c Mon Sep 17 00:00:00 2001 From: Randy Mackay Date: Fri, 3 Feb 2017 16:03:02 +0900 Subject: [PATCH] AC_PrecLand: remove check of type when using distance-to-target --- libraries/AC_PrecLand/AC_PrecLand.cpp | 5 +++-- libraries/AC_PrecLand/AC_PrecLand_Backend.h | 6 +++--- libraries/AC_PrecLand/AC_PrecLand_Companion.h | 6 +++--- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/libraries/AC_PrecLand/AC_PrecLand.cpp b/libraries/AC_PrecLand/AC_PrecLand.cpp index db24ee2886..a811088478 100644 --- a/libraries/AC_PrecLand/AC_PrecLand.cpp +++ b/libraries/AC_PrecLand/AC_PrecLand.cpp @@ -162,10 +162,11 @@ void AC_PrecLand::update(float rangefinder_alt_cm, bool rangefinder_alt_valid) Vector3f target_vec_unit_ned = _attitude_history.front() * Rz * target_vec_unit_body; bool target_vec_valid = target_vec_unit_ned.z > 0.0f; + bool alt_valid = (rangefinder_alt_valid && rangefinder_alt_cm > 0.0f) || (_backend->distance_to_target() > 0.0f); - if (target_vec_valid && ( (rangefinder_alt_valid && rangefinder_alt_cm > 0.0f) || ((enum PrecLandType)(_type.get()) == PRECLAND_TYPE_COMPANION && _backend->distance_to_target()) ) ) { + if (target_vec_valid && alt_valid) { float alt; - if ((enum PrecLandType)(_type.get()) == PRECLAND_TYPE_COMPANION && _backend->distance_to_target()) { + if (_backend->distance_to_target() > 0.0f) { alt = _backend->distance_to_target(); } else { alt = MAX(rangefinder_alt_cm*0.01f, 0.0f); diff --git a/libraries/AC_PrecLand/AC_PrecLand_Backend.h b/libraries/AC_PrecLand/AC_PrecLand_Backend.h index f791a9c5d5..aed43860e7 100644 --- a/libraries/AC_PrecLand/AC_PrecLand_Backend.h +++ b/libraries/AC_PrecLand/AC_PrecLand_Backend.h @@ -32,9 +32,9 @@ public: // return true if there is a valid los measurement available virtual bool have_los_meas() = 0; - - // return distance to target - virtual float distance_to_target() = 0; + + // returns distance to target in meters (0 means distance is not known) + virtual float distance_to_target() { return 0.0f; }; // parses a mavlink message from the companion computer virtual void handle_msg(mavlink_message_t* msg) {}; diff --git a/libraries/AC_PrecLand/AC_PrecLand_Companion.h b/libraries/AC_PrecLand/AC_PrecLand_Companion.h index 5119c57d51..1a2e0f604f 100644 --- a/libraries/AC_PrecLand/AC_PrecLand_Companion.h +++ b/libraries/AC_PrecLand/AC_PrecLand_Companion.h @@ -31,9 +31,9 @@ public: // return true if there is a valid los measurement available bool have_los_meas(); - // return distance to target - float distance_to_target(); - + // returns distance to target in meters (0 means distance is not known) + float distance_to_target() override; + // parses a mavlink message from the companion computer void handle_msg(mavlink_message_t* msg);