From 7a5609f9d9c179c39ab212fadf45769ca33c4c0f Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Thu, 10 Nov 2022 15:48:55 +0100
Subject: [PATCH] LegacyRobotStateMemoryAdapter: now needs
 GlobalRobotPoseLocalizationListener

---
 .../LegacyRobotStateMemoryAdapter.cpp         | 36 +++++++++++++++----
 .../LegacyRobotStateMemoryAdapter.h           |  5 +--
 ...LegacyRobotStateMemoryAdapterInterface.ice |  3 +-
 3 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.cpp b/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.cpp
index b82eefe89..b8d85a279 100644
--- a/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.cpp
+++ b/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.cpp
@@ -21,6 +21,7 @@
  */
 
 #include "LegacyRobotStateMemoryAdapter.h"
+#include <SimoxUtility/math/convert/mat3f_to_rpy.h>
 
 #include <RobotAPI/libraries/aron/common/aron_conversions.h>
 #include <RobotAPI/libraries/armem_robot_state/aron/Proprioception.aron.generated.h>
@@ -211,17 +212,36 @@ namespace armarx::armem
 
     }
 
-    void LegacyRobotStateMemoryAdapter::reportPlatformPose(const PlatformPose& p, const Ice::Current &)
+    // void LegacyRobotStateMemoryAdapter::reportPlatformPose(const PlatformPose& p, const Ice::Current &)
+    // {
+    //     ARMARX_DEBUG << "Got an update for platform pose";
+    //     std::lock_guard l(updateMutex);
+    //     update.platformPose = p;
+    //     updateTimestamps(p.timestampInMicroSeconds);
+    // }
+
+    void LegacyRobotStateMemoryAdapter::reportGlobalRobotPose(const ::armarx::TransformStamped& transformStamped, const ::Ice::Current&) 
     {
+
         ARMARX_DEBUG << "Got an update for platform pose";
-        std::lock_guard l(updateMutex);
-        update.platformPose = p;
-        updateTimestamps(p.timestampInMicroSeconds);
-    }
-    void LegacyRobotStateMemoryAdapter::reportNewTargetPose(Ice::Float, Ice::Float, Ice::Float, const Ice::Current &)
-    {
 
+        const Eigen::Isometry3f global_T_robot(transformStamped.transform);
+        const float yaw = simox::math::mat3f_to_rpy(global_T_robot.linear()).z();
+
+        armarx::PlatformPose p;
+        p.x = global_T_robot.translation().x();
+        p.y = global_T_robot.translation().y();
+        p.rotationAroundZ = yaw;
+        p.timestampInMicroSeconds = transformStamped.header.timestampInMicroSeconds;
+
+        {
+            std::lock_guard l(updateMutex);
+            update.platformPose = p;
+            updateTimestamps(p.timestampInMicroSeconds);
+        }
     }
+   
+   
     void LegacyRobotStateMemoryAdapter::reportPlatformVelocity(Ice::Float f1, Ice::Float f2, Ice::Float f3, const Ice::Current &)
     {
         ARMARX_DEBUG << "Got an update for platform vels";
@@ -240,6 +260,8 @@ namespace armarx::armem
         update.platformOdometryPose = {f1, f2, f3};
         updateTimestamps(now);
     }
+    
+   
 
     void LegacyRobotStateMemoryAdapter::commitArmar3RobotDescription()
     {
diff --git a/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.h b/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.h
index 9680d8c27..71ab81f1a 100644
--- a/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.h
+++ b/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.h
@@ -59,11 +59,12 @@ namespace armarx::armem
         void reportJointMotorTemperatures(const NameValueMap&, Ice::Long, bool, const Ice::Current&) override;
         void reportJointStatuses(const NameStatusMap&, Ice::Long, bool, const Ice::Current&) override;
 
-        void reportPlatformPose(const PlatformPose &, const Ice::Current &) override;
-        void reportNewTargetPose(Ice::Float, Ice::Float, Ice::Float, const Ice::Current &) override;
+        // void reportPlatformPose(const PlatformPose &, const Ice::Current &) override;
         void reportPlatformVelocity(Ice::Float, Ice::Float, Ice::Float, const Ice::Current &) override;
         void reportPlatformOdometryPose(Ice::Float, Ice::Float, Ice::Float, const Ice::Current &) override;
 
+        void reportGlobalRobotPose(const ::armarx::TransformStamped&, const ::Ice::Current& = ::Ice::emptyCurrent) override;
+
     protected:
 
         /// @see PropertyUser::createPropertyDefinitions()
diff --git a/source/RobotAPI/interface/armem/addon/LegacyRobotStateMemoryAdapterInterface.ice b/source/RobotAPI/interface/armem/addon/LegacyRobotStateMemoryAdapterInterface.ice
index ffd72e20c..baad0e798 100644
--- a/source/RobotAPI/interface/armem/addon/LegacyRobotStateMemoryAdapterInterface.ice
+++ b/source/RobotAPI/interface/armem/addon/LegacyRobotStateMemoryAdapterInterface.ice
@@ -2,6 +2,7 @@
 
 #include <RobotAPI/interface/units/KinematicUnitInterface.ice>
 #include <RobotAPI/interface/units/PlatformUnitInterface.ice>
+#include <RobotAPI/interface/core/RobotLocalization.ice>
 
 module armarx
 {
@@ -9,7 +10,7 @@ module armarx
     {
         module robot_state
         {
-            interface LegacyRobotStateMemoryAdapterInterface extends armarx::KinematicUnitListener, armarx::PlatformUnitListener
+            interface LegacyRobotStateMemoryAdapterInterface extends armarx::KinematicUnitListener, armarx::PlatformUnitListener, armarx::GlobalRobotPoseLocalizationListener
             {
             }
         }
-- 
GitLab