From a398dc09c76c2f280ab3a50d69c34d022586e3aa Mon Sep 17 00:00:00 2001 From: Dennis Mannhart <dennis.mannhart@gmail.com> Date: Mon, 4 Sep 2017 11:14:53 +0200 Subject: [PATCH] mc_pos_control: set curr_pos_sp(0:1) to pos(0:1) if non-finite --- .../mc_pos_control/mc_pos_control_main.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/modules/mc_pos_control/mc_pos_control_main.cpp b/src/modules/mc_pos_control/mc_pos_control_main.cpp index cae36d5de7..ec80ca1479 100644 --- a/src/modules/mc_pos_control/mc_pos_control_main.cpp +++ b/src/modules/mc_pos_control/mc_pos_control_main.cpp @@ -737,6 +737,9 @@ MulticopterPositionControl::poll_subscriptions() && PX4_ISFINITE(_pos_sp_triplet.current.alt) && _pos_sp_triplet.current.valid) { _pos_sp_triplet.current.valid = true; + } else if (PX4_ISFINITE(_pos_sp_triplet.current.alt) && _pos_sp_triplet.current.valid) { + _pos_sp_triplet.current.valid = true; + } else { _pos_sp_triplet.current.valid = false; } @@ -1402,7 +1405,7 @@ void MulticopterPositionControl::control_auto(float dt) if (_pos_sp_triplet.current.valid) { - math::Vector<3> curr_pos_sp; + math::Vector<3> curr_pos_sp = _curr_pos_sp; //only project setpoints if they are finite, else use current position if (PX4_ISFINITE(_pos_sp_triplet.current.lat) && @@ -1438,9 +1441,16 @@ void MulticopterPositionControl::control_auto(float dt) /* check if triplets have been updated * note: we only can look at xy since navigator applies slewrate to z */ - matrix::Vector2f diff((_curr_pos_sp(0) - curr_pos_sp(0)), (_curr_pos_sp(1) - curr_pos_sp(1))); + float diff; + + if (_triplet_lat_lon_finite) { + diff = matrix::Vector2f((_curr_pos_sp(0) - curr_pos_sp(0)), (_curr_pos_sp(1) - curr_pos_sp(1))).length(); + + } else { + diff = fabsf(_curr_pos_sp(2) - curr_pos_sp(2)); + } - if (diff.length() > FLT_EPSILON) { + if (diff > FLT_EPSILON) { triplet_updated = true; } -- GitLab