From d13e875144711ca6c687b025a359d834194d5339 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Mon, 6 Mar 2023 14:53:57 +0100
Subject: [PATCH] aron conversions

---
 .../manipulation/core/aron_conversions.cpp    | 251 ++++++++++++------
 .../manipulation/core/aron_conversions.h      |   3 +
 2 files changed, 172 insertions(+), 82 deletions(-)

diff --git a/source/armarx/manipulation/core/aron_conversions.cpp b/source/armarx/manipulation/core/aron_conversions.cpp
index 7e8c5521..9b1a6077 100644
--- a/source/armarx/manipulation/core/aron_conversions.cpp
+++ b/source/armarx/manipulation/core/aron_conversions.cpp
@@ -20,96 +20,111 @@
  *             GNU General Public License
  */
 
-#include <RobotAPI/libraries/armem_robot/types.h>
+#include "aron_conversions.h"
+
+#include "ArmarXCore/core/logging/Logging.h"
+
 #include <RobotAPI/libraries/armem_robot/aron_conversions.h>
+#include <RobotAPI/libraries/armem_robot/types.h>
 #include <RobotAPI/libraries/aron/common/aron_conversions.h>
-#include <armarx/manipulation/core/aron/Affordance.aron.generated.h>
-#include <armarx/manipulation/core/aron/ActionHypothesis.aron.generated.h>
-#include <armarx/manipulation/core/aron/ExecutableAction.aron.generated.h>
-#include <armarx/manipulation/core/aron/ExecutedAction.aron.generated.h>
-#include <armarx/manipulation/core/aron/FramedUncertainPose.aron.generated.h>
-#include <armarx/manipulation/core/aron/HandTrajectory.aron.generated.h>
-#include <armarx/manipulation/core/aron/SituatedAffordance.aron.generated.h>
-#include <armarx/manipulation/core/aron/Arm.aron.generated.h>
-#include <armarx/manipulation/core/aron/Hand.aron.generated.h>
-#include <armarx/manipulation/core/aron/ManipulationProcess.aron.generated.h>
-#include <armarx/manipulation/core/Affordance.h>
+
 #include <armarx/manipulation/core/ActionHypothesis.h>
+#include <armarx/manipulation/core/Affordance.h>
 #include <armarx/manipulation/core/AffordanceTypes.h>
 #include <armarx/manipulation/core/ExecutableAction.h>
 #include <armarx/manipulation/core/ExecutedAction.h>
 #include <armarx/manipulation/core/FramedUncertainPose.h>
 #include <armarx/manipulation/core/HandTrajectory.h>
-#include <armarx/manipulation/core/SituatedAffordance.h>
 #include <armarx/manipulation/core/ManipulationProcess.h>
+#include <armarx/manipulation/core/SituatedAffordance.h>
 #include <armarx/manipulation/core/arm.h>
+#include <armarx/manipulation/core/aron/ActionHypothesis.aron.generated.h>
+#include <armarx/manipulation/core/aron/Affordance.aron.generated.h>
+#include <armarx/manipulation/core/aron/Arm.aron.generated.h>
+#include <armarx/manipulation/core/aron/ExecutableAction.aron.generated.h>
+#include <armarx/manipulation/core/aron/ExecutedAction.aron.generated.h>
+#include <armarx/manipulation/core/aron/FramedUncertainPose.aron.generated.h>
+#include <armarx/manipulation/core/aron/Hand.aron.generated.h>
+#include <armarx/manipulation/core/aron/HandTrajectory.aron.generated.h>
+#include <armarx/manipulation/core/aron/ManipulationProcess.aron.generated.h>
+#include <armarx/manipulation/core/aron/SituatedAffordance.aron.generated.h>
 #include <armarx/manipulation/meta/transform_container.h>
 
