From b0166504b1e5be52da78128c9789485fd8e9cc2b Mon Sep 17 00:00:00 2001
From: Jianfeng Gao <jianfeng.gao@kit.edu>
Date: Mon, 4 Dec 2023 12:57:44 +0100
Subject: [PATCH] add FramedPositionAndOrientation aron type and add
 constructor in pose and framed pose related to this type

---
 .../libraries/aron/common/aron/FramedPose.xml       |  5 +++++
 .../RobotAPI/libraries/aron/common/aron/framed.xml  | 13 +++++++++++++
 source/RobotAPI/libraries/core/FramedPose.cpp       |  8 ++++++++
 source/RobotAPI/libraries/core/FramedPose.h         |  1 +
 source/RobotAPI/libraries/core/Pose.cpp             |  7 +++++++
 source/RobotAPI/libraries/core/Pose.h               |  1 +
 6 files changed, 35 insertions(+)

diff --git a/source/RobotAPI/libraries/aron/common/aron/FramedPose.xml b/source/RobotAPI/libraries/aron/common/aron/FramedPose.xml
index ec5aa0c96..9ec219210 100644
--- a/source/RobotAPI/libraries/aron/common/aron/FramedPose.xml
+++ b/source/RobotAPI/libraries/aron/common/aron/FramedPose.xml
@@ -1,6 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <AronTypeDefinition>
 
+    <!--
+    The types defined here are deprecated.
+    Use <Include include="RobotAPI/libraries/aron/common/aron/framed.xml" /> instead.
+    -->
+
     <GenerateTypes>
 
         <Object name="armarx::arondto::FrameHeader">
diff --git a/source/RobotAPI/libraries/aron/common/aron/framed.xml b/source/RobotAPI/libraries/aron/common/aron/framed.xml
index 1fb5025df..0cb7d5e04 100644
--- a/source/RobotAPI/libraries/aron/common/aron/framed.xml
+++ b/source/RobotAPI/libraries/aron/common/aron/framed.xml
@@ -43,6 +43,19 @@
             </ObjectChild>
         </Object>
 
+        <Object name="armarx::arondto::FramedPositionAndOrientation">
+            <ObjectChild key='header'>
+                <armarx::arondto::FrameID />
+            </ObjectChild>
+            <ObjectChild key='position'>
+                <Position />
+            </ObjectChild>
+            <ObjectChild key='orientation'>
+                <Orientation />
+            </ObjectChild>
+        </Object>
+
+
     </GenerateTypes>
 
 </AronTypeDefinition>
diff --git a/source/RobotAPI/libraries/core/FramedPose.cpp b/source/RobotAPI/libraries/core/FramedPose.cpp
index e309cc113..0f18dcad5 100644
--- a/source/RobotAPI/libraries/core/FramedPose.cpp
+++ b/source/RobotAPI/libraries/core/FramedPose.cpp
@@ -382,6 +382,14 @@ namespace armarx
         this->agent = agent;
     }
 
+    FramedPose::FramedPose(const Eigen::Vector3f& pos, const Eigen::Quaternionf& ori, const std::string& frame, const std::string& agent) :
+        Pose(pos, ori)
+    {
+        this->frame = frame;
+        this->agent = agent;
+    }
+
+
     std::string FramedPose::getFrame() const
     {
         return frame;
diff --git a/source/RobotAPI/libraries/core/FramedPose.h b/source/RobotAPI/libraries/core/FramedPose.h
index 0abe9ab2a..8538d6ba2 100644
--- a/source/RobotAPI/libraries/core/FramedPose.h
+++ b/source/RobotAPI/libraries/core/FramedPose.h
@@ -264,6 +264,7 @@ namespace armarx
         FramedPose(const FramedPose& pose);
         FramedPose(const Eigen::Matrix3f& m, const Eigen::Vector3f& v, const std::string& frame, const std::string& agent);
         FramedPose(const Eigen::Matrix4f& m, const std::string& frame, const std::string& agent);
+        FramedPose(const Eigen::Vector3f& pos, const Eigen::Quaternionf& ori, const std::string& frame, const std::string& agent);
         FramedPose(const armarx::Vector3BasePtr pos, const armarx::QuaternionBasePtr ori, const std::string& frame, const std::string& agent);
 
         FramedPose& operator=(const armarx::FramedPose&) = default;
diff --git a/source/RobotAPI/libraries/core/Pose.cpp b/source/RobotAPI/libraries/core/Pose.cpp
index 324ac1afa..496affc85 100644
--- a/source/RobotAPI/libraries/core/Pose.cpp
+++ b/source/RobotAPI/libraries/core/Pose.cpp
@@ -315,6 +315,13 @@ namespace armarx
         init();
     }
 
+    Pose::Pose(const Eigen::Vector3f& position, const Eigen::Quaternionf& quaternion)
+    {
+        this->position = new Vector3(position);
+        this->orientation = new Quaternion(quaternion);
+        init();
+    }
+
     void
     Pose::operator=(const Eigen::Matrix4f& matrix)
     {
diff --git a/source/RobotAPI/libraries/core/Pose.h b/source/RobotAPI/libraries/core/Pose.h
index 18332395d..42309c657 100644
--- a/source/RobotAPI/libraries/core/Pose.h
+++ b/source/RobotAPI/libraries/core/Pose.h
@@ -246,6 +246,7 @@ namespace armarx
         Pose(const Pose& source);
         Pose(const Eigen::Matrix4f&);
         Pose(const Eigen::Matrix3f&, const Eigen::Vector3f&);
+        Pose(const Eigen::Vector3f&, const Eigen::Quaternionf&);
         Pose(const armarx::Vector3BasePtr pos, const armarx::QuaternionBasePtr ori);
         Pose& operator=(const Pose&) = default;
 
-- 
GitLab