diff --git a/source/RobotAPI/libraries/ArmarXObjects/CMakeLists.txt b/source/RobotAPI/libraries/ArmarXObjects/CMakeLists.txt index 31fd00c7edcc840eb0a629580f3b28058698bae9..b2e71660ae1552d33eeaddb37f93a6f6b5d72491 100644 --- a/source/RobotAPI/libraries/ArmarXObjects/CMakeLists.txt +++ b/source/RobotAPI/libraries/ArmarXObjects/CMakeLists.txt @@ -16,6 +16,7 @@ set(LIB_FILES ObjectInfo.cpp ObjectFinder.cpp ObjectPose.cpp + ObjectPoseClient.cpp json_conversions.cpp ice_conversions.cpp @@ -33,6 +34,7 @@ set(LIB_HEADERS ObjectInfo.h ObjectFinder.h ObjectPose.h + ObjectPoseClient.h json_conversions.h ice_conversions.h diff --git a/source/RobotAPI/libraries/ArmarXObjects/ObjectPoseClient.cpp b/source/RobotAPI/libraries/ArmarXObjects/ObjectPoseClient.cpp new file mode 100644 index 0000000000000000000000000000000000000000..de740d244c3e671016956df0b526065b21d3638c --- /dev/null +++ b/source/RobotAPI/libraries/ArmarXObjects/ObjectPoseClient.cpp @@ -0,0 +1,73 @@ +#include "ObjectPoseClient.h" + + +namespace armarx::objpose +{ + + ObjectPoseClient::ObjectPoseClient() + { + } + + + ObjectPoseClient::ObjectPoseClient( + const ObjectPoseStorageInterfacePrx& objectPoseStorage, + const ObjectFinder& finder) : + objectFinder(finder) + { + this->connect(objectPoseStorage); + } + + + void + ObjectPoseClient::connect( + const ObjectPoseStorageInterfacePrx& objectPoseStorage) + { + this->objectPoseStorage = objectPoseStorage; + } + + + bool + ObjectPoseClient::isConnected() const + { + return bool(objectPoseStorage); + } + + + ObjectPoseSeq + ObjectPoseClient::fetchObjectPoses() + { + if (not objectPoseStorage) + { + ARMARX_WARNING << "No object pose observer."; + return {}; + } + return fromIce(objectPoseStorage->getObjectPoses()); + } + + + ObjectPoseMap ObjectPoseClient::fetchObjectPosesAsMap() + { + ObjectPoseMap map; + for (auto& pose : fetchObjectPoses()) + { + map.emplace(pose.objectID, std::move(pose)); + } + return map; + } + + + const ObjectPoseStorageInterfacePrx& + ObjectPoseClient::getObjectPoseStorage() const + { + return objectPoseStorage; + } + + + const ObjectFinder& + ObjectPoseClient::getObjectFinder() const + { + return objectFinder; + } + +} + diff --git a/source/RobotAPI/libraries/ArmarXObjects/ObjectPoseClient.h b/source/RobotAPI/libraries/ArmarXObjects/ObjectPoseClient.h new file mode 100644 index 0000000000000000000000000000000000000000..2e262cc155944c4d9d3cebd6ca57d2b8130da595 --- /dev/null +++ b/source/RobotAPI/libraries/ArmarXObjects/ObjectPoseClient.h @@ -0,0 +1,49 @@ +#pragma once + +#include <RobotAPI/interface/objectpose/ObjectPoseStorageInterface.h> +#include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h> +#include <RobotAPI/libraries/ArmarXObjects/ObjectPose.h> + + +namespace armarx::objpose +{ + + /** + * @brief Provides access to the `armarx::objpose::ObjectPoseStorageInterface` + * (aka the object memory). + */ + class ObjectPoseClient + { + public: + + ObjectPoseClient(); + ObjectPoseClient(const ObjectPoseStorageInterfacePrx& objectPoseStorage, + const ObjectFinder& finder = {}); + + void connect(const ObjectPoseStorageInterfacePrx& objectPoseStorage); + + bool isConnected() const; + + + ObjectPoseSeq + fetchObjectPoses(); + ObjectPoseMap + fetchObjectPosesAsMap(); + + + const ObjectPoseStorageInterfacePrx& + getObjectPoseStorage() const; + + const ObjectFinder& + getObjectFinder() const; + + + public: + + ObjectPoseStorageInterfacePrx objectPoseStorage; + + ObjectFinder objectFinder; + + }; + +} diff --git a/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseClientPlugin.cpp b/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseClientPlugin.cpp index 9bf87346d6014d3add6edad66bbda0bfa84019ad..a2b3ef47343443b4ac0e1fc85c9f33f52ccc857e 100644 --- a/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseClientPlugin.cpp +++ b/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseClientPlugin.cpp @@ -55,6 +55,13 @@ namespace armarx return plugin->createObjectPoseStorage(); } + + objpose::ObjectPoseClient ObjectPoseClientPluginUser::getClient() const + { + return objpose::ObjectPoseClient(objectPoseStorage, getObjectFinder()); + } + + objpose::ObjectPoseSeq ObjectPoseClientPluginUser::getObjectPoses() { if (!objectPoseStorage) diff --git a/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseClientPlugin.h b/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseClientPlugin.h index 769d1176dd1fc8db6063fe867a3aec1ff3e1b90d..9f72ab1eb4b96542352eb34e64e3955382b2c0d2 100644 --- a/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseClientPlugin.h +++ b/source/RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseClientPlugin.h @@ -5,6 +5,7 @@ #include <RobotAPI/interface/objectpose/ObjectPoseStorageInterface.h> #include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h> #include <RobotAPI/libraries/ArmarXObjects/ObjectPose.h> +#include <RobotAPI/libraries/ArmarXObjects/ObjectPoseClient.h> namespace armarx::plugins @@ -73,6 +74,10 @@ namespace armarx objpose::ObjectPoseStorageInterfacePrx createObjectPoseStorage(); objpose::ObjectPoseStorageInterfacePrx objectPoseStorage; + + objpose::ObjectPoseClient getClient() const; + + objpose::ObjectPoseSeq getObjectPoses(); plugins::ObjectPoseClientPlugin& getObjectPoseClientPlugin();