-#include "ArmarXCore/core/logging/Logging.h"
-#include "aron_conversions.h"
-
 namespace armarx::manipulation::core
 {
     // namespace aron_helpers
     //    {
-    armarx::FramedPose toFramedPose(const arondto::FramedUncertainPose& pose)
+    armarx::FramedPose
+    toFramedPose(const arondto::FramedUncertainPose& pose)
     {
         // TODO: should agent be reference frame. In FramedPose agent is not used for anything (as far as I can tell)
         return {pose.uncertainPose.pose, pose.header.frame, pose.header.agent};
     }
 
-    armarx::FramedPose toFramedPose(const FramedUncertainPose& pose)
+    armarx::FramedPose
+    toFramedPose(const FramedUncertainPose& pose)
     {
         return toFramedPose(toAron(pose));
     }
 
-    arondto::Affordance toAron(const Affordance& bo)
+    arondto::Affordance
+    toAron(const Affordance& bo)
     {
         arondto::Affordance aff;
         toAron(aff, bo);
         return aff;
     }
 
-    Affordance fromAron(const arondto::Affordance& dto)
+    Affordance
+    fromAron(const arondto::Affordance& dto)
     {
         armem::robot::RobotDescription description;
         armem::robot::fromAron(dto.robotDescription, description);
         return {dto.actionType, description};
     }
 
-    arondto::FramedUncertainPose toAron(const FramedUncertainPose& bo)
+    arondto::FramedUncertainPose
+    toAron(const FramedUncertainPose& bo)
     {
         arondto::FramedUncertainPose pose;
         toAron(pose, bo);
         return pose;
     }
 
-    FramedUncertainPose fromAron(const arondto::FramedUncertainPose& dto)
+    FramedUncertainPose
+    fromAron(const arondto::FramedUncertainPose& dto)
     {
         return {toFramedPose(dto), dto.uncertainPose.covariance};
     }
 
-    arondto::ActionHypothesis toAron(const ActionHypothesis& bo)
+    arondto::ActionHypothesis
+    toAron(const ActionHypothesis& bo)
     {
         arondto::ActionHypothesis dto;
         toAron(dto, bo);
         return dto;
     }
 
-    ActionHypothesis fromAron(const arondto::ActionHypothesis& dto)
+    ActionHypothesis
+    fromAron(const arondto::ActionHypothesis& dto)
     {
-        return {fromAron(dto.affordance), fromAron(dto.framedPose), dto.observationTime, dto.handedness,
+        return {fromAron(dto.affordance),
+                fromAron(dto.framedPose),
+                dto.observationTime,
+                dto.handedness,
                 dto.existenceCertainty};
     }
 
-    arondto::ExecutableAction toAron(const ExecutableAction& bo)
+    arondto::ExecutableAction
+    toAron(const ExecutableAction& bo)
     {
         arondto::ExecutableAction dto;
         toAron(dto, bo);
         return dto;
     }
 
-    ExecutableAction fromAron(const arondto::ExecutableAction& dto)
+    ExecutableAction
+    fromAron(const arondto::ExecutableAction& dto)
     {
         std::optional<armarx::FramedPose> platformPose;
 
@@ -122,7 +137,7 @@ namespace armarx::manipulation::core
         }
         ARMARX_CHECK_NOT_EMPTY(dto.unimanual);
         std::vector<ExecutableAction::Unimanual> unimanuals;
-        for (const auto& um: dto.unimanual)
+        for (const auto& um : dto.unimanual)
         {
             std::optional<armarx::FramedPose> execPose;
             std::optional<armarx::FramedPose> prePose;
@@ -162,35 +177,44 @@ namespace armarx::manipulation::core
             }
             // TODO: this shold work under c++20
             //            unimanuals.emplace_back(hypothesis, prePose, retractPose, trajectory);
-            unimanuals.push_back(
-                    {.hypothesis=hypothesis, .execPose=execPose, .prePose=prePose, .retractPose=retractPose, .actionTrajectory=trajectory, .handedness=handedness});
+            unimanuals.push_back({.hypothesis = hypothesis,
+                                  .execPose = execPose,
+                                  .prePose = prePose,
+                                  .retractPose = retractPose,
+                                  .actionTrajectory = trajectory,
+                                  .handedness = handedness});
         }
 
         return {unimanuals,
-                {.platformPose=platformPose, .platformPlanningStrategy=dto.common.platformPlanningStrategy},
+                {.platformPose = platformPose,
+                 .platformPlanningStrategy = dto.common.platformPlanningStrategy},
                 dto.planningInformation};
     }
 
-    arondto::SituatedAffordance toAron(const SituatedAffordance& bo)
+    arondto::SituatedAffordance
+    toAron(const SituatedAffordance& bo)
     {
         arondto::SituatedAffordance dto;
         toAron(dto, bo);
         return dto;
     }
 
