From cc741426f2acdf2e65d4083e10986466a6389275 Mon Sep 17 00:00:00 2001
From: Alopez <alopez@iri.upc.edu>
Date: Wed, 15 Dec 2021 11:48:24 +0100
Subject: [PATCH] Fixed covariance rotation bug

---
 src/collision_manager_alg_node.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/collision_manager_alg_node.cpp b/src/collision_manager_alg_node.cpp
index af20bda..536e18b 100644
--- a/src/collision_manager_alg_node.cpp
+++ b/src/collision_manager_alg_node.cpp
@@ -484,11 +484,14 @@ bool CollisionManagerAlgNode::get_base_link_new_pose_from_icp(const Eigen::Vecto
   tf_map_new_blink = tf_map_new_laser*(_front? this->tf_blink_front_laser: this->tf_blink_rear_laser).inverse();
   _blink_pose << tf_map_new_blink.getOrigin().x(), tf_map_new_blink.getOrigin().y(), tf2::getYaw(tf_map_new_blink.getRotation());
 
-  Eigen::Quaternion<double> rot(tf_map_laser.getOrigin().w(), tf_map_laser.getOrigin().x(), tf_map_laser.getOrigin().y(), tf_map_laser.getOrigin().z());
+  Eigen::Quaternion<double> rot(tf_map_laser.getRotation().w(), tf_map_laser.getRotation().x(), tf_map_laser.getRotation().y(), tf_map_laser.getRotation().z());
   
   Eigen::Transform<double,3,Eigen::Affine> map_laser_rot(rot);
   _blink_cov = map_laser_rot*_covariances;
 
+  for (unsigned int i=0; i<9; i++)
+    _blink_cov(i) = std::fabs(_blink_cov(i))*(_covariances(i) < 0? -1: 1);
+
   if (this->config_.debug)
   {
     if (_front)
-- 
GitLab