From d92f0d51d378e92e86823ee7035a9bd5365942fd Mon Sep 17 00:00:00 2001 From: Fabian Reister <fabian.reister@kit.edu> Date: Fri, 17 Jan 2025 17:00:40 +0100 Subject: [PATCH 1/2] ArticulatedObjectWriter: adding alternative implementation for storeArticulatedObject which should be more efficient --- .../ArticulatedObjectWriter.cpp | 33 +++++++++++++++++++ .../ArticulatedObjectWriter.h | 7 ++++ 2 files changed, 40 insertions(+) diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp index fdb948721..28f93084c 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp @@ -14,6 +14,8 @@ namespace armarx::armem::articulated_object { + + armem::articulated_object::ArticulatedObject convert(const VirtualRobot::Robot& obj, const armem::Time& timestamp) { @@ -51,6 +53,21 @@ namespace armarx::armem::articulated_object .timestamp = timestamp}; } + armem::articulated_object::ArticulatedObject + convert2(const VirtualRobot::Robot& obj, const armem::Time& timestamp) + { + ARMARX_DEBUG << "Filename is " << obj.getFilename(); + + return armem::articulated_object::ArticulatedObject{ + .description = {.name = obj.getType(), .xml = {}, .visualization = {}, .info = {}}, + .instance = obj.getName(), + .config = {.timestamp = timestamp, + .globalPose = Eigen::Isometry3f(obj.getRootNode()->getGlobalPose()), + .jointMap = obj.getJointValues(), + .proprioception = std::nullopt}, + .timestamp = timestamp}; + } + bool ArticulatedObjectWriter::storeArticulatedObject(const VirtualRobot::RobotPtr& articulatedObject, const armem::Time& timestamp, @@ -64,4 +81,20 @@ namespace armarx::armem::articulated_object return store(armemArticulatedObject, isStatic); } + + bool + ArticulatedObjectWriter::storeArticulatedObject2( + const VirtualRobot::RobotPtr& articulatedObject, + const armem::Time& timestamp, + const bool isStatic) + { + + ARMARX_CHECK_NOT_NULL(articulatedObject); + + armarx::armem::articulated_object::ArticulatedObject armemArticulatedObject = + convert2(*articulatedObject, Time::Now()); + + return storeInstance(armemArticulatedObject, isStatic); + } + } // namespace armarx::armem::articulated_object diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.h b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.h index edc401b6e..4171529f5 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.h +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.h @@ -17,5 +17,12 @@ namespace armarx::armem::articulated_object bool storeArticulatedObject(const VirtualRobot::RobotPtr& articulatedObject, const armem::Time& timestamp, bool isStatic = false); + + bool storeArticulatedObject2(const VirtualRobot::RobotPtr& articulatedObject, + const armem::Time& timestamp, + bool isStatic = false); + + private: + }; } // namespace armarx::armem::articulated_object -- GitLab From 6d1f9ac39a8adc45282018ddc5fc1c131605b73f Mon Sep 17 00:00:00 2001 From: Fabian Reister <fabian.reister@kit.edu> Date: Fri, 24 Jan 2025 17:50:35 +0100 Subject: [PATCH 2/2] articulated object writer: implementation such that the default behavior is changed: by default, only the instance will be stored and not the class --- .../ArticulatedObjectWriter.cpp | 28 ++++++++++--------- .../ArticulatedObjectWriter.h | 15 +++++++--- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp index 28f93084c..9e03b50c0 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp @@ -14,13 +14,14 @@ namespace armarx::armem::articulated_object { - - armem::articulated_object::ArticulatedObject + // Slow version with filesystem access. It runs CMake for each project / environment variable. + static armem::articulated_object::ArticulatedObject convert(const VirtualRobot::Robot& obj, const armem::Time& timestamp) { ARMARX_DEBUG << "Filename is " << obj.getFilename(); + // this is very inefficient. It runs CMake for each project const std::vector<std::string> packages = armarx::CMakePackageFinder::FindAllArmarXSourcePackages(); const std::string package = armarx::ArmarXDataPath::getProject(packages, obj.getFilename()); @@ -53,8 +54,9 @@ namespace armarx::armem::articulated_object .timestamp = timestamp}; } - armem::articulated_object::ArticulatedObject - convert2(const VirtualRobot::Robot& obj, const armem::Time& timestamp) + // fast version without filesystem (CMake) access + static armem::articulated_object::ArticulatedObject + convertWithoutPackagePath(const VirtualRobot::Robot& obj, const armem::Time& timestamp) { ARMARX_DEBUG << "Filename is " << obj.getFilename(); @@ -69,30 +71,30 @@ namespace armarx::armem::articulated_object } bool - ArticulatedObjectWriter::storeArticulatedObject(const VirtualRobot::RobotPtr& articulatedObject, - const armem::Time& timestamp, - const bool isStatic) + ArticulatedObjectWriter::storeArticulatedObjectWithObjectClass( + const VirtualRobot::RobotPtr& articulatedObject, + const armem::Time& timestamp, + const bool isStatic) { ARMARX_CHECK_NOT_NULL(articulatedObject); armarx::armem::articulated_object::ArticulatedObject armemArticulatedObject = - convert(*articulatedObject, Time::Now()); + convert(*articulatedObject, timestamp); return store(armemArticulatedObject, isStatic); } bool - ArticulatedObjectWriter::storeArticulatedObject2( - const VirtualRobot::RobotPtr& articulatedObject, - const armem::Time& timestamp, - const bool isStatic) + ArticulatedObjectWriter::storeArticulatedObject(const VirtualRobot::RobotPtr& articulatedObject, + const armem::Time& timestamp, + const bool isStatic) { ARMARX_CHECK_NOT_NULL(articulatedObject); armarx::armem::articulated_object::ArticulatedObject armemArticulatedObject = - convert2(*articulatedObject, Time::Now()); + convertWithoutPackagePath(*articulatedObject, timestamp); return storeInstance(armemArticulatedObject, isStatic); } diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.h b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.h index 4171529f5..4d6fca627 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.h +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.h @@ -14,15 +14,22 @@ namespace armarx::armem::articulated_object public: using Writer::Writer; + /** + * @brief Stores the articulated object in the memory. + * + */ bool storeArticulatedObject(const VirtualRobot::RobotPtr& articulatedObject, const armem::Time& timestamp, bool isStatic = false); - bool storeArticulatedObject2(const VirtualRobot::RobotPtr& articulatedObject, - const armem::Time& timestamp, - bool isStatic = false); + /** + * @brief Stores the articulated object. If the object class in unknown, + * it will also be stored in the corresponding class core segment. + */ + bool storeArticulatedObjectWithObjectClass(const VirtualRobot::RobotPtr& articulatedObject, + const armem::Time& timestamp, + bool isStatic = false); private: - }; } // namespace armarx::armem::articulated_object -- GitLab