-    SituatedAffordance fromAron(const arondto::SituatedAffordance& dto)
+    SituatedAffordance
+    fromAron(const arondto::SituatedAffordance& dto)
     {
         return {dto.frame, fromAron(dto.affordance), dto.keyPoint, dto.pointCloud};
     }
     //    }
 
-    void toAron(arondto::Affordance& dto, const Affordance& bo)
+    void
+    toAron(arondto::Affordance& dto, const Affordance& bo)
     {
         dto.actionType = bo.affordance_type->getID();
         toAron(dto.robotDescription, bo.getRobotDescription());
     }
 
-    void fromAron(const arondto::Affordance& dto, Affordance& bo)
+    void
+    fromAron(const arondto::Affordance& dto, Affordance& bo)
     {
         armem::robot::RobotDescription id;
         fromAron(dto.robotDescription, id);
@@ -198,7 +222,8 @@ namespace armarx::manipulation::core
         bo = Affordance(dto.actionType, id);
     }
 
-    void toAron(arondto::FramedUncertainPose& dto, const FramedUncertainPose& bo)
+    void
+    toAron(arondto::FramedUncertainPose& dto, const FramedUncertainPose& bo)
     {
         dto.header.frame = bo.pose->getFrame();
         dto.header.agent = bo.pose->agent;
@@ -206,12 +231,14 @@ namespace armarx::manipulation::core
         dto.uncertainPose.covariance = bo.covariance;
     }
 
-    void fromAron(const arondto::FramedUncertainPose& dto, FramedUncertainPose& bo)
+    void
+    fromAron(const arondto::FramedUncertainPose& dto, FramedUncertainPose& bo)
     {
         bo = fromAron(dto);
     }
 
-    void toAron(arondto::ActionHypothesis& dto, const ActionHypothesis& bo)
+    void
+    toAron(arondto::ActionHypothesis& dto, const ActionHypothesis& bo)
     {
         toAron(dto.affordance, *bo.affordance);
         toAron(dto.framedPose, *bo.framedPose);
@@ -220,14 +247,16 @@ namespace armarx::manipulation::core
         dto.handedness = bo.handedness;
     }
 
-    void fromAron(const arondto::ActionHypothesis& dto, ActionHypothesis& bo)
+    void
+    fromAron(const arondto::ActionHypothesis& dto, ActionHypothesis& bo)
     {
         bo = fromAron(dto);
     }
 
