From 09f1281000ebd86b8d79ef4bd42751284793b6af Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Wed, 27 Oct 2021 20:45:15 +0200
Subject: [PATCH] armem_robot(_state): fixing circular dependency

---
 .../armem_robot/aron_conversions.cpp          | 25 --------
 .../libraries/armem_robot/aron_conversions.h  |  7 ---
 .../armem_robot_state/aron_conversions.cpp    | 62 ++++++++++++++-----
 .../armem_robot_state/aron_conversions.h      | 13 +++-
 .../client/common/RobotReader.cpp             | 12 ++--
 5 files changed, 66 insertions(+), 53 deletions(-)

diff --git a/source/RobotAPI/libraries/armem_robot/aron_conversions.cpp b/source/RobotAPI/libraries/armem_robot/aron_conversions.cpp
index 21e579c80..1bf28496f 100644
--- a/source/RobotAPI/libraries/armem_robot/aron_conversions.cpp
+++ b/source/RobotAPI/libraries/armem_robot/aron_conversions.cpp
@@ -109,30 +109,5 @@ namespace armarx::armem
         dto.objectJointValues = bo.jointMap;
     }
     
-    void robot::fromAron(const armarx::armem::prop::arondto::Platform& dto, robot::PlatformState& bo) 
-    {
-        bo.twist.linear.setZero();
-        bo.twist.linear.head<2>() = dto.velocity.head<2>(); // x and y
-
-        bo.twist.angular.setZero();
-        bo.twist.angular.z() = dto.velocity.z(); // yaw
-    }
-    
-    void robot::toAron(armarx::armem::prop::arondto::Platform& dto, const robot::PlatformState& bo) 
-    {
-        ARMARX_ERROR << "Not implemented yet.";
-    }
-
-     void robot::fromAron(const armarx::armem::prop::arondto::ForceTorque& dto, robot::ForceTorque& bo) 
-    {
-        bo.force = dto.force;
-        bo.torque = dto.torque;
-    }
-    
-    void robot::toAron(armarx::armem::prop::arondto::ForceTorque& dto, const robot::ForceTorque& bo) 
-    {
-        dto.force = bo.force;
-        dto.torque = bo.torque;
-    }
 
 }  // namespace armarx::armem
diff --git a/source/RobotAPI/libraries/armem_robot/aron_conversions.h b/source/RobotAPI/libraries/armem_robot/aron_conversions.h
index 62744724f..f2ea2ba95 100644
--- a/source/RobotAPI/libraries/armem_robot/aron_conversions.h
+++ b/source/RobotAPI/libraries/armem_robot/aron_conversions.h
@@ -8,7 +8,6 @@
 #include <RobotAPI/libraries/armem_robot/aron/RobotDescription.aron.generated.h>
 #include <RobotAPI/libraries/armem_robot/aron/RobotState.aron.generated.h>
 #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h>
-#include <RobotAPI/libraries/armem_robot_state/aron/Proprioception.aron.generated.h>
 
 
 namespace armarx::armem::robot
@@ -27,12 +26,6 @@ namespace armarx::armem::robot
     void fromAron(const arondto::RobotState& dto, RobotState& bo);
     void toAron(arondto::RobotState& dto, const RobotState& bo);
 
-    void fromAron(const armarx::armem::prop::arondto::Platform& dto, PlatformState& bo);
-    void toAron(armarx::armem::prop::arondto::Platform& dto, const PlatformState& bo);
-
-    void fromAron(const armarx::armem::prop::arondto::ForceTorque& dto, ForceTorque& bo);
-    void toAron(armarx::armem::prop::arondto::ForceTorque& dto, const ForceTorque& bo);
-
     void fromAron(const arondto::ObjectClass& dto, RobotDescription& bo);
     void toAron(arondto::ObjectClass& dto, const RobotDescription& bo);
 
diff --git a/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp b/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp
index 785d25bdc..03a578fab 100644
--- a/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/aron_conversions.cpp
@@ -1,31 +1,30 @@
 #include "aron_conversions.h"
 
-// STL
 #include <string>
 
-// Ice
 #include <IceUtil/Time.h>
 
