diff --git a/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp b/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp index 5de9bc3fb5cf353895404c61ca5799e93637ae99..f8ba26cd174e9b1df0639634efff8bdbeb97af11 100644 --- a/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp +++ b/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp @@ -21,6 +21,7 @@ */ #include "RobotStateMemory.h" +#include "RobotAPI/libraries/armem/core/forward_declarations.h" #include <RobotAPI/interface/core/PoseBase.h> #include <RobotAPI/libraries/core/Pose.h> @@ -33,7 +34,10 @@ #include <ArmarXCore/libraries/ArmarXCoreComponentPlugins/DebugObserverComponentPlugin.h> #include <ArmarXCore/core/logging/Logging.h> +#include <IceUtil/Time.h> + #include <SimoxUtility/algorithm/get_map_keys_values.h> +#include <SimoxUtility/algorithm/contains.h> #include <SimoxUtility/algorithm/string.h> @@ -187,9 +191,11 @@ namespace armarx::armem::server::robot_state armarx::PoseBasePtr RobotStateMemory::getGlobalRobotPose(Ice::Long timestamp, const std::string& robotName, const ::Ice::Current& /*unused*/) { - auto poseMap = localizationSegment.getRobotGlobalPoses(armem::Time::now()); + auto poseMap = localizationSegment.getRobotGlobalPoses(armem::Time::microSeconds(timestamp)); - bool robotNameFound = !(poseMap.find(robotName) == poseMap.end()); + ARMARX_DEBUG << "Getting robot pose of robot " << robotName << " at timestamp " << armem::Time::microSeconds(timestamp); + + bool robotNameFound = simox::alg::contains_key(poseMap, robotName); ARMARX_CHECK(robotNameFound) << "Robot with name " << robotName << " does not exist. " << "Available robots are: " << simox::alg::get_keys(poseMap); diff --git a/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.h b/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.h index bd7eceda95e4e224f3f0528e313c2e1a3c6d9e45..d402496819431eded99b506b69fbab48e6804086 100644 --- a/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.h +++ b/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.h @@ -77,7 +77,7 @@ namespace armarx::armem::server::robot_state // GlobalRobotPoseProvider interface - virtual armarx::PoseBasePtr getGlobalRobotPose(Ice::Long timestamp, const std::string& robotName, const ::Ice::Current&) override; + armarx::PoseBasePtr getGlobalRobotPose(Ice::Long timestamp, const std::string& robotName, const ::Ice::Current&) override; protected: diff --git a/source/RobotAPI/interface/core/RobotLocalization.ice b/source/RobotAPI/interface/core/RobotLocalization.ice index 19b0ebae47be68ed94c6d72391860baa9e6e8344..6e5b38a32d000f219f8a868dfa8d869945637249 100644 --- a/source/RobotAPI/interface/core/RobotLocalization.ice +++ b/source/RobotAPI/interface/core/RobotLocalization.ice @@ -30,6 +30,7 @@ module armarx{ interface GlobalRobotPoseProvider extends armem::server::MemoryInterface { + // timestamp in microseconds PoseBase getGlobalRobotPose(long timestamp, string robotName); }