diff --git a/source/RobotAPI/libraries/armem_objects/SceneSnapshot.cpp b/source/RobotAPI/libraries/armem_objects/SceneSnapshot.cpp index 2fcfbb4ae129edf59214cc8a398d535d95a2e86e..d3ece87d9746198af2f5b9acc5b81cce38d189aa 100644 --- a/source/RobotAPI/libraries/armem_objects/SceneSnapshot.cpp +++ b/source/RobotAPI/libraries/armem_objects/SceneSnapshot.cpp @@ -30,6 +30,18 @@ namespace armarx::armem::obj return id; } + + ObjectID SceneSnapshot::Object::getObjectID() const + { + return getClassID().withInstanceName(instanceName); + } + + + ObjectID SceneSnapshot::Object::getObjectID(ObjectFinder& finder) const + { + return getClassID(finder).withInstanceName(instanceName); + } + } @@ -37,6 +49,7 @@ void armarx::armem::obj::to_json(nlohmann::json& j, const SceneSnapshot::Object& { // j["instanceID"] = rhs.instanceID; j["class"] = rhs.className; + j["instanceName"] = rhs.instanceName; j["collection"] = rhs.collection; j["position"] = rhs.position; j["orientation"] = rhs.orientation; @@ -48,6 +61,10 @@ void armarx::armem::obj::from_json(const nlohmann::json& j, SceneSnapshot::Objec { // j.at("instanceID").get_to(rhs.instanceID); j.at("class").get_to(rhs.className); + if (j.count("instanceName")) + { + j["instanceName"].get_to(rhs.instanceName); + } j.at("collection").get_to(rhs.collection); j.at("position").get_to(rhs.position); j.at("orientation").get_to(rhs.orientation); diff --git a/source/RobotAPI/libraries/armem_objects/SceneSnapshot.h b/source/RobotAPI/libraries/armem_objects/SceneSnapshot.h index 30e144b6300327b969904a662fd1bd3466dc467b..3e24156490544ebc537372a0d204c052ae8b2428 100644 --- a/source/RobotAPI/libraries/armem_objects/SceneSnapshot.h +++ b/source/RobotAPI/libraries/armem_objects/SceneSnapshot.h @@ -39,6 +39,7 @@ namespace armarx::armem::obj struct Object { std::string className; + std::string instanceName; std::string collection; Eigen::Vector3f position = Eigen::Vector3f::Zero(); @@ -48,6 +49,8 @@ namespace armarx::armem::obj ObjectID getClassID() const; ObjectID getClassID(ObjectFinder& finder) const; + ObjectID getObjectID() const; + ObjectID getObjectID(ObjectFinder& finder) const; }; std::vector<Object> objects; }; diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp index 5c76dfb7289ba6f503dfd17eaa7bda26af0e9e2c..31f25a68ad359505e52ea3928c16bde8fb10385b 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp @@ -863,7 +863,11 @@ namespace armarx::armem::server::obj::instance pose.providerName = sceneName; pose.objectType = objpose::ObjectTypeEnum::KnownObject; pose.isStatic = true; // Objects loaded from prior knowledge are considerd static to exclude them from decay. - pose.objectID = classID.withInstanceName(std::to_string(idCounters[classID]++)); + pose.objectID = classID.withInstanceName( + object.instanceName.empty() + ? std::to_string(idCounters[classID]++) + : object.instanceName + ); pose.objectPoseGlobal = simox::math::pose(object.position, object.orientation); pose.objectPoseRobot = pose.objectPoseGlobal;