-// RobotAPI
-#include <RobotAPI/libraries/armem_robot_state/aron/Transform.aron.generated.h>
+#include <ArmarXCore/core/logging/Logging.h>
 #include <RobotAPI/libraries/armem_robot_state/aron/JointState.aron.generated.h>
-
+#include <RobotAPI/libraries/armem_robot_state/aron/Proprioception.aron.generated.h>
+#include <RobotAPI/libraries/armem_robot_state/aron/Transform.aron.generated.h>
+#include <RobotAPI/libraries/armem_robot_state/types.h>
 #include <RobotAPI/libraries/aron/common/aron_conversions.h>
 
-#include "RobotAPI/libraries/armem_robot_state/types.h"
-
 namespace armarx::armem
 {
 
     /* Transform */
 
-    void fromAron(const arondto::Transform& dto, robot_state::Transform& bo)
+    void
+    fromAron(const arondto::Transform& dto, robot_state::Transform& bo)
     {
         fromAron(dto.header, bo.header);
         aron::fromAron(dto.transform, bo.transform);
     }
 
-    void toAron(arondto::Transform& dto, const robot_state::Transform& bo)
+    void
+    toAron(arondto::Transform& dto, const robot_state::Transform& bo)
     {
         toAron(dto.header, bo.header);
         aron::toAron(dto.transform, bo.transform);
@@ -33,7 +32,8 @@ namespace armarx::armem
 
     /* TransformHeader */
 
-    void toAron(arondto::TransformHeader& dto, const robot_state::TransformHeader& bo)
+    void
+    toAron(arondto::TransformHeader& dto, const robot_state::TransformHeader& bo)
     {
         aron::toAron(dto.parentFrame, bo.parentFrame);
         aron::toAron(dto.frame, bo.frame);
@@ -41,7 +41,8 @@ namespace armarx::armem
         dto.timestamp = bo.timestamp;
     }
 
-    void fromAron(const arondto::TransformHeader& dto, robot_state::TransformHeader& bo)
+    void
+    fromAron(const arondto::TransformHeader& dto, robot_state::TransformHeader& bo)
     {
         aron::fromAron(dto.parentFrame, bo.parentFrame);
         aron::fromAron(dto.frame, bo.frame);
@@ -51,16 +52,49 @@ namespace armarx::armem
 
     /* JointState */
 
-    void fromAron(const arondto::JointState& dto, robot_state::JointState& bo)
+    void
+    fromAron(const arondto::JointState& dto, robot_state::JointState& bo)
     {
         aron::fromAron(dto.name, bo.name);
         aron::fromAron(dto.position, bo.position);
     }
 
-    void toAron(arondto::JointState& dto, const robot_state::JointState& bo)
+    void
+    toAron(arondto::JointState& dto, const robot_state::JointState& bo)
     {
         aron::toAron(dto.name, bo.name);
         aron::toAron(dto.position, bo.position);
     }
 
-}  // namespace armarx::armem
+
+    void
+    fromAron(const armarx::armem::prop::arondto::Platform& dto, robot::PlatformState& bo)
+    {
+        bo.twist.linear.setZero();
+        bo.twist.linear.head<2>() = dto.velocity.head<2>(); // x and y
+
+        bo.twist.angular.setZero();
+        bo.twist.angular.z() = dto.velocity.z(); // yaw
+    }
+
+    void
+    toAron(armarx::armem::prop::arondto::Platform& dto, const robot::PlatformState& bo)
+    {
+        ARMARX_ERROR << "Not implemented yet.";
+    }
+
+    void
+    fromAron(const armarx::armem::prop::arondto::ForceTorque& dto, robot::ForceTorque& bo)
+    {
+        bo.force = dto.force;
+        bo.torque = dto.torque;
+    }
+
+    void
+    toAron(armarx::armem::prop::arondto::ForceTorque& dto, const robot::ForceTorque& bo)
+    {
+        dto.force = bo.force;
+        dto.torque = bo.torque;
+    }
+
+} // namespace armarx::armem
diff --git a/source/RobotAPI/libraries/armem_robot_state/aron_conversions.h b/source/RobotAPI/libraries/armem_robot_state/aron_conversions.h
index 202a81f08..17fe89152 100644
--- a/source/RobotAPI/libraries/armem_robot_state/aron_conversions.h
+++ b/source/RobotAPI/libraries/armem_robot_state/aron_conversions.h
@@ -21,6 +21,9 @@
 
 #pragma once
 
+#include <RobotAPI/libraries/armem_robot/types.h>
+#include <RobotAPI/libraries/armem_robot_state/aron/Proprioception.aron.generated.h>
+
 namespace armarx::armem
 {
     namespace robot_state
@@ -41,6 +44,7 @@ namespace armarx::armem
 
     } // namespace arondto
 
+
     void fromAron(const arondto::Transform& dto, robot_state::Transform& bo);
     void toAron(arondto::Transform& dto, const robot_state::Transform& bo);
 
@@ -50,4 +54,11 @@ namespace armarx::armem
     void fromAron(const arondto::JointState& dto, robot_state::JointState& bo);
     void toAron(arondto::JointState& dto, const robot_state::JointState& bo);
 
-}  // namespace armarx::armem
\ No newline at end of file
+    void fromAron(const armarx::armem::prop::arondto::Platform& dto, robot::PlatformState& bo);
+    void toAron(armarx::armem::prop::arondto::Platform& dto, const robot::PlatformState& bo);
+
+    void fromAron(const armarx::armem::prop::arondto::ForceTorque& dto, robot::ForceTorque& bo);
+    void toAron(armarx::armem::prop::arondto::ForceTorque& dto, const robot::ForceTorque& bo);
+
+
+}  // namespace armarx::armem
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp
index 2264ce364..f0ac51272 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp
@@ -4,11 +4,10 @@
 #include <optional>
 
 #include "ArmarXCore/core/exceptions/local/ExpressionException.h"
