diff --git a/source/RobotAPI/libraries/armem_objects/server/familiar_object_instance/SegmentAdapter.cpp b/source/RobotAPI/libraries/armem_objects/server/familiar_object_instance/SegmentAdapter.cpp index dab922c5a7d4726ec5655e6450fe7ff864438461..a0e9444a3c80d78e1e8cb32bf3c925ac9c359a73 100644 --- a/source/RobotAPI/libraries/armem_objects/server/familiar_object_instance/SegmentAdapter.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/familiar_object_instance/SegmentAdapter.cpp @@ -114,12 +114,12 @@ namespace armarx::armem::server::obj::familiar_object_instance const Ice::Current&) { - if(data.empty()) + if (data.empty()) { return; } - // Note, that in general, timestamps in `data` can differ. Therefore, we maintain the sync timestamp + // Note, that in general, timestamps in `data` can differ. Therefore, we maintain the sync timestamp // and check whether we have to update the robot. Otherwise, we can avoid these Ice calls. std::optional<armarx::DateTime> syncTimestamp; @@ -142,25 +142,34 @@ namespace armarx::armem::server::obj::familiar_object_instance segment.robots.get(famObjInstance.poseSensFrame.header.agent, providerName); ARMARX_CHECK_NOT_NULL(robot) << famObjInstance.poseSensFrame.header.agent; - - if(not syncTimestamp.has_value() or syncTimestamp.value() != famObjInstance.timestamp) + + if (not syncTimestamp.has_value() or syncTimestamp.value() != famObjInstance.timestamp) { - ARMARX_CHECK(segment.robots.reader->synchronizeRobot(*robot, famObjInstance.timestamp)); + ARMARX_CHECK( + segment.robots.reader->synchronizeRobot(*robot, famObjInstance.timestamp)); syncTimestamp = famObjInstance.timestamp; } - // fill global pose info - famObjInstance.poseGlobal.emplace(); - famObjInstance.poseGlobal->pose = framedPose.toGlobalEigen(robot); - famObjInstance.poseGlobal->header.agent = famObjInstance.poseSensFrame.header.agent; - famObjInstance.poseGlobal->header.frame = armarx::GlobalFrame; + // fill global pose info if not set yet + if (not famObjInstance.poseGlobal.has_value()) + { + famObjInstance.poseGlobal.emplace(); + famObjInstance.poseGlobal->pose = framedPose.toGlobalEigen(robot); + famObjInstance.poseGlobal->header.agent = famObjInstance.poseSensFrame.header.agent; + famObjInstance.poseGlobal->header.frame = armarx::GlobalFrame; + } + else + { + ARMARX_CHECK_EQUAL(famObjInstance.poseGlobal->header.frame, armarx::GlobalFrame); + } return famObjInstance; }; std::vector<armarx::armem::arondto::FamiliarObjectInstance> familiarObjectInstances; + familiarObjectInstances.reserve(data.size()); std::transform(std::begin(data), std::end(data), @@ -170,8 +179,6 @@ namespace armarx::armem::server::obj::familiar_object_instance segment.commit(familiarObjectInstances, providerName); } - - void SegmentAdapter::handleProviderUpdate(const std::string& providerName) { @@ -182,8 +189,6 @@ namespace armarx::armem::server::obj::familiar_object_instance } } - - void SegmentAdapter::visualizeRun() { @@ -206,7 +211,8 @@ namespace armarx::armem::server::obj::familiar_object_instance [this]() { return segment.getFamiliarObjectsByProvider(armarx::Clock::Now()); }); - ARMARX_VERBOSE << "Visualizing " << familiarObjectsByProvider.size() << " providers."; + ARMARX_VERBOSE << "Visualizing " << familiarObjectsByProvider.size() + << " providers."; visu.visualizeFamiliarObjectsByProvider(familiarObjectsByProvider); } @@ -214,7 +220,5 @@ namespace armarx::armem::server::obj::familiar_object_instance } } - - } // namespace armarx::armem::server::obj::familiar_object_instance