From 80363d9d97a57d098d420392f6e2b73d07ec6f62 Mon Sep 17 00:00:00 2001
From: add <cneves@idmind.pt>
Date: Wed, 27 Apr 2022 16:11:39 +0100
Subject: [PATCH] Add orientation conversion passing from quaternion to euler
 to quaternion again

---
 include/imu_msg_fix_alg_node.h |  3 +++
 src/imu_msg_fix_alg_node.cpp   | 24 +++++++++++++++++++++++-
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/include/imu_msg_fix_alg_node.h b/include/imu_msg_fix_alg_node.h
index 9a3b16b..adadbfe 100755
--- a/include/imu_msg_fix_alg_node.h
+++ b/include/imu_msg_fix_alg_node.h
@@ -32,6 +32,9 @@
 #include <geometry_msgs/PoseStamped.h>
 #include <sensor_msgs/Imu.h>
 
+#include <tf2_ros/transform_listener.h>
+#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
+
 // [service client headers]
 
 // [action server client headers]
diff --git a/src/imu_msg_fix_alg_node.cpp b/src/imu_msg_fix_alg_node.cpp
index de0786c..46f9f9b 100755
--- a/src/imu_msg_fix_alg_node.cpp
+++ b/src/imu_msg_fix_alg_node.cpp
@@ -105,10 +105,32 @@ void ImuMsgFixAlgNode::imu_in_callback(const sensor_msgs::Imu::ConstPtr& msg)
       this->imu_out_Imu_msg_.linear_acceleration_covariance[3]=msg->linear_acceleration_covariance[1];
       this->imu_out_Imu_msg_.linear_acceleration_covariance[8]=msg->linear_acceleration_covariance[8];
     }
-    this->imu_out_Imu_msg_.orientation.x=msg->orientation.y;
+    
+    /*this->imu_out_Imu_msg_.orientation.x=msg->orientation.y;
     this->imu_out_Imu_msg_.orientation.y=msg->orientation.x;
     this->imu_out_Imu_msg_.orientation.z=-msg->orientation.z;
     this->imu_out_Imu_msg_.orientation.w=-msg->orientation.w;
+    */
+
+    geometry_msgs::Quaternion quat_msg = msg->orientation;
+    double yaw;
+    double pitch;
+    double roll; 
+    tf2::Matrix3x3(tf2::Quaternion(quat_msg.x, quat_msg.y,quat_msg.z, quat_msg.w)).getEulerYPR(yaw, pitch, roll);
+
+    //TODO: modify yaw, pitch or roll
+    double tmp_pitch = pitch;
+
+    pitch=roll;
+    roll=tmp_pitch;
+    yaw= -yaw;
+    
+    tf2::Quaternion quat_tf;
+    quat_tf.setRPY(roll, pitch, yaw);
+    tf2::convert(quat_tf, quat_msg);
+    
+    this->imu_out_Imu_msg_.orientation = quat_msg;
+
 
     this->imu_out_Imu_msg_.angular_velocity.x=msg->angular_velocity.y;
     this->imu_out_Imu_msg_.angular_velocity.y=msg->angular_velocity.x;
-- 
GitLab