diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp index 493230e498b61323ca0f228d62a58396057b75a3..6ba35fd2042b04540721c95c1b48d566ad9d3d5a 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp @@ -151,6 +151,10 @@ namespace armarx::armem::server::obj::instance // Build new poses. objpose::ObjectPoseSeq newObjectPoses; stats.numUpdated = 0; + + // timestamp used to reduce the rpc calls for robot sync + Time robotSyncTimestamp = -1; + for (const objpose::data::ProvidedObjectPose& provided : providedPoses) { const Time timestamp = armarx::fromIce<Time>(provided.timestamp); @@ -191,7 +195,12 @@ namespace armarx::armem::server::obj::instance // Update the entity. stats.numUpdated++; - ARMARX_CHECK(virtualRobotReader->synchronizeRobot(*robot, timestamp)); + // update the robot to obtain correct local -> global transformation + if(robotSyncTimestamp != timestamp) + { + ARMARX_CHECK(virtualRobotReader->synchronizeRobot(*robot, timestamp)); + robotSyncTimestamp = timestamp; + } objpose::ObjectPose& newPose = newObjectPoses.emplace_back(); if (provided.objectPoseFrame.empty())