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>
29
31
34#include <RobotAPI/interface/armem/server/ObjectMemoryInterface.h>
35#include <RobotAPI/interface/core/RobotState.h>
41
42
43#define ICE_CURRENT_ARG const Ice::Current& = Ice::emptyCurrent
44
46{
47
48 /**
49 * @brief Helps implementing the `armarx::armem::server::ObjectInstanceSegmentInterface`.
50 */
52 virtual public armarx::Logging,
53 virtual public armarx::armem::server::ObjectInstanceSegmentInterface
54 {
55 public:
57
58 std::string getName() const;
59 void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string& prefix = "");
60
61 void init();
62 void connect(robot_state::VirtualRobotReader* virtualRobotReader,
63 KinematicUnitObserverInterfacePrx kinematicUnitObserver,
64 viz::Client arviz,
65 DebugObserverInterfacePrx debugObserver);
66
67 void disconnect();
68
69
70 // ObjectPoseTopic interface
71 public:
72 virtual void reportProviderAvailable(const std::string& providerName,
73 const objpose::ProviderInfo& info,
74 ICE_CURRENT_ARG) override;
75 virtual void reportObjectPoses(const std::string& providerName,
76 const objpose::data::ProvidedObjectPoseSeq& objectPoses,
77 ICE_CURRENT_ARG) override;
78
79 // ObjectInstanceSegmentInterface interface
80 public:
81 // OBJECT POSES
82
83 virtual objpose::data::ObjectPoseSeq getObjectPoses(ICE_CURRENT_ARG) override;
84 virtual objpose::data::ObjectPoseSeq
85 getObjectPosesByProvider(const std::string& providerName, ICE_CURRENT_ARG) override;
86
87 // PROVIDER INFORMATION
88
89 virtual bool hasProvider(const std::string& providerName, ICE_CURRENT_ARG) override;
90 virtual objpose::ProviderInfo getProviderInfo(const std::string& providerName,
91 ICE_CURRENT_ARG) override;
92 virtual Ice::StringSeq getAvailableProviderNames(ICE_CURRENT_ARG) override;
93 virtual objpose::ProviderInfoMap getAvailableProvidersInfo(ICE_CURRENT_ARG) override;
94
95
96 // REQUESTING
97
98 virtual objpose::observer::RequestObjectsOutput
99 requestObjects(const objpose::observer::RequestObjectsInput& input,
100 ICE_CURRENT_ARG) override;
101
102 // ATTACHING
103
104 virtual objpose::AttachObjectToRobotNodeOutput
105 attachObjectToRobotNode(const objpose::AttachObjectToRobotNodeInput& input,
106 ICE_CURRENT_ARG) override;
107 virtual objpose::DetachObjectFromRobotNodeOutput
108 detachObjectFromRobotNode(const objpose::DetachObjectFromRobotNodeInput& input,
109 ICE_CURRENT_ARG) override;
110 virtual objpose::DetachAllObjectsFromRobotNodesOutput
111 detachAllObjectsFromRobotNodes(const objpose::DetachAllObjectsFromRobotNodesInput& input,
112 ICE_CURRENT_ARG) override;
113
114 virtual objpose::AgentFramesSeq getAttachableFrames(ICE_CURRENT_ARG) override;
115
116 // HEAD MOVEMENT SIGNALS
117
118 virtual objpose::SignalHeadMovementOutput
119 signalHeadMovement(const objpose::SignalHeadMovementInput& input, ICE_CURRENT_ARG) override;
120
121 // PREDICTING
122
123 virtual objpose::ObjectPosePredictionResultSeq
124 predictObjectPoses(const objpose::ObjectPosePredictionRequestSeq& requests,
125 ICE_CURRENT_ARG) override;
126
127 virtual armem::prediction::data::PredictionEngineSeq
129
130
131 private:
132 void updateProviderInfo(const std::string& providerName, const objpose::ProviderInfo& info);
133
134 void updateObjectPoses(const std::string& providerName,
135 const objpose::data::ProvidedObjectPoseSeq& providedPoses);
136 void handleProviderUpdate(const std::string& providerName);
137
138
139 // Visualization
140
141 void visualizeRun();
142
143
144 public:
145 static const std::string linearPredictionEngineID;
146 static const std::vector<PredictionEngine> predictionEngines;
147
148
149 private:
150 viz::Client arviz;
151 DebugObserverInterfacePrx debugObserver;
152
153 instance::Segment segment;
154
156 std::mutex robotHeadMutex;
157
158 instance::Visu visu;
159 std::mutex visuMutex;
160
161 Segment::Calibration calibration;
162
164
165 bool enableContinuousAttachmentUpdates = true;
166
167 public:
181 };
182
183} // namespace armarx::armem::server::obj::instance
184
185#undef ICE_CURRENT_ARG
#define ICE_CURRENT_ARG
Base Class for all Logging classes.
Definition Logging.h:240
IceUtil::Handle< RunningTask< T > > pointer_type
Shared pointer type for convenience.
Helps connecting a Memory server to the Ice interface.
virtual objpose::ProviderInfo getProviderInfo(const std::string &providerName, ICE_CURRENT_ARG) override
virtual objpose::data::ObjectPoseSeq getObjectPoses(ICE_CURRENT_ARG) override
static const std::vector< PredictionEngine > predictionEngines
virtual objpose::SignalHeadMovementOutput signalHeadMovement(const objpose::SignalHeadMovementInput &input, ICE_CURRENT_ARG) override
virtual objpose::DetachObjectFromRobotNodeOutput detachObjectFromRobotNode(const objpose::DetachObjectFromRobotNodeInput &input, ICE_CURRENT_ARG) override
void connect(robot_state::VirtualRobotReader *virtualRobotReader, KinematicUnitObserverInterfacePrx kinematicUnitObserver, viz::Client arviz, DebugObserverInterfacePrx debugObserver)
virtual Ice::StringSeq getAvailableProviderNames(ICE_CURRENT_ARG) override
virtual armem::prediction::data::PredictionEngineSeq getAvailableObjectPoseEngines(ICE_CURRENT_ARG) override
virtual bool hasProvider(const std::string &providerName, ICE_CURRENT_ARG) override
virtual objpose::ProviderInfoMap getAvailableProvidersInfo(ICE_CURRENT_ARG) override
virtual void reportObjectPoses(const std::string &providerName, const objpose::data::ProvidedObjectPoseSeq &objectPoses, ICE_CURRENT_ARG) override
virtual objpose::DetachAllObjectsFromRobotNodesOutput detachAllObjectsFromRobotNodes(const objpose::DetachAllObjectsFromRobotNodesInput &input, ICE_CURRENT_ARG) override
virtual objpose::observer::RequestObjectsOutput requestObjects(const objpose::observer::RequestObjectsInput &input, ICE_CURRENT_ARG) override
virtual objpose::ObjectPosePredictionResultSeq predictObjectPoses(const objpose::ObjectPosePredictionRequestSeq &requests, ICE_CURRENT_ARG) override
virtual void reportProviderAvailable(const std::string &providerName, const objpose::ProviderInfo &info, ICE_CURRENT_ARG) override
void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string &prefix="")
virtual objpose::AttachObjectToRobotNodeOutput attachObjectToRobotNode(const objpose::AttachObjectToRobotNodeInput &input, ICE_CURRENT_ARG) override
virtual objpose::AgentFramesSeq getAttachableFrames(ICE_CURRENT_ARG) override
virtual objpose::data::ObjectPoseSeq getObjectPosesByProvider(const std::string &providerName, ICE_CURRENT_ARG) override
Models decay of object localizations by decreasing the confidence the longer the object was not local...
Definition Visu.h:27
::IceInternal::ProxyHandle<::IceProxy::armarx::DebugObserverInterface > DebugObserverInterfacePrx
IceUtil::Handle< class PropertyDefinitionContainer > PropertyDefinitionsPtr
PropertyDefinitions smart pointer type.