From 082e9efd1566be1f6d2e8ab8c04d2e7f299ef2bf Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Tue, 21 Sep 2021 17:30:55 +0200
Subject: [PATCH] articulated object reader/writer: using instance name to
 store and retrieve articulated object

---
 .../armem_objects/client/articulated_object/Reader.cpp   | 4 ++--
 .../armem_objects/client/articulated_object/Writer.cpp   | 9 +++++++--
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp
index 4ddd9457f..8b6d4e525 100644
--- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp
+++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp
@@ -135,11 +135,11 @@ namespace armarx::armem::articulated_object
 
     void Reader::synchronize(ArticulatedObject& obj, const armem::Time& timestamp)
     {
-        auto state = queryState(obj.description, timestamp);
+        auto state = queryState(obj.instance, timestamp);
 
         if (not state) /* c++20 [[unlikely]] */
         {
-            ARMARX_WARNING << "Could not synchronize object " << obj.description.name;
+            ARMARX_WARNING << "Could not synchronize object " << obj.instance;
             return;
         }
 
diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp
index dcd44d673..055061520 100644
--- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp
+++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp
@@ -104,6 +104,8 @@ namespace armarx::armem::articulated_object
 
     std::optional<armem::MemoryID> Writer::storeOrGetClass(const ArticulatedObject& obj)
     {
+        ARMARX_TRACE;
+
         const auto objectId = knownObjects.find(obj.description.name);
 
         // check if exists
@@ -187,7 +189,10 @@ namespace armarx::armem::articulated_object
 
         const auto& timestamp = obj.timestamp;
 
-        ARMARX_DEBUG << "Storing articulated object instance '" << obj.description.name << "' (provider '" << properties.providerName << "')";
+        ARMARX_CHECK(not obj.instance.empty()) << "An object instance name must be provided!";
+        const std::string entityName = obj.description.name + "/" + obj.instance;
+
+        ARMARX_DEBUG << "Storing articulated object instance '" << entityName << "' (provider '" << properties.providerName << "')";
 
         const auto providerId = armem::MemoryID()
                                 .withMemoryName(properties.memoryName)
@@ -195,7 +200,7 @@ namespace armarx::armem::articulated_object
                                 .withProviderSegmentName(properties.providerName);
 
         armem::EntityUpdate update;
-        update.entityID = providerId.withEntityName(obj.description.name);
+        update.entityID = providerId.withEntityName(entityName);
         // .withTimestamp(timestamp); // You only need to specify the entity ID, not the snapshot ID
 
         // arondto::Robot aronArticulatedObject;
-- 
GitLab