From 227e646094f60c3d41ef51bfc6213b941a13bad6 Mon Sep 17 00:00:00 2001 From: Fabian Peller <fabian.peller-konrad@kit.edu> Date: Wed, 15 Nov 2023 15:54:53 +0100 Subject: [PATCH] add features to objectclass --- .../armem_objects/aron/ObjectClass.xml | 30 +++++++++ .../armem_objects/aron_conversions.cpp | 65 +++++++++++++++++++ .../armem_objects/aron_conversions.h | 34 ++++++---- .../RobotAPI/libraries/armem_objects/types.h | 35 +++++++++- 4 files changed, 150 insertions(+), 14 deletions(-) diff --git a/source/RobotAPI/libraries/armem_objects/aron/ObjectClass.xml b/source/RobotAPI/libraries/armem_objects/aron/ObjectClass.xml index e2d695429..019987f50 100644 --- a/source/RobotAPI/libraries/armem_objects/aron/ObjectClass.xml +++ b/source/RobotAPI/libraries/armem_objects/aron/ObjectClass.xml @@ -13,6 +13,30 @@ Core segment type of Object/Class. </AronIncludes> <GenerateTypes> + <Object name="armarx::armem::arondto::Feature"> + <ObjectChild key="angle"> + <float32 /> + </ObjectChild> + + <ObjectChild key="scale"> + <float32 /> + </ObjectChild> + + <ObjectChild key="point2d"> + <vector2f /> + </ObjectChild> + + <ObjectChild key="point3d"> + <vector3f /> + </ObjectChild> + + <ObjectChild key="feature"> + <List> + <float32 /> + </List> + </ObjectChild> + </Object> + <Object name="armarx::armem::arondto::ObjectClass"> <ObjectChild key="id"> @@ -62,6 +86,12 @@ Core segment type of Object/Class. <armarx::arondto::ObjectNames /> </ObjectChild> + <ObjectChild key="ivtFeatures"> + <List> + <armarx::armem::arondto::Feature /> + </List> + </ObjectChild> + </Object> </GenerateTypes> diff --git a/source/RobotAPI/libraries/armem_objects/aron_conversions.cpp b/source/RobotAPI/libraries/armem_objects/aron_conversions.cpp index 6b3f3c184..da32c2771 100644 --- a/source/RobotAPI/libraries/armem_objects/aron_conversions.cpp +++ b/source/RobotAPI/libraries/armem_objects/aron_conversions.cpp @@ -111,6 +111,71 @@ namespace armarx::armem } // namespace armarx::armem +namespace armarx::armem::clazz +{ + + void + fromAron(const arondto::Feature& dto, Feature& bo) + { + bo.angle = dto.angle; + bo.scale = dto.scale; + bo.feature = dto.feature; + bo.point2d = dto.point2d; + bo.point3d = dto.point3d; + } + + void + toAron(arondto::Feature& dto, const Feature& bo) + { + dto.angle = bo.angle; + dto.scale = bo.scale; + dto.feature = bo.feature; + dto.point2d = bo.point2d; + dto.point3d = bo.point3d; + } + + void + fromAron(const arondto::ObjectClass& dto, ObjectClass& bo) + { + armarx::fromAron(dto.id, bo.id); + armarx::fromAron(dto.simoxXmlPath, bo.simoxXmlPath); + armarx::fromAron(dto.articulatedSimoxXmlPath, bo.articulatedSimoxXmlPath); + armarx::fromAron(dto.urdfPath, bo.urdfPath); + armarx::fromAron(dto.articulatedUrdfPath, bo.articulatedUrdfPath); + armarx::fromAron(dto.sdfPath, bo.sdfPath); + armarx::fromAron(dto.meshWrlPath, bo.meshWrlPath); + armarx::fromAron(dto.meshObjPath, bo.meshObjPath); + armarx::fromAron(dto.aabb, bo.aabb); + armarx::fromAron(dto.oobb, bo.oobb); + bo.ivtFeatures.clear(); + for (const auto& i : dto.ivtFeatures) + { + fromAron(i, bo.ivtFeatures.emplace_back()); + } + } + + void + toAron(arondto::ObjectClass& dto, const ObjectClass& bo) + { + armarx::toAron(dto.id, bo.id); + armarx::toAron(dto.simoxXmlPath, bo.simoxXmlPath); + armarx::toAron(dto.articulatedSimoxXmlPath, bo.articulatedSimoxXmlPath); + armarx::toAron(dto.urdfPath, bo.urdfPath); + armarx::toAron(dto.articulatedUrdfPath, bo.articulatedUrdfPath); + armarx::toAron(dto.sdfPath, bo.sdfPath); + armarx::toAron(dto.meshWrlPath, bo.meshWrlPath); + armarx::toAron(dto.meshObjPath, bo.meshObjPath); + armarx::toAron(dto.aabb, bo.aabb); + armarx::toAron(dto.oobb, bo.oobb); + dto.ivtFeatures.clear(); + for (const auto& i : bo.ivtFeatures) + { + toAron(dto.ivtFeatures.emplace_back(), i); + } + } + +} // namespace armarx::armem::clazz + armarx::armem::MemoryID armarx::armem::obj::makeObjectInstanceMemoryID(const objpose::ObjectPose& objectPose) { diff --git a/source/RobotAPI/libraries/armem_objects/aron_conversions.h b/source/RobotAPI/libraries/armem_objects/aron_conversions.h index e27ed16c4..b61164a5d 100644 --- a/source/RobotAPI/libraries/armem_objects/aron_conversions.h +++ b/source/RobotAPI/libraries/armem_objects/aron_conversions.h @@ -1,11 +1,10 @@ #pragma once #include <RobotAPI/libraries/ArmarXObjects/ObjectPose.h> - -#include <RobotAPI/libraries/armem_objects/aron/ObjectInstance.aron.generated.h> #include <RobotAPI/libraries/armem_objects/aron/Attachment.aron.generated.h> #include <RobotAPI/libraries/armem_objects/aron/Marker.aron.generated.h> - +#include <RobotAPI/libraries/armem_objects/aron/ObjectClass.aron.generated.h> +#include <RobotAPI/libraries/armem_objects/aron/ObjectInstance.aron.generated.h> #include <RobotAPI/libraries/armem_objects/types.h> namespace armarx::armem @@ -18,19 +17,32 @@ namespace armarx::armem /* Attachments */ - void fromAron(const arondto::attachment::AgentDescription& dto, attachment::AgentDescription& bo); + void fromAron(const arondto::attachment::AgentDescription& dto, + attachment::AgentDescription& bo); void toAron(arondto::attachment::AgentDescription& dto, const attachment::AgentDescription& bo); - void fromAron(const arondto::attachment::ObjectAttachment& dto, attachment::ObjectAttachment& bo); + void fromAron(const arondto::attachment::ObjectAttachment& dto, + attachment::ObjectAttachment& bo); void toAron(arondto::attachment::ObjectAttachment& dto, const attachment::ObjectAttachment& bo); - void fromAron(const arondto::attachment::ArticulatedObjectAttachment& dto, attachment::ArticulatedObjectAttachment& bo); - void toAron(arondto::attachment::ArticulatedObjectAttachment& dto, const attachment::ArticulatedObjectAttachment& bo); + void fromAron(const arondto::attachment::ArticulatedObjectAttachment& dto, + attachment::ArticulatedObjectAttachment& bo); + void toAron(arondto::attachment::ArticulatedObjectAttachment& dto, + const attachment::ArticulatedObjectAttachment& bo); + + void fromAron(const arondto::Marker& dto, marker::Marker& bo); + void toAron(arondto::Marker& dto, const marker::Marker& bo); +} // namespace armarx::armem + +namespace armarx::armem::clazz +{ + void fromAron(const armarx::armem::arondto::Feature& dto, Feature& bo); + void toAron(armarx::armem::arondto::Feature& dto, const Feature& bo); - void fromAron(const arondto::Marker& dto, marker::Marker&bo); - void toAron(arondto::Marker& dto, const marker::Marker&bo); -} // namespace armarx::armem + void fromAron(const armarx::armem::arondto::ObjectClass& dto, ObjectClass& bo); + void toAron(armarx::armem::arondto::ObjectClass& dto, const ObjectClass& bo); +} // namespace armarx::armem::clazz #include <RobotAPI/libraries/armem/core/MemoryID.h> @@ -38,4 +50,4 @@ namespace armarx::armem::obj { /// Make a Memory ID for the object instance snapshot representing this pose. MemoryID makeObjectInstanceMemoryID(const objpose::ObjectPose& objectPose); -} +} // namespace armarx::armem::obj diff --git a/source/RobotAPI/libraries/armem_objects/types.h b/source/RobotAPI/libraries/armem_objects/types.h index 79fe9ac95..598c78ca9 100644 --- a/source/RobotAPI/libraries/armem_objects/types.h +++ b/source/RobotAPI/libraries/armem_objects/types.h @@ -23,6 +23,8 @@ #include <Eigen/Geometry> +#include <SimoxUtility/shapes/AxisAlignedBoundingBox.h> + #include <RobotAPI/libraries/ArmarXObjects/ObjectPose.h> #include <RobotAPI/libraries/armem/core/MemoryID.h> #include <RobotAPI/libraries/armem/core/Time.h> @@ -31,7 +33,6 @@ #include "aron_forward_declarations.h" - namespace armarx::armem { struct ObjectInstance @@ -40,7 +41,36 @@ namespace armarx::armem MemoryID classID; MemoryID sourceID; }; -} +} // namespace armarx::armem + +namespace armarx::armem::clazz +{ + struct Feature + { + float angle; + float scale; + Eigen::Vector2f point2d; + Eigen::Vector3f point3d; + std::vector<float> feature; + }; + + struct ObjectClass + { + armarx::ObjectID id; + armarx::PackagePath simoxXmlPath; + armarx::PackagePath articulatedSimoxXmlPath; + armarx::PackagePath urdfPath; + armarx::PackagePath articulatedUrdfPath; + armarx::PackagePath sdfPath; + armarx::PackagePath articulatedSdfPath; + armarx::PackagePath meshWrlPath; + armarx::PackagePath meshObjPath; + simox::AxisAlignedBoundingBox aabb; + simox::OrientedBoxf oobb; + // TODO NAMES + std::vector<Feature> ivtFeatures; + }; +} // namespace armarx::armem::clazz namespace armarx::armem::attachment { @@ -110,7 +140,6 @@ namespace armarx::armem::articulated_object using ArticulatedObjects = armarx::armem::robot::Robots; } // namespace armarx::armem::articulated_object - namespace armarx::armem::marker { class Marker -- GitLab