From 9b69df8b7881968db0e5945e1c72df46804a2ab2 Mon Sep 17 00:00:00 2001
From: Franziska Krebs <franzikrebs@gmx.de>
Date: Tue, 12 Oct 2021 13:28:13 +0200
Subject: [PATCH] added from and toAron

---
 .../libraries/armem_mps/CMakeLists.txt        |  4 +-
 .../libraries/armem_mps/aron_conversions.cpp  | 62 +++++++++++++++++++
 .../libraries/armem_mps/aron_conversions.h    | 11 ++--
 3 files changed, 70 insertions(+), 7 deletions(-)

diff --git a/source/RobotAPI/libraries/armem_mps/CMakeLists.txt b/source/RobotAPI/libraries/armem_mps/CMakeLists.txt
index dc5a3f37d..44dfe5155 100644
--- a/source/RobotAPI/libraries/armem_mps/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem_mps/CMakeLists.txt
@@ -17,12 +17,12 @@ armarx_add_library(
         RobotAPI::PriorKnowledge::Motions
         VirtualRobot
     SOURCES  
-        #./aron_conversions.cpp
+        ./aron_conversions.cpp
         #./traj_conversions.cpp
         ./server/MotionPrimitives/motionprimitives.cpp
         ./server/MotionPrimitives/Segment.cpp
     HEADERS  
-        #./aron_conversions.h
+        ./aron_conversions.h
         #./traj_conversions.h
         ./server/MotionPrimitives/motionprimitives.h
         ./server/MotionPrimitives/Segment.h
diff --git a/source/RobotAPI/libraries/armem_mps/aron_conversions.cpp b/source/RobotAPI/libraries/armem_mps/aron_conversions.cpp
index 5311e5ca9..4451bc835 100644
--- a/source/RobotAPI/libraries/armem_mps/aron_conversions.cpp
+++ b/source/RobotAPI/libraries/armem_mps/aron_conversions.cpp
@@ -1,8 +1,70 @@
 #include "aron_conversions.h"
 #include <RobotAPI/libraries/aron/common/aron_conversions.h>
 #include <dmp/representation/dmp/umitsmp.h>
+#include <VirtualRobot/MathTools.h>
 
 namespace armarx::armem
 {
 
+void fromAron(const arondto::Trajectory &dto, DMP::SampledTrajectoryV2 &bo, bool taskspace)
+{
+    std::map<double, DMP::DVec> traj_map;
+    if(taskspace){
+        for(auto element : dto.taskSpace.steps){
+            DMP::DVec pose;
+            pose.push_back(element.pose(0,3));
+            pose.push_back(element.pose(1,3));
+            pose.push_back(element.pose(2,3));
+            VirtualRobot::MathTools::Quaternion quat = VirtualRobot::MathTools::eigen4f2quat(element.pose);
+            pose.push_back(quat.w);
+            pose.push_back(quat.x);
+            pose.push_back(quat.y);
+            pose.push_back(quat.z);
+            traj_map.insert(std::make_pair(element.timestep, pose));
+        }
+
+    }else{
+        for(auto element : dto.jointSpace.steps){
+            DMP::DVec jointvalues;
+            for(auto angle: element.jointValues){
+                jointvalues.push_back(double(angle));
+            }
+            traj_map.insert(std::make_pair(element.timestep, jointvalues));
+        }
+    }
+}
+
+void toAron(arondto::Trajectory &dto, const DMP::SampledTrajectoryV2 &bo_taskspace, const DMP::SampledTrajectoryV2 &bo_jointspace, const std::string name)
+{
+    dto.name = name;
+    std::map<std::string, std::vector<float>> mapJointSpace;
+
+    // taskspace
+    std::map<double, DMP::DVec> ts_map = bo_taskspace.getPositionData();
+    for(std::pair<double, DMP::DVec> element: ts_map){
+        Eigen::Vector3f vec(element.second.at(0), element.second.at(1), element.second.at(2));
+        Eigen::Matrix<float, 4, 4> poseMatrix = VirtualRobot::MathTools::quat2eigen4f(element.second.at(4), element.second.at(5), element.second.at(6), element.second.at(3));
+        poseMatrix.block<3, 1>(0, 3) = vec;
+        arondto::TSElement tselement;
+        tselement.timestep = element.first;
+        tselement.pose = poseMatrix;
+        dto.taskSpace.steps.push_back(tselement);
+
+    }
+
+    // jointspace
+    std::map<double, DMP::DVec> js_map = bo_jointspace.getPositionData();
+    for(std::pair<double, DMP::DVec> element: js_map){
+        std::vector<float> configvec;
+        for(double el: element.second){
+            configvec.push_back(float(el));
+        }
+        arondto::JSElement jselement;
+        jselement.timestep = element.first;
+        jselement.jointValues = configvec;
+        dto.jointSpace.steps.push_back(jselement);
+    }
+
+}
+
 }
diff --git a/source/RobotAPI/libraries/armem_mps/aron_conversions.h b/source/RobotAPI/libraries/armem_mps/aron_conversions.h
index a4a9f9f62..2e5656927 100644
--- a/source/RobotAPI/libraries/armem_mps/aron_conversions.h
+++ b/source/RobotAPI/libraries/armem_mps/aron_conversions.h
@@ -5,9 +5,12 @@
 
 //#include <RobotAPI/libraries/armem_skills/aron/Statechart.aron.generated.h>
 #include <RobotAPI/libraries/armem_mps/aron/Trajectory.aron.generated.h>
+#include <RobotAPI/libraries/armem_mps/aron/Trajectory.aron.generated.h>
+
+#include <dmp/representation/trajectory.h>
 //#include <dmp
 
-namespace armarx::armem
+namespace armarx
 {
     /*void fromAron(const armarx::armem::arondto::Statechart::StateType& dto, armarx::eStateType& bo);
     void toAron(armarx::armem::arondto::Statechart::StateType& dto, const armarx::eStateType& bo);
@@ -20,10 +23,8 @@ namespace armarx::armem
 
     //void fromAron(const armarx::armem_mps::arondto::Trajectory& dto, armarx::Trajectory& bo);
     //void toAron(arondto::ObjectClass& dto, const RobotDescription& bo);
-
-    void fromAronToTraj();
-    void toAronFromTraj();
-    void toAronFromPath();
+    void fromAron(const armem::arondto::Trajectory& dto, DMP::SampledTrajectoryV2& bo, bool taskspace);
+    void toAron(armem::arondto::Trajectory& dto, const DMP::SampledTrajectoryV2& bo_taskspace, const DMP::SampledTrajectoryV2& bo_jointspace, const std::string name);
 
     //todo: trajbo zu dmptraj (und umgekehrt)
 }
-- 
GitLab