From 63651da3097441d675b72478b7a7bd4ebb77c31c Mon Sep 17 00:00:00 2001
From: Alvar Martti <alvar.martti@gmail.com>
Date: Fri, 21 Dec 2018 20:03:31 +0200
Subject: [PATCH] FW bug in checking if landing point has been passed

* the bearing difference between the waypoints and aircraft to landing point should be wrap_pi'ed
---
 src/modules/fw_pos_control_l1/FixedwingPositionControl.cpp | 2 +-
 src/modules/fw_pos_control_l1/FixedwingPositionControl.hpp | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/modules/fw_pos_control_l1/FixedwingPositionControl.cpp b/src/modules/fw_pos_control_l1/FixedwingPositionControl.cpp
index 23a0ee172f..724ae6e74b 100644
--- a/src/modules/fw_pos_control_l1/FixedwingPositionControl.cpp
+++ b/src/modules/fw_pos_control_l1/FixedwingPositionControl.cpp
@@ -1463,7 +1463,7 @@ FixedwingPositionControl::control_landing(const Vector2f &curr_pos, const Vector
 	/* calculate a waypoint distance value which is 0 when the aircraft is behind the waypoint */
 	float wp_distance_save = wp_distance;
 
-	if (fabsf(bearing_airplane_currwp - bearing_lastwp_currwp) >= radians(90.0f)) {
+	if (fabsf(wrap_pi(bearing_airplane_currwp - bearing_lastwp_currwp)) >= radians(90.0f)) {
 		wp_distance_save = 0.0f;
 	}
 
diff --git a/src/modules/fw_pos_control_l1/FixedwingPositionControl.hpp b/src/modules/fw_pos_control_l1/FixedwingPositionControl.hpp
index bd52f62e7b..bb53148a72 100644
--- a/src/modules/fw_pos_control_l1/FixedwingPositionControl.hpp
+++ b/src/modules/fw_pos_control_l1/FixedwingPositionControl.hpp
@@ -97,6 +97,7 @@ using matrix::Eulerf;
 using matrix::Quatf;
 using matrix::Vector2f;
 using matrix::Vector3f;
+using matrix::wrap_pi;
 
 using uORB::Subscription;
 
-- 
GitLab