From db900c4b78997c591742ad38067774129038ffc3 Mon Sep 17 00:00:00 2001 From: Fabian Reister <fabian.reister@kit.edu> Date: Wed, 12 May 2021 16:48:50 +0200 Subject: [PATCH] properly setting memory id in class segment --- .../articulated_object_class/Segment.cpp | 24 +++++++++++-------- .../articulated_object_instance/Segment.cpp | 12 +++++++++- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/source/RobotAPI/libraries/armem_objects/server/articulated_object_class/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/articulated_object_class/Segment.cpp index 62cb54fbc..422b8e6be 100644 --- a/source/RobotAPI/libraries/armem_objects/server/articulated_object_class/Segment.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/articulated_object_class/Segment.cpp @@ -1,5 +1,6 @@ #include "Segment.h" +#include <SimoxUtility/algorithm/get_map_keys_values.h> #include <sstream> #include <ArmarXCore/core/time/TimeUtil.h> @@ -66,7 +67,7 @@ namespace armarx::armem::server::obj::articulated_object_class ObjectFinder finder(package); const auto knownArticulatedObjectDescriptions = finder.findAllArticulatedObjectsByDataset(true); - ARMARX_INFO << "Found " << knownArticulatedObjectDescriptions.size() << " articulated objects"; + ARMARX_DEBUG << "Found " << knownArticulatedObjectDescriptions.size() << " articulated objects"; loadObjectsIntoMemory(knownArticulatedObjectDescriptions, package); } @@ -114,18 +115,21 @@ namespace armarx::armem::server::obj::articulated_object_class { for (const auto& [name, entity] : provSeg.entities()) { - const auto& entityInstance = entity.getLatestSnapshot().getInstance(0); - const auto description = robot::convertRobotDescription(entityInstance); - - if (not description) + for (const auto& snapshot : simox::alg::get_values(entity.history())) { - ARMARX_WARNING << "Could not convert entity instance to 'RobotDescription'"; - continue; - } + const auto& entityInstance = snapshot.getInstance(0); + const auto description = robot::convertRobotDescription(entityInstance); - ARMARX_DEBUG << "Key is " << armem::MemoryID(entity.id()); + if (not description) + { + ARMARX_WARNING << "Could not convert entity instance to 'RobotDescription'"; + continue; + } - objects.emplace(armem::MemoryID(entity.id()), *description); + ARMARX_DEBUG << "Key is " << armem::MemoryID(snapshot.id()); + + objects.emplace(armem::MemoryID(snapshot.id()), *description); + } } } diff --git a/source/RobotAPI/libraries/armem_objects/server/articulated_object_instance/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/articulated_object_instance/Segment.cpp index 8932734ec..c7fa562a6 100644 --- a/source/RobotAPI/libraries/armem_objects/server/articulated_object_instance/Segment.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/articulated_object_instance/Segment.cpp @@ -70,11 +70,20 @@ namespace armarx::armem::server::obj::articulated_object_instance ARMARX_CHECK_NOT_NULL(classSegment); const auto knownObjectClasses = classSegment->getKnownObjectClasses(); + ARMARX_DEBUG << "Class segment has " << knownObjectClasses.size() << " known articulated objects"; + + const auto escape = [](std::string & v) + { + v = simox::alg::replace_all(v, "/", "\\/"); + }; + const auto resolveDescriptionLink = [&](auto & articulatedObject, const auto & aronDescriptionLink) -> bool { armem::MemoryID descriptionLink; fromAron(aronDescriptionLink, descriptionLink); + escape(descriptionLink.providerSegmentName); + ARMARX_DEBUG << "Lookup key is " << descriptionLink; // const auto keys = simox::alg::get_keys(knownObjectClasses); @@ -83,7 +92,8 @@ namespace armarx::armem::server::obj::articulated_object_instance const auto it = knownObjectClasses.find(descriptionLink); if (it == knownObjectClasses.end()) { - ARMARX_WARNING << "Unknown object class " ; //<< aronArticulatedObject.description; + ARMARX_WARNING << "Unknown object class " << descriptionLink + << "Known classes are " << simox::alg::get_keys(knownObjectClasses); return false; } -- GitLab