-    void toAron(arondto::ExecutableAction& dto, const ExecutableAction& bo)
+    void
+    toAron(arondto::ExecutableAction& dto, const ExecutableAction& bo)
     {
-        for (const auto& um: bo.unimanual)
+        for (const auto& um : bo.unimanual)
         {
             auto& dto_um = dto.unimanual.emplace_back();
             if (um.hypothesis.has_value())
@@ -250,12 +279,14 @@ namespace armarx::manipulation::core
         dto.planningInformation = bo.planningInformation;
     }
 
-    void fromAron(const arondto::ExecutableAction& dto, ExecutableAction& bo)
+    void
+    fromAron(const arondto::ExecutableAction& dto, ExecutableAction& bo)
     {
         bo = fromAron(dto);
     }
 
-    void toAron(arondto::SituatedAffordance& dto, const SituatedAffordance& bo)
+    void
+    toAron(arondto::SituatedAffordance& dto, const SituatedAffordance& bo)
     {
         dto.frame = bo.frame;
         dto.pointCloud = bo.pointCloud;
@@ -266,19 +297,22 @@ namespace armarx::manipulation::core
         toAron(dto.affordance, bo.affordance);
     }
 
-    void fromAron(const arondto::SituatedAffordance& dto, SituatedAffordance& bo)
+    void
+    fromAron(const arondto::SituatedAffordance& dto, SituatedAffordance& bo)
     {
         bo = fromAron(dto);
     }
 
-    arondto::ExecutedAction toAron(const ExecutedAction& bo)
+    arondto::ExecutedAction
+    toAron(const ExecutedAction& bo)
     {
         arondto::ExecutedAction exAction;
         toAron(exAction, bo);
         return exAction;
     }
 
-    void toAron(arondto::ExecutedAction& dto, const ExecutedAction& bo)
+    void
+    toAron(arondto::ExecutedAction& dto, const ExecutedAction& bo)
     {
         dto.action = toAron(*bo.action);
         dto.startTime = *bo.startTime;
@@ -293,25 +327,34 @@ namespace armarx::manipulation::core
         dto.debugOutput = bo.debugOutput;
     }
 
-    ExecutedAction fromAron(const arondto::ExecutedAction& dto)
+    ExecutedAction
+    fromAron(const arondto::ExecutedAction& dto)
     {
-        return {fromAron(dto.action), dto.startTime, dto.endTime, dto.success, dto.outcome, dto.comment,
+        return {fromAron(dto.action),
+                dto.startTime,
+                dto.endTime,
+                dto.success,
+                dto.outcome,
+                dto.comment,
                 dto.debugOutput};
     }
 
-    void fromAron(const arondto::ExecutedAction& dto, ExecutedAction& bo)
+    void
+    fromAron(const arondto::ExecutedAction& dto, ExecutedAction& bo)
     {
         bo = fromAron(dto);
     }
 
-    arondto::HandTrajectoryKeypoint toAron(const HandTrajectoryKeypoint& bo)
+    arondto::HandTrajectoryKeypoint
+    toAron(const HandTrajectoryKeypoint& bo)
     {
         auto kp = arondto::HandTrajectoryKeypoint();
         toAron(kp, bo);
         return kp;
     }
 
-    void toAron(arondto::HandTrajectoryKeypoint& dto, const HandTrajectoryKeypoint& bo)
+    void
+    toAron(arondto::HandTrajectoryKeypoint& dto, const HandTrajectoryKeypoint& bo)
     {
         dto.pose = bo.pose.toEigen();
         dto.frame.frame = bo.pose.getFrame();
@@ -319,52 +362,58 @@ namespace armarx::manipulation::core
         dto.fingerValues = bo.fingerValues;
     }
 
-    HandTrajectoryKeypoint fromAron(const arondto::HandTrajectoryKeypoint& dto)
+    HandTrajectoryKeypoint
+    fromAron(const arondto::HandTrajectoryKeypoint& dto)
     {
         return {dto.pose, dto.frame.frame, dto.fingerValues};
     }
 
-    void fromAron(const arondto::HandTrajectoryKeypoint& dto, HandTrajectoryKeypoint& bo)
+    void
+    fromAron(const arondto::HandTrajectoryKeypoint& dto, HandTrajectoryKeypoint& bo)
     {
         bo = fromAron(dto);
     }
 
-    arondto::HandTrajectory toAron(const HandTrajectory& bo)
+    arondto::HandTrajectory
+    toAron(const HandTrajectory& bo)
     {
         auto dto = arondto::HandTrajectory();
         toAron(dto, bo);
         return dto;
     }
 
-    void toAron(arondto::HandTrajectory& dto, const HandTrajectory& bo)
+    void
+    toAron(arondto::HandTrajectory& dto, const HandTrajectory& bo)
     {
-        std::transform(bo.keypoints.begin(), bo.keypoints.end(), std::back_inserter(dto.keypoints),
+        std::transform(bo.keypoints.begin(),
+                       bo.keypoints.end(),
+                       std::back_inserter(dto.keypoints),
                        [](const auto& kp) -> arondto::HandTrajectoryKeypoint
-                       {
-                           return toAron(kp);
-                       });
+                       { return toAron(kp); });
         dto.duration = bo.duration;
     }
 
-    HandTrajectory fromAron(const arondto::HandTrajectory& dto)
+    HandTrajectory
+    fromAron(const arondto::HandTrajectory& dto)
     {
         auto traj = HandTrajectory();
         traj.duration = dto.duration;
-        std::transform(dto.keypoints.begin(), dto.keypoints.end(), std::back_inserter(traj.keypoints),
-                       [](const auto& kp) -> HandTrajectoryKeypoint
-                       {
-                           return fromAron(kp);
-                       });
+        std::transform(dto.keypoints.begin(),
+                       dto.keypoints.end(),
+                       std::back_inserter(traj.keypoints),
+                       [](const auto& kp) -> HandTrajectoryKeypoint { return fromAron(kp); });
         return traj;
     }
 
-    void fromAron(const arondto::HandTrajectory& dto, HandTrajectory& bo)
+    void
+    fromAron(const arondto::HandTrajectory& dto, HandTrajectory& bo)
     {
         bo = fromAron(dto);
     }
 
 
-    void fromAron(const arondto::Arm& dto, Arm& bo)
+    void
+    fromAron(const arondto::Arm& dto, Arm& bo)
     {
         switch (dto.value)
         {
@@ -377,7 +426,8 @@ namespace armarx::manipulation::core
         }
     }
 
-    void fromAron(const arondto::Hand& dto, Hand& bo)
+    void
+    fromAron(const arondto::Hand& dto, Hand& bo)
     {
         switch (dto.value)
         {
@@ -392,35 +442,72 @@ namespace armarx::manipulation::core
         }
     }
 
-    arondto::ManipulationProcess toAron(const ManipulationProcess& bo)
+
+    void
+    toAron(arondto::Arm& dto, const Arm& bo)
+    {
+        switch (bo)
+        {
+            case Arm::Left:
+                dto = arondto::Arm::Left;
+                break;
+            case Arm::Right:
+                dto = arondto::Arm::Right;
+                break;
+            default:
+                ARMARX_ERROR << "Invalid arm";
+        }
+    }
+
+    void
+    toAron(arondto::Hand& dto, const Hand& bo)
+    {
+        switch (bo)
+        {
+            case Hand::Left:
+                dto = arondto::Hand::Left;
+                break;
+            case Hand::Right:
+                dto = arondto::Hand::Right;
+                break;
+            default:
+                ARMARX_ERROR << "Invalid hand";
+        }
+    }
+
+    arondto::ManipulationProcess
+    toAron(const ManipulationProcess& bo)
     {
         auto dto = arondto::ManipulationProcess();
         toAron(dto, bo);
         return dto;
     }
 
-    void toAron(arondto::ManipulationProcess& dto, const ManipulationProcess& bo)
+    void
+    toAron(arondto::ManipulationProcess& dto, const ManipulationProcess& bo)
     {
-        dto.actionHypotheses = meta::transform_container(bo.actionHypotheses, [](const auto& el)
-        {
-            return toAron(el);
-        });
+        dto.actionHypotheses = meta::transform_container(bo.actionHypotheses,
+                                                         [](const auto& el) { return toAron(el); });
         dto.executedAction = toAron(*bo.executedAction);
         dto.pointCloud = bo.pointCloud;
     }
 
-    ManipulationProcess fromAron(const arondto::ManipulationProcess& dto)
+    ManipulationProcess
+    fromAron(const arondto::ManipulationProcess& dto)
     {
         std::optional<armarx::manipulation::core::ExecutedAction> action;
-        if (dto.executedAction.has_value()) action = fromAron(dto.executedAction.value());
-        return ManipulationProcess{.actionHypotheses=meta::transform_container(dto.actionHypotheses, [](const auto& el)
-        {
-            return fromAron(el);
-        }), .executedAction=action, .pointCloud=dto.pointCloud};
+        if (dto.executedAction.has_value())
+            action = fromAron(dto.executedAction.value());
+        return ManipulationProcess{
+            .actionHypotheses = meta::transform_container(
+                dto.actionHypotheses, [](const auto& el) { return fromAron(el); }),
+            .executedAction = action,
+            .pointCloud = dto.pointCloud};
     }
 
-    void fromAron(const arondto::ManipulationProcess& dto, ManipulationProcess& bo)
+    void
+    fromAron(const arondto::ManipulationProcess& dto, ManipulationProcess& bo)
     {
         bo = fromAron(dto);
     }
-}
+} // namespace armarx::manipulation::core
diff --git a/source/armarx/manipulation/core/aron_conversions.h b/source/armarx/manipulation/core/aron_conversions.h
index 680686ea..f91ab090 100644
--- a/source/armarx/manipulation/core/aron_conversions.h
+++ b/source/armarx/manipulation/core/aron_conversions.h
@@ -78,6 +78,9 @@ namespace armarx::manipulation::core
     void fromAron(const arondto::Arm& dto, Arm& bo);
     void fromAron(const arondto::Hand& dto, Hand& bo);
 
+    void toAron(arondto::Arm& dto, const Arm& bo);
+    void toAron(arondto::Hand& dto, const Hand& bo);
+
     namespace arondto
     {
         using ::armarx::manipulation::core::fromAron;
-- 
GitLab