From 45ee816cf9d1938825e224eda6eb9159fde5ff9b Mon Sep 17 00:00:00 2001 From: Patrick Hegemann <335495-patrickhegemann@users.noreply.gitlab.com> Date: Wed, 9 Feb 2022 10:41:36 +0100 Subject: [PATCH] Use correct timestamp in getGlobalRobotPose --- .../armem/server/RobotStateMemory/RobotStateMemory.cpp | 10 ++++++++-- .../armem/server/RobotStateMemory/RobotStateMemory.h | 2 +- source/RobotAPI/interface/core/RobotLocalization.ice | 1 + 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp b/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp index 5de9bc3fb..f8ba26cd1 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 bd7eceda9..d40249681 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 19b0ebae4..6e5b38a32 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); } -- GitLab