diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp index a6b0afcdd5b61d39917be0b440c440472f31af79..474423c079562ff4e1d653d3322f94297717b37a 100644 --- a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp +++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp @@ -542,6 +542,22 @@ namespace armarx } + objpose::AgentFramesSeq ObjectPoseObserver::getAttachableFrames(const Ice::Current&) + { + std::scoped_lock lock(dataMutex); + + objpose::AgentFramesSeq output; + std::vector<VirtualRobot::RobotPtr> agents = { robot }; + for (VirtualRobot::RobotPtr agent : agents) + { + objpose::AgentFrames& frames = output.emplace_back(); + frames.agent = agent->getName(); + frames.frames = agent->getRobotNodeNames(); + } + return output; + } + + void ObjectPoseObserver::handleProviderUpdate(const std::string& providerName) { diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h index ad7d2e3de5016685a58e2a65f1921b59cf16d2c7..a9db3aeeb213a101179accccd0fa4ffaad4da10e 100644 --- a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h +++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h @@ -88,28 +88,30 @@ namespace armarx // ObjectPoseObserverInterface interface public: - // READING + // OBJECT POSES objpose::data::ObjectPoseSeq getObjectPoses(ICE_CURRENT_ARG) override; objpose::data::ObjectPoseSeq getObjectPosesByProvider(const std::string& providerName, ICE_CURRENT_ARG) override; - Ice::StringSeq getAvailableProviderNames(ICE_CURRENT_ARG) override; + // PROVIDER INFORMATION + + bool hasProvider(const std::string& providerName, ICE_CURRENT_ARG) override; objpose::ProviderInfo getProviderInfo(const std::string& providerName, ICE_CURRENT_ARG) override; + Ice::StringSeq getAvailableProviderNames(ICE_CURRENT_ARG) override; objpose::ProviderInfoMap getAvailableProvidersInfo(ICE_CURRENT_ARG) override; - bool hasProvider(const std::string& providerName, ICE_CURRENT_ARG) override; - // MODIFICATION + // REQUESTING objpose::observer::RequestObjectsOutput requestObjects(const objpose::observer::RequestObjectsInput& input, ICE_CURRENT_ARG) override; + // ATTACHING + objpose::AttachObjectToRobotNodeOutput attachObjectToRobotNode(const objpose::AttachObjectToRobotNodeInput& input, ICE_CURRENT_ARG) override; objpose::DetachObjectFromRobotNodeOutput detachObjectFromRobotNode(const objpose::DetachObjectFromRobotNodeInput& input, ICE_CURRENT_ARG) override; objpose::DetachAllObjectsFromRobotNodesOutput detachAllObjectsFromRobotNodes(ICE_CURRENT_ARG) override; - - //Ice::Int getUpdateCounterByProvider(const std::string& providerName, ICE_CURRENT_ARG) override; - //StringIntDictionary getAllUpdateCounters(ICE_CURRENT_ARG) override; + objpose::AgentFramesSeq getAttachableFrames(ICE_CURRENT_ARG) override; // Remote GUI diff --git a/source/RobotAPI/interface/objectpose/ObjectPoseObserver.ice b/source/RobotAPI/interface/objectpose/ObjectPoseObserver.ice index 9004c2afcc900c2f0a35d1134f1d100d551ff0ad..602043ab3b17e3afbdfbbd87b835dda80f264f29 100644 --- a/source/RobotAPI/interface/objectpose/ObjectPoseObserver.ice +++ b/source/RobotAPI/interface/objectpose/ObjectPoseObserver.ice @@ -97,21 +97,33 @@ module armarx int numDetached; }; + struct AgentFrames + { + string agent; + Ice::StringSeq frames; + }; + sequence<AgentFrames> AgentFramesSeq; + interface ObjectPoseObserverInterface extends ObserverInterface, ObjectPoseTopic { - // Reading + // Object poses + data::ObjectPoseSeq getObjectPoses(); data::ObjectPoseSeq getObjectPosesByProvider(string providerName); + // Provider information + bool hasProvider(string providerName); Ice::StringSeq getAvailableProviderNames(); ProviderInfoMap getAvailableProvidersInfo(); ProviderInfo getProviderInfo(string providerName); + // Requesting - // Modifying observer::RequestObjectsOutput requestObjects(observer::RequestObjectsInput input); + // Attaching + /// Attach an object to a robot node. AttachObjectToRobotNodeOutput attachObjectToRobotNode(AttachObjectToRobotNodeInput input); /// Detach an attached object from a robot node. @@ -119,6 +131,8 @@ module armarx /// Detach all objects from robot nodes. DetachAllObjectsFromRobotNodesOutput detachAllObjectsFromRobotNodes(); + AgentFramesSeq getAttachableFrames(); + }; };