From 0e2f0c15f5a36476d8d39d87e5a88d13a45f11da Mon Sep 17 00:00:00 2001
From: alissa <alissamueller@outlook.de>
Date: Sun, 23 May 2021 21:42:21 +0200
Subject: [PATCH] added aron conversions for GraspCandidate

---
 .../libraries/GraspingUtility/CMakeLists.txt  |   2 +
 .../GraspingUtility/aron/GraspCandidate.xml   |   2 +-
 .../GraspingUtility/aron_conversions.cpp      | 394 ++++++++++++++++++
 .../GraspingUtility/aron_conversions.h        |  38 ++
 4 files changed, 435 insertions(+), 1 deletion(-)
 create mode 100644 source/RobotAPI/libraries/GraspingUtility/aron_conversions.cpp
 create mode 100644 source/RobotAPI/libraries/GraspingUtility/aron_conversions.h

diff --git a/source/RobotAPI/libraries/GraspingUtility/CMakeLists.txt b/source/RobotAPI/libraries/GraspingUtility/CMakeLists.txt
index 5cb6bde5c..6b4585dec 100644
--- a/source/RobotAPI/libraries/GraspingUtility/CMakeLists.txt
+++ b/source/RobotAPI/libraries/GraspingUtility/CMakeLists.txt
@@ -10,11 +10,13 @@ armarx_add_library(
              grasp_candidate_drawer.cpp
              GraspCandidateHelper.cpp
              BimanualGraspCandidateHelper.cpp
+             aron_conversions.cpp
     HEADERS  box_to_grasp_candidates.h
              box_to_grasp_candidates.ipp
              grasp_candidate_drawer.h
              GraspCandidateHelper.h
              BimanualGraspCandidateHelper.h
+             aron_conversions.h
 )
 armarx_enable_aron_file_generation_for_target(
     TARGET_NAME
diff --git a/source/RobotAPI/libraries/GraspingUtility/aron/GraspCandidate.xml b/source/RobotAPI/libraries/GraspingUtility/aron/GraspCandidate.xml
index 21bcc2e7a..09bd0cf39 100644
--- a/source/RobotAPI/libraries/GraspingUtility/aron/GraspCandidate.xml
+++ b/source/RobotAPI/libraries/GraspingUtility/aron/GraspCandidate.xml
@@ -96,7 +96,7 @@
             </ObjectChild>
 
             <ObjectChild key='approachVector'>
-                <Pose />
+                <Position />
             </ObjectChild>
 
             <ObjectChild key='sourceFrame'>
diff --git a/source/RobotAPI/libraries/GraspingUtility/aron_conversions.cpp b/source/RobotAPI/libraries/GraspingUtility/aron_conversions.cpp
new file mode 100644
index 000000000..c4c50a040
--- /dev/null
+++ b/source/RobotAPI/libraries/GraspingUtility/aron_conversions.cpp
@@ -0,0 +1,394 @@
+#include "aron_conversions.h"
+
+#include <RobotAPI/libraries/aron/common/aron_conversions.h>
+#include <RobotAPI/libraries/armem_objects/aron_conversions.h>
+#include <RobotAPI/libraries/core/Pose.h>
+#include <RobotAPI/libraries/ArmarXObjects/aron_conversions.h>
+#include <ArmarXCore/core/exceptions/local/UnexpectedEnumValueException.h>
+
+
+
+void armarx::grasping::fromAron(const armarx::grasping::arondto::BoundingBox& dto, armarx::grasping::BoundingBox& bo)
+{
+    bo = BoundingBox(toIce(dto.center), toIce(dto.ha1), toIce(dto.ha2), toIce(dto.ha3));
+}
+
+void armarx::grasping::toAron(armarx::grasping::arondto::BoundingBox& dto, const armarx::grasping::BoundingBox& bo)
+{
+    dto.center = fromIce(bo.center);
+    dto.ha1 = fromIce(bo.ha1);
+    dto.ha2 = fromIce(bo.ha2);
+    dto.ha3 = fromIce(bo.ha3);
+}
+
+void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidateSourceInfo& dto, armarx::grasping::GraspCandidateSourceInfo& bo)
+{
+    bo = GraspCandidateSourceInfo();
+    bo.bbox = BoundingBoxPtr();
+    fromAron(dto.bbox, *bo.bbox);
+    bo.referenceObjectName = dto.referenceObjectName;
+    bo.referenceObjectPose = toIce(dto.referenceObjectPose);
+    bo.segmentationLabelID = dto.segmentationLabelID;
+}
+
+void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidateSourceInfo& dto, const armarx::grasping::GraspCandidateSourceInfo& bo)
+{
+    toAron(dto.bbox, *bo.bbox);
+    dto.referenceObjectName = bo.referenceObjectName;
+    dto.referenceObjectPose = fromIce(bo.referenceObjectPose);
+    dto.segmentationLabelID = bo.segmentationLabelID;
+
+}
+
+void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidateReachabilityInfo& dto, armarx::grasping::GraspCandidateReachabilityInfo& bo)
+{
+    bo = GraspCandidateReachabilityInfo(dto.reachable, dto.minimumJointLimitMargin, dto.jointLimitMargins,
+                                        dto.maxPosError, dto.maxOriError);
+}
+
+void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidateReachabilityInfo& dto, const armarx::grasping::GraspCandidateReachabilityInfo& bo)
+{
+    dto.jointLimitMargins = bo.jointLimitMargins;
+    dto.maxOriError = bo.maxOriError;
+    dto.maxPosError = bo.maxPosError;
+    dto.minimumJointLimitMargin = bo.minimumJointLimitMargin;
+    dto.reachable = bo.reachable;
+}
+
+void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidate& dto, armarx::grasping::GraspCandidate& bo)
+{
+    bo = GraspCandidate();
+    bo.graspPose = toIce(dto.graspPose);
+    bo.robotPose = toIce(dto.robotPose);
+    bo.approachVector = toIce(dto.approachVector);
+    bo.sourceFrame = dto.sourceFrame;
+    bo.targetFrame = dto.targetFrame;
+    bo.side = dto.side;
+    bo.graspSuccessProbability = dto.graspSuccessProbability;
+    fromAron(dto.objectType, bo.objectType);
+    if (dto.executionHintsValid)
+    {
+        bo.executionHints = GraspCandidateExecutionHintsPtr();
+        fromAron(dto.executionHints, *bo.executionHints);
+    }
+    else
+    {
+        bo.executionHints = nullptr;
+    }
+    bo.groupNr = dto.groupNr;
+    bo.providerName = dto.providerName;
+    if (dto.reachabilityInfoValid)
+    {
+        bo.reachabilityInfo = GraspCandidateReachabilityInfoPtr();
+        fromAron(dto.reachabilityInfo, *bo.reachabilityInfo);
+    }
+    else
+    {
+        bo.reachabilityInfo = nullptr;
+    }
+    if (dto.sourceInfoValid)
+    {
+        bo.sourceInfo = GraspCandidateSourceInfoPtr();
+        fromAron(dto.sourceInfo, *bo.sourceInfo);
+    }
+    else
+    {
+        bo.sourceInfo = nullptr;
+    }
+}
+
+void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidate& dto, const armarx::grasping::GraspCandidate& bo)
+{
+    dto.approachVector = fromIce(bo.approachVector);
+    if (bo.executionHints)
+    {
+        dto.executionHintsValid = true;
+        toAron(dto.executionHints, *bo.executionHints);
+    }
+    else
+    {
+        dto.executionHintsValid = false;
+        toAron(dto.executionHints, GraspCandidateExecutionHints());
+    }
+    dto.graspPose = fromIce(bo.graspPose);
+    dto.graspSuccessProbability = bo.graspSuccessProbability;
+    dto.groupNr = bo.groupNr;
+    toAron(dto.objectType, bo.objectType);
+    dto.providerName = bo.providerName;
+    if (bo.reachabilityInfo)
+    {
+        dto.reachabilityInfoValid = true;
+        toAron(dto.reachabilityInfo, *bo.reachabilityInfo);
+    }
+    else
+    {
+        dto.reachabilityInfoValid = false;
+        toAron(dto.reachabilityInfo, GraspCandidateReachabilityInfo());
+    }
+    dto.robotPose = fromIce(bo.robotPose);
+    dto.side = bo.side;
+    dto.sourceFrame = bo.sourceFrame;
+    if (bo.sourceInfo)
+    {
+        dto.sourceInfoValid = true;
+        toAron(dto.sourceInfo, *bo.sourceInfo);
+    }
+    else
+    {
+        dto.sourceInfoValid = false;
+        toAron(dto.sourceInfo, GraspCandidateSourceInfo());
+    }
+    dto.targetFrame = bo.targetFrame;
+}
+
+void armarx::grasping::fromAron(const armarx::grasping::arondto::BimanualGraspCandidate& dto, armarx::grasping::BimanualGraspCandidate& bo)
+{
+    bo = BimanualGraspCandidate();
+    bo.graspPoseRight = toIce(dto.graspPoseRight);
+    bo.graspPoseLeft = toIce(dto.graspPoseLeft);
+    bo.robotPose = toIce(dto.robotPose);
+    bo.approachVectorRight = toIce(dto.approachVectorRight);
+    bo.approachVectorLeft = toIce(dto.approachVectorLeft);
+    bo.inwardsVectorRight = toIce(dto.inwardsVectorRight);
+    bo.inwardsVectorLeft = toIce(dto.inwardsVectorLeft);
+    bo.sourceFrame = dto.sourceFrame;
+    bo.targetFrame = dto.targetFrame;
+    fromAron(dto.objectType, bo.objectType);
+    if (dto.executionHintsRightValid)
+    {
+        bo.executionHintsRight = GraspCandidateExecutionHintsPtr();
+        fromAron(dto.executionHintsRight, *bo.executionHintsRight);
+    }
+    else
+    {
+        bo.executionHintsRight = nullptr;
+    }
+    if (dto.executionHintsLeftValid)
+    {
+        bo.executionHintsLeft = GraspCandidateExecutionHintsPtr();
+        fromAron(dto.executionHintsLeft, *bo.executionHintsLeft);
+    }
+    else
+    {
+        bo.executionHintsLeft = nullptr;
+    }
+    bo.groupNr = dto.groupNr;
+    bo.providerName = dto.providerName;
+    if (dto.reachabilityInfoRightValid)
+    {
+        bo.reachabilityInfoRight = GraspCandidateReachabilityInfoPtr();
+        fromAron(dto.reachabilityInfoRight, *bo.reachabilityInfoRight);
+    }
+    else
+    {
+        bo.reachabilityInfoRight = nullptr;
+    }
+    if (dto.reachabilityInfoLeftValid)
+    {
+        bo.reachabilityInfoLeft = GraspCandidateReachabilityInfoPtr();
+        fromAron(dto.reachabilityInfoLeft, *bo.reachabilityInfoLeft);
+    }
+    else
+    {
+        bo.reachabilityInfoLeft = nullptr;
+    }
+    if (dto.sourceInfoValid)
+    {
+        bo.sourceInfo = GraspCandidateSourceInfoPtr();
+        fromAron(dto.sourceInfo, *bo.sourceInfo);
+    }
+    else
+    {
+        bo.sourceInfo = nullptr;
+    }
+    bo.graspName = dto.graspName;
+}
+
+void armarx::grasping::toAron(armarx::grasping::arondto::BimanualGraspCandidate& dto, const armarx::grasping::BimanualGraspCandidate& bo)
+{
+    dto.approachVectorRight = fromIce(bo.approachVectorRight);
+    dto.approachVectorLeft = fromIce(bo.approachVectorLeft);
+    if (bo.executionHintsRight)
+    {
+        dto.executionHintsRightValid = true;
+        toAron(dto.executionHintsRight, *bo.executionHintsRight);
+    }
+    else
+    {
+        dto.executionHintsRightValid = false;
+        toAron(dto.executionHintsRight, GraspCandidateExecutionHints());
+    }
+    if (bo.executionHintsLeft)
+    {
+        dto.executionHintsLeftValid = true;
+        toAron(dto.executionHintsLeft, *bo.executionHintsLeft);
+    }
+    else
+    {
+        dto.executionHintsLeftValid = false;
+        toAron(dto.executionHintsLeft, GraspCandidateExecutionHints());
+
+    }
+    dto.graspPoseRight = fromIce(bo.graspPoseRight);
+    dto.graspPoseLeft = fromIce(bo.graspPoseLeft);
+    dto.groupNr = bo.groupNr;
+    toAron(dto.objectType, bo.objectType);
+    dto.providerName = bo.providerName;
+    if (bo.reachabilityInfoRight)
+    {
+        dto.reachabilityInfoRightValid = true;
+        toAron(dto.reachabilityInfoRight, *bo.reachabilityInfoRight);
+    }
+    else
+    {
+        dto.reachabilityInfoRightValid = false;
+        toAron(dto.reachabilityInfoRight, GraspCandidateReachabilityInfo());
+    }
+    if (bo.reachabilityInfoLeft)
+    {
+        dto.reachabilityInfoLeftValid = true;
+        toAron(dto.reachabilityInfoLeft, *bo.reachabilityInfoLeft);
+    }
+    else
+    {
+        dto.reachabilityInfoLeftValid = false;
+        toAron(dto.reachabilityInfoLeft, GraspCandidateReachabilityInfo());
+    }
+    dto.robotPose = fromIce(bo.robotPose);
+    dto.sourceFrame = bo.sourceFrame;
+    if (bo.sourceInfo)
+    {
+        dto.sourceInfoValid = true;
+        toAron(dto.sourceInfo, *bo.sourceInfo);
+    }
+    else
+    {
+        dto.sourceInfoValid = false;
+        toAron(dto.sourceInfo, GraspCandidateSourceInfo());
+    }
+    dto.targetFrame = bo.targetFrame;
+    dto.inwardsVectorRight = fromIce(bo.inwardsVectorRight);
+    dto.inwardsVectorLeft = fromIce(bo.inwardsVectorLeft);
+    dto.graspName = bo.graspName;
+}
+
+void armarx::grasping::fromAron(const armarx::grasping::arondto::GraspCandidateExecutionHints& dto, armarx::grasping::GraspCandidateExecutionHints& bo)
+{
+    bo = GraspCandidateExecutionHints();
+    fromAron(dto.approach, bo.approach);
+    fromAron(dto.preshape, bo.preshape);
+    bo.graspTrajectoryName = dto.graspTrajectoryName;
+}
+
+void armarx::grasping::toAron(armarx::grasping::arondto::GraspCandidateExecutionHints& dto, const armarx::grasping::GraspCandidateExecutionHints& bo)
+{
+    toAron(dto.approach, bo.approach);
+    toAron(dto.preshape, bo.preshape);
+    dto.graspTrajectoryName = bo.graspTrajectoryName;
+}
+
+void armarx::grasping::fromAron(const armarx::objpose::arondto::ObjectType& dto, armarx::grasping::ObjectTypeEnum& bo)
+{
+    switch (dto.value)
+    {
+        case armarx::objpose::arondto::ObjectType::AnyObject:
+            bo = ObjectTypeEnum::AnyObject;
+            return;
+        case armarx::objpose::arondto::ObjectType::KnownObject:
+            bo = ObjectTypeEnum::KnownObject;
+            return;
+        case armarx::objpose::arondto::ObjectType::UnknownObject:
+            bo = ObjectTypeEnum::UnknownObject;
+            return;
+    }
+    ARMARX_UNEXPECTED_ENUM_VALUE(arondto::ObjectType, dto.value);
+
+}
+
+void armarx::grasping::toAron(armarx::objpose::arondto::ObjectType& dto, const armarx::grasping::ObjectTypeEnum& bo)
+{
+    switch (bo)
+    {
+        case ObjectTypeEnum::AnyObject:
+            dto.value = armarx::objpose::arondto::ObjectType::AnyObject;
+            return;
+        case ObjectTypeEnum::KnownObject:
+            dto.value = armarx::objpose::arondto::ObjectType::KnownObject;
+            return;
+        case ObjectTypeEnum::UnknownObject:
+            dto.value = armarx::objpose::arondto::ObjectType::UnknownObject;
+            return;
+    }
+    ARMARX_UNEXPECTED_ENUM_VALUE(ObjectTypeEnum, bo);
+
+}
+
+void armarx::grasping::fromAron(const armarx::grasping::arondto::ApproachType& dto, armarx::grasping::ApproachType& bo)
+{
+    switch (dto.value)
+    {
+        case arondto::ApproachType::AnyApproach:
+            bo = ApproachType::AnyApproach;
+            return;
+        case arondto::ApproachType::TopApproach:
+            bo = ApproachType::TopApproach;
+            return;
+        case arondto::ApproachType::SideApproach:
+            bo = ApproachType::SideApproach;
+            return;
+    }
+    ARMARX_UNEXPECTED_ENUM_VALUE(arondto::ObjectType, dto.value);
+
+}
+
+void armarx::grasping::toAron(armarx::grasping::arondto::ApproachType& dto, const armarx::grasping::ApproachType& bo)
+{
+    switch (bo)
+    {
+        case ApproachType::AnyApproach:
+            dto.value = arondto::ApproachType::AnyApproach;
+            return;
+        case ApproachType::TopApproach:
+            dto.value = arondto::ApproachType::TopApproach;
+            return;
+        case ApproachType::SideApproach:
+            dto.value = arondto::ApproachType::SideApproach;
+            return;
+    }
+    ARMARX_UNEXPECTED_ENUM_VALUE(ObjectTypeEnum, bo);
+
+}
+
+void armarx::grasping::fromAron(const armarx::grasping::arondto::ApertureType& dto, armarx::grasping::ApertureType& bo)
+{
+    switch (dto.value)
+    {
+        case arondto::ApertureType::AnyAperture:
+            bo = ApertureType::AnyAperture;
+            return;
+        case arondto::ApertureType::OpenAperture:
+            bo = ApertureType::OpenAperture;
+            return;
+        case arondto::ApertureType::PreshapedAperture:
+            bo = ApertureType::PreshapedAperture;
+            return;
+    }
+    ARMARX_UNEXPECTED_ENUM_VALUE(arondto::ObjectType, dto.value);
+}
+
+void armarx::grasping::toAron(armarx::grasping::arondto::ApertureType& dto, const armarx::grasping::ApertureType& bo)
+{
+    switch (bo)
+    {
+        case ApertureType::AnyAperture:
+            dto.value = arondto::ApertureType::AnyAperture;
+            return;
+        case ApertureType::OpenAperture:
+            dto.value = arondto::ApertureType::OpenAperture;
+            return;
+        case ApertureType::PreshapedAperture:
+            dto.value = arondto::ApertureType::PreshapedAperture;
+            return;
+    }
+    ARMARX_UNEXPECTED_ENUM_VALUE(ObjectTypeEnum, bo);
+}
diff --git a/source/RobotAPI/libraries/GraspingUtility/aron_conversions.h b/source/RobotAPI/libraries/GraspingUtility/aron_conversions.h
new file mode 100644
index 000000000..a5f85b3fb
--- /dev/null
+++ b/source/RobotAPI/libraries/GraspingUtility/aron_conversions.h
@@ -0,0 +1,38 @@
+#pragma once
+
+#include <RobotAPI/interface/units/GraspCandidateProviderInterface.h>
+#include <RobotAPI/libraries/GraspingUtility/aron/GraspCandidate.aron.generated.h>
+#include <RobotAPI/libraries/ArmarXObjects/aron/ObjectType.aron.generated.h>
+
+namespace armarx
+{
+    namespace grasping
+    {
+        void fromAron(const armarx::objpose::arondto::ObjectType& dto, ObjectTypeEnum& bo);
+        void toAron(armarx::objpose::arondto::ObjectType& dto, const ObjectTypeEnum& bo);
+
+        void fromAron(const arondto::ApproachType& dto, ApproachType& bo);
+        void toAron(arondto::ApproachType& dto, const ApproachType& bo);
+
+        void fromAron(const arondto::ApertureType& dto, ApertureType& bo);
+        void toAron(arondto::ApertureType& dto, const ApertureType& bo);
+
+        void fromAron(const arondto::BoundingBox& dto, BoundingBox& bo);
+        void toAron(arondto::BoundingBox& dto, const BoundingBox& bo);
+
+        void fromAron(const arondto::GraspCandidateSourceInfo& dto, GraspCandidateSourceInfo& bo);
+        void toAron(arondto::GraspCandidateSourceInfo& dto, const GraspCandidateSourceInfo& bo);
+
+        void fromAron(const arondto::GraspCandidateExecutionHints& dto, GraspCandidateExecutionHints& bo);
+        void toAron(arondto::GraspCandidateExecutionHints& dto, const GraspCandidateExecutionHints& bo);
+
+        void fromAron(const arondto::GraspCandidateReachabilityInfo& dto, GraspCandidateReachabilityInfo& bo);
+        void toAron(arondto::GraspCandidateReachabilityInfo& dto, const GraspCandidateReachabilityInfo& bo);
+
+        void fromAron(const arondto::GraspCandidate& dto, GraspCandidate& bo);
+        void toAron(arondto::GraspCandidate& dto, const GraspCandidate& bo);
+
+        void fromAron(const arondto::BimanualGraspCandidate& dto, BimanualGraspCandidate& bo);
+        void toAron(arondto::BimanualGraspCandidate& dto, const BimanualGraspCandidate& bo);
+    }
+}
-- 
GitLab