From a2d5485c7f7f14bf818c4440ec41709c2162b826 Mon Sep 17 00:00:00 2001
From: bresch <brescianimathieu@gmail.com>
Date: Thu, 13 Dec 2018 15:30:11 +0100
Subject: [PATCH] Trajectory manual - Handle EKF xy reset

---
 .../FlightTaskManualPositionSmoothVel.cpp              | 10 ++++++++++
 .../FlightTaskManualPositionSmoothVel.hpp              |  1 +
 2 files changed, 11 insertions(+)

diff --git a/src/lib/FlightTasks/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp b/src/lib/FlightTasks/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
index fc4ffa7027..5e0109ee5f 100644
--- a/src/lib/FlightTasks/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
+++ b/src/lib/FlightTasks/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
@@ -147,6 +147,16 @@ void FlightTaskManualPositionSmoothVel::_updateSetpoints()
 
 	VelocitySmoothing::timeSynchronization(_smoothing, 2); // Synchronize x and y only
 
+	if (_position_lock_xy_active) {
+		// Check if a reset event has happened.
+		if (_sub_vehicle_local_position->get().xy_reset_counter != _reset_counter) {
+			// Reset the XY axes
+			_smoothing[0].setCurrentPosition(_position(0));
+			_smoothing[1].setCurrentPosition(_position(1));
+			_reset_counter = _sub_vehicle_local_position->get().xy_reset_counter;
+		}
+	}
+
 	Vector3f pos_sp_smooth;
 	Vector3f accel_sp_smooth;
 
diff --git a/src/lib/FlightTasks/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.hpp b/src/lib/FlightTasks/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.hpp
index 9892f59cda..945c76fe45 100644
--- a/src/lib/FlightTasks/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.hpp
+++ b/src/lib/FlightTasks/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.hpp
@@ -70,4 +70,5 @@ private:
 	matrix::Vector3f _vel_sp_smooth;
 	bool _position_lock_xy_active{false};
 	matrix::Vector2f _position_setpoint_xy_locked;
+	uint8_t _reset_counter{0}; /**< counter for estimator resets in xy-direction */
 };
-- 
GitLab