From b932b87c1ef8e74a9cb510afa73d707cf7b5a3ae Mon Sep 17 00:00:00 2001 From: Patrick Hegemann <335495-patrickhegemann@users.noreply.gitlab.com> Date: Tue, 8 Feb 2022 18:32:42 +0100 Subject: [PATCH] Add getGlobalRobotPose to RobotStateMemory --- .../server/RobotStateMemory/RobotStateMemory.cpp | 16 ++++++++++++++++ .../server/RobotStateMemory/RobotStateMemory.h | 9 ++++++++- .../interface/core/RobotLocalization.ice | 6 +++++- .../armem_robot_state/server/common/Visu.cpp | 3 ++- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp b/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp index 0aef2635f..5de9bc3fb 100644 --- a/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp +++ b/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.cpp @@ -22,6 +22,8 @@ #include "RobotStateMemory.h" +#include <RobotAPI/interface/core/PoseBase.h> +#include <RobotAPI/libraries/core/Pose.h> #include <RobotAPI/libraries/armem_robot_state/server/proprioception/aron_conversions.h> #include <RobotAPI/libraries/armem_robot_state/server/common/Visu.h> @@ -31,6 +33,7 @@ #include <ArmarXCore/libraries/ArmarXCoreComponentPlugins/DebugObserverComponentPlugin.h> #include <ArmarXCore/core/logging/Logging.h> +#include <SimoxUtility/algorithm/get_map_keys_values.h> #include <SimoxUtility/algorithm/string.h> @@ -182,6 +185,19 @@ 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()); + + bool robotNameFound = !(poseMap.find(robotName) == poseMap.end()); + ARMARX_CHECK(robotNameFound) + << "Robot with name " << robotName << " does not exist. " + << "Available robots are: " << simox::alg::get_keys(poseMap); + + return new Pose(poseMap[robotName].matrix()); + } + + /*************************************************************/ // RobotUnit Streaming functions /*************************************************************/ diff --git a/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.h b/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.h index 863c9b571..bd7eceda9 100644 --- a/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.h +++ b/source/RobotAPI/components/armem/server/RobotStateMemory/RobotStateMemory.h @@ -39,6 +39,8 @@ #include <RobotAPI/libraries/armem_robot_state/server/proprioception/RobotUnitData.h> #include <RobotAPI/libraries/armem_robot_state/server/proprioception/RobotUnitReader.h> +#include <RobotAPI/interface/core/RobotLocalization.h> + namespace armarx::plugins { @@ -62,7 +64,8 @@ namespace armarx::armem::server::robot_state class RobotStateMemory : virtual public armarx::Component, virtual public armem::server::ReadWritePluginUser, - virtual public armarx::ArVizComponentPluginUser + virtual public armarx::ArVizComponentPluginUser, + virtual public armarx::GlobalRobotPoseProvider { public: @@ -73,6 +76,10 @@ namespace armarx::armem::server::robot_state std::string getDefaultName() const override; + // GlobalRobotPoseProvider interface + virtual armarx::PoseBasePtr getGlobalRobotPose(Ice::Long timestamp, const std::string& robotName, const ::Ice::Current&) override; + + protected: armarx::PropertyDefinitionsPtr createPropertyDefinitions() override; diff --git a/source/RobotAPI/interface/core/RobotLocalization.ice b/source/RobotAPI/interface/core/RobotLocalization.ice index dbaee0f7a..19b0ebae4 100644 --- a/source/RobotAPI/interface/core/RobotLocalization.ice +++ b/source/RobotAPI/interface/core/RobotLocalization.ice @@ -24,10 +24,14 @@ #pragma once +#include <RobotAPI/interface/armem/server/MemoryInterface.ice> #include <RobotAPI/interface/core/GeometryBase.ice> +#include <RobotAPI/interface/core/PoseBase.ice> module armarx{ - + interface GlobalRobotPoseProvider extends armem::server::MemoryInterface { + PoseBase getGlobalRobotPose(long timestamp, string robotName); + } interface GlobalRobotPoseLocalizationListener{ void reportGlobalRobotPose(TransformStamped currentPose); diff --git a/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.cpp b/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.cpp index 051ab03e7..67d537d19 100644 --- a/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/server/common/Visu.cpp @@ -12,6 +12,7 @@ #include <ArmarXCore/core/logging/Logging.h> #include <ArmarXCore/core/time/CycleUtil.h> #include <ArmarXCore/core/time/TimeUtil.h> +#include <ArmarXCore/interface/core/PackagePath.h> #include <RobotAPI/libraries/armem/core/Time.h> @@ -79,7 +80,7 @@ namespace armarx::armem::server::robot_state { for (const robot::Robot& robot : robots) { - const data::PackagePath xmlPath = robot.description.xml.serialize(); + const armarx::data::PackagePath xmlPath = robot.description.xml.serialize(); // clang-format off viz::Robot robotVisu = viz::Robot(robot.description.name) -- GitLab