SegmentAdapter.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * ArmarX is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * ArmarX is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * @package RobotAPI::armem_objects::Adapter
17  * @author Rainer Kartmann ( rainer dot kartmann at kit dot edu )
18  * @date 2021
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
23 #pragma once
24 
25 #include <mutex>
26 
27 #include <VirtualRobot/VirtualRobot.h>
28 
30 
33 #include <RobotAPI/interface/armem/server/ObjectMemoryInterface.h>
34 #include <RobotAPI/interface/core/RobotState.h>
40 
41 
42 #define ICE_CURRENT_ARG const Ice::Current& = Ice::emptyCurrent
43 
45 {
46 
47  /**
48  * @brief Helps implementing the `armarx::armem::server::ObjectInstanceSegmentInterface`.
49  */
51  virtual public armarx::Logging,
52  virtual public armarx::armem::server::ObjectInstanceSegmentInterface
53  {
54  public:
56 
57  std::string getName() const;
58  void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string& prefix = "");
59 
60  void init();
61  void connect(robot_state::VirtualRobotReader* virtualRobotReader,
62  KinematicUnitObserverInterfacePrx kinematicUnitObserver,
63  viz::Client arviz,
64  DebugObserverInterfacePrx debugObserver);
65 
66 
67  // ObjectPoseTopic interface
68  public:
69  virtual void reportProviderAvailable(const std::string& providerName,
70  const objpose::ProviderInfo& info,
71  ICE_CURRENT_ARG) override;
72  virtual void reportObjectPoses(const std::string& providerName,
73  const objpose::data::ProvidedObjectPoseSeq& objectPoses,
74  ICE_CURRENT_ARG) override;
75 
76  // ObjectInstanceSegmentInterface interface
77  public:
78  // OBJECT POSES
79 
82  getObjectPosesByProvider(const std::string& providerName, ICE_CURRENT_ARG) override;
83 
84  // PROVIDER INFORMATION
85 
86  virtual bool hasProvider(const std::string& providerName, ICE_CURRENT_ARG) override;
87  virtual objpose::ProviderInfo getProviderInfo(const std::string& providerName,
88  ICE_CURRENT_ARG) override;
89  virtual Ice::StringSeq getAvailableProviderNames(ICE_CURRENT_ARG) override;
90  virtual objpose::ProviderInfoMap getAvailableProvidersInfo(ICE_CURRENT_ARG) override;
91 
92 
93  // REQUESTING
94 
95  virtual objpose::observer::RequestObjectsOutput
96  requestObjects(const objpose::observer::RequestObjectsInput& input,
97  ICE_CURRENT_ARG) override;
98 
99  // ATTACHING
100 
101  virtual objpose::AttachObjectToRobotNodeOutput
102  attachObjectToRobotNode(const objpose::AttachObjectToRobotNodeInput& input,
103  ICE_CURRENT_ARG) override;
104  virtual objpose::DetachObjectFromRobotNodeOutput
105  detachObjectFromRobotNode(const objpose::DetachObjectFromRobotNodeInput& input,
106  ICE_CURRENT_ARG) override;
107  virtual objpose::DetachAllObjectsFromRobotNodesOutput
108  detachAllObjectsFromRobotNodes(const objpose::DetachAllObjectsFromRobotNodesInput& input,
109  ICE_CURRENT_ARG) override;
110 
111  virtual objpose::AgentFramesSeq getAttachableFrames(ICE_CURRENT_ARG) override;
112 
113  // HEAD MOVEMENT SIGNALS
114 
115  virtual objpose::SignalHeadMovementOutput
116  signalHeadMovement(const objpose::SignalHeadMovementInput& input, ICE_CURRENT_ARG) override;
117 
118  // PREDICTING
119 
120  virtual objpose::ObjectPosePredictionResultSeq
121  predictObjectPoses(const objpose::ObjectPosePredictionRequestSeq& requests,
122  ICE_CURRENT_ARG) override;
123 
124  virtual armem::prediction::data::PredictionEngineSeq
126 
127 
128  private:
129  void updateProviderInfo(const std::string& providerName, const objpose::ProviderInfo& info);
130 
131  void updateObjectPoses(const std::string& providerName,
132  const objpose::data::ProvidedObjectPoseSeq& providedPoses);
133  void handleProviderUpdate(const std::string& providerName);
134 
135 
136  // Visualization
137 
138  void visualizeRun();
139 
140 
141  public:
142  static const std::string linearPredictionEngineID;
143  static const std::vector<PredictionEngine> predictionEngines;
144 
145 
146  private:
147  viz::Client arviz;
148  DebugObserverInterfacePrx debugObserver;
149 
150  instance::Segment segment;
151 
152  instance::RobotHeadMovement robotHead;
153  std::mutex robotHeadMutex;
154 
155  instance::Visu visu;
156  std::mutex visuMutex;
157 
158  Segment::Calibration calibration;
159 
160 
161  public:
162  struct RemoteGui
163  {
166 
171 
172  void setup(const SegmentAdapter& adapter);
173  void update(SegmentAdapter& adapter);
174  };
175  };
176 
177 } // namespace armarx::armem::server::obj::instance
178 
179 #undef ICE_CURRENT_ARG
Client.h
armarx::armem::server::obj::instance::SegmentAdapter::predictObjectPoses
virtual objpose::ObjectPosePredictionResultSeq predictObjectPoses(const objpose::ObjectPosePredictionRequestSeq &requests, ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:444
armarx::armem::server::obj::instance::SegmentAdapter::RemoteGui::robotHead
instance::RobotHeadMovement::RemoteGui robotHead
Definition: SegmentAdapter.h:170
armarx::armem::robot_state::VirtualRobotReader
The VirtualRobotReader class.
Definition: VirtualRobotReader.h:39
armarx::armem::server::obj::instance::SegmentAdapter::hasProvider
virtual bool hasProvider(const std::string &providerName, ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:387
armarx::armem::server::obj::instance::Visu::RemoteGui
Definition: Visu.h:107
armarx::objpose::ObjectPoseSeq
std::vector< ObjectPose > ObjectPoseSeq
Definition: forward_declarations.h:20
armarx::armem::server::obj::instance::SegmentAdapter::getObjectPosesByProvider
virtual objpose::data::ObjectPoseSeq getObjectPosesByProvider(const std::string &providerName, ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:248
armarx::armem::server::obj::instance::SegmentAdapter::getAvailableObjectPoseEngines
virtual armem::prediction::data::PredictionEngineSeq getAvailableObjectPoseEngines(ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:521
armarx::armem::server::obj::instance::Segment::Calibration
Definition: Segment.h:48
armarx::RemoteGui::Client::VBoxLayout
Definition: Widgets.h:167
armarx::armem::server::MemoryToIceAdapter
Helps connecting a Memory server to the Ice interface.
Definition: MemoryToIceAdapter.h:19
armarx::armem::server::obj::instance::SegmentAdapter::RemoteGui::update
void update(SegmentAdapter &adapter)
Definition: SegmentAdapter.cpp:630
armarx::armem::server::obj::instance::Decay::RemoteGui
Definition: Decay.h:44
armarx::armem::server::obj::instance::SegmentAdapter::getName
std::string getName() const
Definition: SegmentAdapter.cpp:51
ICE_CURRENT_ARG
#define ICE_CURRENT_ARG
Definition: SegmentAdapter.h:42
armarx::armem::server::obj::instance::SegmentAdapter::RemoteGui::decay
instance::Decay::RemoteGui decay
Definition: SegmentAdapter.h:169
armarx::armem::server::obj::instance::SegmentAdapter::init
void init()
Definition: SegmentAdapter.cpp:66
Segment.h
armarx::armem::server::obj::instance::SegmentAdapter::RemoteGui::group
armarx::RemoteGui::Client::GroupBox group
Definition: SegmentAdapter.h:164
armarx::armem::server::obj::instance::SegmentAdapter::reportObjectPoses
virtual void reportObjectPoses(const std::string &providerName, const objpose::data::ProvidedObjectPoseSeq &objectPoses, ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:113
armarx::armem::server::obj::instance::SegmentAdapter::attachObjectToRobotNode
virtual objpose::AttachObjectToRobotNodeOutput attachObjectToRobotNode(const objpose::AttachObjectToRobotNodeInput &input, ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:394
armarx::armem::server::obj::instance
Definition: ArticulatedObjectVisu.cpp:16
armarx::armem::server::obj::instance::SegmentAdapter::getAvailableProviderNames
virtual Ice::StringSeq getAvailableProviderNames(ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:374
armarx::armem::server::obj::instance::SegmentAdapter::RemoteGui::visu
instance::Visu::RemoteGui visu
Definition: SegmentAdapter.h:167
Decay.h
armarx::armem::server::obj::instance::SegmentAdapter::detachAllObjectsFromRobotNodes
virtual objpose::DetachAllObjectsFromRobotNodesOutput detachAllObjectsFromRobotNodes(const objpose::DetachAllObjectsFromRobotNodesInput &input, ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:410
armarx::armem::server::obj::instance::Visu
Models decay of object localizations by decreasing the confidence the longer the object was not local...
Definition: Visu.h:26
armarx::armem::server::obj::instance::SegmentAdapter::getAttachableFrames
virtual objpose::AgentFramesSeq getAttachableFrames(ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:419
armarx::aron::input
ReaderT::InputType & input
Definition: rw.h:12
armarx::armem::server::obj::instance::SegmentAdapter::getAvailableProvidersInfo
virtual objpose::ProviderInfoMap getAvailableProvidersInfo(ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:368
armarx::RemoteGui::Client::GroupBox
Definition: Widgets.h:193
VirtualRobotReader.h
armarx::armem::server::obj::instance::SegmentAdapter::SegmentAdapter
SegmentAdapter(MemoryToIceAdapter &iceMemory)
Definition: SegmentAdapter.cpp:46
armarx::armem::server::obj::instance::SegmentAdapter::detachObjectFromRobotNode
virtual objpose::DetachObjectFromRobotNodeOutput detachObjectFromRobotNode(const objpose::DetachObjectFromRobotNodeInput &input, ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:402
MemoryToIceAdapter.h
armarx::objpose::ProvidedObjectPoseSeq
std::vector< ProvidedObjectPose > ProvidedObjectPoseSeq
Definition: forward_declarations.h:25
armarx::armem::server::obj::instance::SegmentAdapter::getObjectPoses
virtual objpose::data::ObjectPoseSeq getObjectPoses(ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:223
armarx::armem::server::obj::instance::SegmentAdapter::RemoteGui::segment
instance::Segment::RemoteGui segment
Definition: SegmentAdapter.h:168
armarx::armem::server::obj::instance::SegmentAdapter::getProviderInfo
virtual objpose::ProviderInfo getProviderInfo(const std::string &providerName, ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:380
armarx::Logging
Base Class for all Logging classes.
Definition: Logging.h:239
armarx::armem::server::obj::instance::RobotHeadMovement
Definition: RobotHeadMovement.h:25
armarx::armem::server::obj::instance::RobotHeadMovement::RemoteGui
Definition: RobotHeadMovement.h:65
armarx::armem::server::obj::instance::SegmentAdapter::RemoteGui::setup
void setup(const SegmentAdapter &adapter)
Definition: SegmentAdapter.cpp:609
IceUtil::Handle< class PropertyDefinitionContainer >
RobotHeadMovement.h
armarx::armem::server::obj::instance::SegmentAdapter::linearPredictionEngineID
static const std::string linearPredictionEngineID
Definition: SegmentAdapter.h:142
IceInternal::ProxyHandle<::IceProxy::armarx::DebugObserverInterface >
armarx::armem::server::obj::instance::SegmentAdapter
Helps implementing the armarx::armem::server::ObjectInstanceSegmentInterface.
Definition: SegmentAdapter.h:50
armarx::armem::server::obj::instance::Segment::RemoteGui
Definition: Segment.h:219
armarx::armem::server::obj::instance::SegmentAdapter::reportProviderAvailable
virtual void reportProviderAvailable(const std::string &providerName, const objpose::ProviderInfo &info, ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:104
Visu.h
Widgets.h
armarx::armem::server::obj::instance::SegmentAdapter::signalHeadMovement
virtual objpose::SignalHeadMovementOutput signalHeadMovement(const objpose::SignalHeadMovementInput &input, ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:436
armarx::armem::server::obj::instance::Segment
Definition: Segment.h:36
armarx::armem::server::obj::instance::SegmentAdapter::RemoteGui::layout
armarx::RemoteGui::Client::VBoxLayout layout
Definition: SegmentAdapter.h:165
armarx::viz::Client
Definition: Client.h:117
armarx::armem::server::obj::instance::SegmentAdapter::RemoteGui
Definition: SegmentAdapter.h:162
armarx::armem::server::obj::instance::SegmentAdapter::requestObjects
virtual objpose::observer::RequestObjectsOutput requestObjects(const objpose::observer::RequestObjectsInput &input, ICE_CURRENT_ARG) override
Definition: SegmentAdapter.cpp:274
armarx::armem::server::obj::instance::SegmentAdapter::predictionEngines
static const std::vector< PredictionEngine > predictionEngines
Definition: SegmentAdapter.h:143
armarx::armem::server::obj::instance::SegmentAdapter::connect
void connect(robot_state::VirtualRobotReader *virtualRobotReader, KinematicUnitObserverInterfacePrx kinematicUnitObserver, viz::Client arviz, DebugObserverInterfacePrx debugObserver)
Definition: SegmentAdapter.cpp:78
armarx::armem::server::obj::instance::SegmentAdapter::defineProperties
void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string &prefix="")
Definition: SegmentAdapter.cpp:57