+#include "RobotAPI/libraries/armem_robot/types.h"
 #include <ArmarXCore/core/PackagePath.h>
 #include <ArmarXCore/core/exceptions/LocalException.h>
 #include <ArmarXCore/core/logging/Logging.h>
-
-#include "RobotAPI/libraries/armem_robot/types.h"
 #include <RobotAPI/libraries/armem/client/query/Builder.h>
 #include <RobotAPI/libraries/armem/core/Time.h>
 #include <RobotAPI/libraries/armem/core/error.h>
@@ -18,6 +17,7 @@
 #include <RobotAPI/libraries/armem_robot/robot_conversions.h>
 #include <RobotAPI/libraries/armem_robot_state/aron/JointState.aron.generated.h>
 #include <RobotAPI/libraries/armem_robot_state/aron/Proprioception.aron.generated.h>
+#include <RobotAPI/libraries/armem_robot_state/aron_conversions.h>
 
 
 namespace fs = ::std::filesystem;
@@ -508,7 +508,7 @@ namespace armarx::armem::robot_state
                 ARMARX_CHECK(proprioception.has_value());
 
                 platformState = robot::PlatformState(); // initialize optional
-                robot::fromAron(proprioception->platform, platformState.value());
+                fromAron(proprioception->platform, platformState.value());
             });
 
         return platformState;
@@ -554,7 +554,7 @@ namespace armarx::armem::robot_state
                 for (const auto& [handName, dtoFt] : proprioception->forceTorque)
                 {
                     robot::ForceTorque forceTorque;
-                    robot::fromAron(dtoFt, forceTorque);
+                    fromAron(dtoFt, forceTorque);
 
                     const auto hand = fromHandName(handName);
                     forceTorques.emplace(hand, forceTorque);
@@ -588,7 +588,7 @@ namespace armarx::armem::robot_state
                 for (const auto& [handName, dtoFt] : proprioception->forceTorque)
                 {
                     robot::ForceTorque forceTorque;
-                    robot::fromAron(dtoFt, forceTorque);
+                    fromAron(dtoFt, forceTorque);
 
                     const auto hand = fromHandName(handName);
                     forceTorques[hand].emplace(entityInstance.id().timestamp, forceTorque);
@@ -612,7 +612,7 @@ namespace armarx::armem::robot_state
         const armem::wm::EntityInstance* instance = nullptr;
         providerSegment.forEachInstance([&instance](const wm::EntityInstance& i)
                                         { instance = &i; });
-        if (!instance)
+        if (instance == nullptr)
         {
             ARMARX_WARNING << "No entity snapshots found";
             return std::nullopt;
-- 
GitLab