From d6a472bdbc064565c32276e4bab4e550a04a8f19 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Fri, 7 Jan 2022 09:54:36 +0100
Subject: [PATCH] orientation optimization: clamping orientations before
 printing

---
 .../global_planning/optimization/OrientationOptimizer.cpp  | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/source/armarx/navigation/global_planning/optimization/OrientationOptimizer.cpp b/source/armarx/navigation/global_planning/optimization/OrientationOptimizer.cpp
index 30f75542..eb98cee4 100644
--- a/source/armarx/navigation/global_planning/optimization/OrientationOptimizer.cpp
+++ b/source/armarx/navigation/global_planning/optimization/OrientationOptimizer.cpp
@@ -1,5 +1,6 @@
 #include "OrientationOptimizer.h"
 
+#include <algorithm>
 #include <cmath>
 
 #include <range/v3/range/conversion.hpp>
@@ -16,6 +17,7 @@
 
 #include <SimoxUtility/math/convert/mat4f_to_xyyaw.h>
 #include <SimoxUtility/math/convert/rpy_to_mat3f.h>
+#include <SimoxUtility/math/periodic/periodic_clamp.h>
 #include <SimoxUtility/math/periodic/periodic_diff.h>
 
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
@@ -134,6 +136,11 @@ namespace armarx::navigation::global_planning::optimization
         std::cout << summary.FullReport() << "\n";
         // std::cout << summary.BriefReport() << "\n";
 
+        const auto clampInPlace = [](auto& val)
+        { val = simox::math::periodic_clamp(val, -M_PI, M_PI); };
+
+        std::for_each(orientations.begin(), orientations.end(), clampInPlace);
+
         ARMARX_INFO << "orientations after: " << orientations;
         ARMARX_INFO << "Optimization: " << summary.iterations.size() << " iterations";
 
-- 
GitLab