AffordanceExtraction.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 Lesser General Public License as
6  * published by the Free Software Foundation; either version 2 of
7  * the License, or (at your option) any later version.
8  *
9  * ArmarX is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  *
17  * @package VisionX
18  * @author Peter Kaiser (peter dot kaiser at kit dot edu)
19  * @date 2014
20  * @copyright http://www.gnu.org/licenses/gpl.txt
21  * GNU General Public License
22  */
23 
24 #pragma once
25 
26 
27 #include <mutex>
28 
29 #include <Eigen/Eigen>
30 
33 #include <ArmarXCore/interface/observers/ObserverInterface.h>
34 
35 #include <VisionX/interface/components/AffordanceExtraction.h>
36 #include <VisionX/interface/components/PointCloudSegmenter.h>
37 
38 #include <AffordanceKit/affordances/BimanualAlignedGraspAffordance.h>
39 #include <AffordanceKit/affordances/BimanualAlignedPlatformGraspAffordance.h>
40 #include <AffordanceKit/affordances/BimanualAlignedPrismaticGraspAffordance.h>
41 #include <AffordanceKit/affordances/BimanualGraspAffordance.h>
42 #include <AffordanceKit/affordances/BimanualLiftAffordance.h>
43 #include <AffordanceKit/affordances/BimanualOpposedGraspAffordance.h>
44 #include <AffordanceKit/affordances/BimanualOpposedPlatformGraspAffordance.h>
45 #include <AffordanceKit/affordances/BimanualOpposedPrismaticGraspAffordance.h>
46 #include <AffordanceKit/affordances/BimanualPlatformGraspAffordance.h>
47 #include <AffordanceKit/affordances/BimanualPrismaticGraspAffordance.h>
48 #include <AffordanceKit/affordances/BimanualTurnAffordance.h>
49 #include <AffordanceKit/affordances/GraspAffordance.h>
50 #include <AffordanceKit/affordances/HoldAffordance.h>
51 #include <AffordanceKit/affordances/LeanAffordance.h>
52 #include <AffordanceKit/affordances/LiftAffordance.h>
53 #include <AffordanceKit/affordances/PlatformGraspAffordance.h>
54 #include <AffordanceKit/affordances/PrismaticGraspAffordance.h>
55 #include <AffordanceKit/affordances/PullAffordance.h>
56 #include <AffordanceKit/affordances/PushAffordance.h>
57 #include <AffordanceKit/affordances/SupportAffordance.h>
58 #include <AffordanceKit/affordances/TurnAffordance.h>
60 #include <MemoryX/interface/components/WorkingMemoryInterface.h>
63 
64 namespace armarx
65 {
66  /**
67  * @class AffordanceExtractionPropertyDefinitions
68  * @brief
69  */
71  {
72  public:
75  {
76  defineOptionalProperty<std::string>("DebugObserverName",
77  "DebugObserver",
78  "Name of the topic the DebugObserver listens on");
79  defineOptionalProperty<std::string>(
80  "WorkingMemoryName", "WorkingMemory", "Name of WorkingMemory component");
81  defineOptionalProperty<std::string>("AffordanceExtractionTopicName",
82  "ExtractedAffordances",
83  "Topic for publishing extraction notifications");
84  defineOptionalProperty<std::string>(
85  "PrimitiveExtractionTopicName",
86  "SegmentedPointCloud",
87  "Topic under which primitive extraction notifications are published");
88  defineOptionalProperty<std::string>(
89  "EmbodimentName",
90  "WalkMan",
91  "Name of the embodiment to use for affordance extraction (Armar3, Armar4, WalkMan");
92  defineOptionalProperty<float>(
93  "SpatialSamplingDistance", 75, "Distance between two spatial samplings in mm");
94  defineOptionalProperty<int>(
95  "NumOrientationalSamplings", 4, "Number of orientational samplings");
96  defineOptionalProperty<std::string>("RestrictToAffordanceList",
97  "",
98  "Only evaluate affordances from this list (use "
99  "short names in comma separated list)");
100  defineOptionalProperty<int>("MaxPrimitiveSamplingSize",
101  0,
102  "Maximum size of primitive sampling to be considered for "
103  "extracting affordances (0 means infinity)");
104  defineOptionalProperty<float>(
105  "AffordanceExtractionCertainty",
106  0.8,
107  "Certainty value attributed to visual affordance extraction");
108  }
109  };
110 
111  /**
112  * @class AffordanceExtraction
113  * @ingroup RobotSkillTemplates-Components
114  * @brief A brief description
115  *
116  * Detailed Description
117  */
119  virtual public Component,
120  virtual public AffordanceExtractionInterface
121  {
122  public:
124 
125  /**
126  * @see armarx::ManagedIceObject::getDefaultName()
127  */
128  std::string
129  getDefaultName() const override
130  {
131  return "AffordanceExtraction";
132  }
133 
134  void reportNewPointCloudSegmentation(const Ice::Current& c = Ice::emptyCurrent) override;
135 
136  void enablePipelineStep(const Ice::Current& c = Ice::emptyCurrent) override;
137  void disablePipelineStep(const Ice::Current& c = Ice::emptyCurrent) override;
138  bool isPipelineStepEnabled(const Ice::Current& c = Ice::emptyCurrent) override;
139  armarx::TimestampBasePtr
140  getLastProcessedTimestamp(const Ice::Current& c = Ice::emptyCurrent) override;
141 
142  void addObservation(const PoseBasePtr& endEffectorPose,
143  const std::string& affordance,
144  const std::string& primitiveId,
145  float result,
146  float certainty,
147  float sigma_pos,
148  float sigma_rot,
149  const Ice::Current& c = Ice::emptyCurrent) override;
150 
151  void exportScene(const std::string& filename,
152  const Ice::Current& c = Ice::emptyCurrent) override;
153  void importScene(const std::string& filename,
154  const Ice::Current& c = Ice::emptyCurrent) override;
155 
156  protected:
157  /**
158  * @see armarx::ManagedIceObject::onInitComponent()
159  */
160  void onInitComponent() override;
161 
162  /**
163  * @see armarx::ManagedIceObject::onConnectComponent()
164  */
165  void onConnectComponent() override;
166 
167  /**
168  * @see armarx::ManagedIceObject::onDisconnectComponent()
169  */
170  void onDisconnectComponent() override;
171 
172  /**
173  * @see armarx::ManagedIceObject::onExitComponent()
174  */
175  void onExitComponent() override;
176 
177  /**
178  * @see PropertyUser::createPropertyDefinitions()
179  */
181 
183 
184  protected:
185  AffordanceExtractionListenerPrx listenerPrx;
186 
187  std::mutex affordancesMutex;
188 
189  std::mutex primitivesMutex;
191 
192  std::mutex timestampMutex;
194 
195  std::mutex enableMutex;
196  bool enabled;
197 
199 
200  memoryx::WorkingMemoryInterfacePrx workingMemoryPrx;
201  memoryx::AffordanceSegmentBasePrx affordanceSegment;
202  memoryx::EnvironmentalPrimitiveSegmentBasePrx environmentalPrimitiveSegment;
203 
204  AffordanceKit::PrimitiveSetPtr primitiveSegmentation;
205 
206  AffordanceKit::EmbodimentPtr embodiment;
207 
208  AffordanceKit::PlatformGraspAffordancePtr platformGraspAffordance;
209  AffordanceKit::PrismaticGraspAffordancePtr prismaticGraspAffordance;
210  AffordanceKit::GraspAffordancePtr graspAffordance;
211 
212  AffordanceKit::SupportAffordancePtr supportAffordance;
213  AffordanceKit::LeanAffordancePtr leanAffordance;
214  AffordanceKit::HoldAffordancePtr holdAffordance;
215  AffordanceKit::LiftAffordancePtr liftAffordance;
216  AffordanceKit::TurnAffordancePtr turnAffordance;
217  AffordanceKit::PushAffordancePtr pushAffordance;
218  AffordanceKit::PullAffordancePtr pullAffordance;
219 
220  AffordanceKit::BimanualPlatformGraspAffordancePtr bimanualPlatformGraspAffordance;
221  AffordanceKit::BimanualPrismaticGraspAffordancePtr bimanualPrismaticGraspAffordance;
222  AffordanceKit::BimanualGraspAffordancePtr bimanualGraspAffordance;
223  AffordanceKit::BimanualOpposedGraspAffordancePtr bimanualOpposedGraspAffordance;
224  AffordanceKit::BimanualAlignedGraspAffordancePtr bimanualAlignedGraspAffordance;
225  AffordanceKit::BimanualOpposedPlatformGraspAffordancePtr
227  AffordanceKit::BimanualOpposedPrismaticGraspAffordancePtr
229  AffordanceKit::BimanualAlignedPlatformGraspAffordancePtr
231  AffordanceKit::BimanualAlignedPrismaticGraspAffordancePtr
233  AffordanceKit::BimanualTurnAffordancePtr bimanualTurnAffordance;
234  AffordanceKit::BimanualLiftAffordancePtr bimanualLiftAffordance;
235 
236  std::map<std::string, memoryx::AffordanceType> affordanceTypes;
237 
238  std::vector<AffordanceKit::UnimanualAffordancePtr> unimanualAffordances;
239  std::vector<AffordanceKit::BimanualAffordancePtr> bimanualAffordances;
240 
241  std::set<std::string> affordanceRestriction;
242 
245 
246 
248  };
249 } // namespace armarx
armarx::AffordanceExtraction::affordancesMutex
std::mutex affordancesMutex
Definition: AffordanceExtraction.h:187
armarx::AffordanceExtraction::pushAffordance
AffordanceKit::PushAffordancePtr pushAffordance
Definition: AffordanceExtraction.h:217
armarx::AffordanceExtraction::onExitComponent
void onExitComponent() override
Definition: AffordanceExtraction.cpp:285
armarx::AffordanceExtraction::getLastProcessedTimestamp
armarx::TimestampBasePtr getLastProcessedTimestamp(const Ice::Current &c=Ice::emptyCurrent) override
Definition: AffordanceExtraction.cpp:572
armarx::AffordanceExtraction::onInitComponent
void onInitComponent() override
Definition: AffordanceExtraction.cpp:69
SegmentedMemory.h
armarx::AffordanceExtraction::lastProcessedTimestamp
long lastProcessedTimestamp
Definition: AffordanceExtraction.h:193
armarx::AffordanceExtraction::affordanceRestriction
std::set< std::string > affordanceRestriction
Definition: AffordanceExtraction.h:241
armarx::AffordanceExtraction::bimanualOpposedPrismaticGraspAffordance
AffordanceKit::BimanualOpposedPrismaticGraspAffordancePtr bimanualOpposedPrismaticGraspAffordance
Definition: AffordanceExtraction.h:228
armarx::AffordanceExtraction::liftAffordance
AffordanceKit::LiftAffordancePtr liftAffordance
Definition: AffordanceExtraction.h:215
armarx::AffordanceExtraction::timestampMutex
std::mutex timestampMutex
Definition: AffordanceExtraction.h:192
armarx::AffordanceExtraction::environmentalPrimitiveSegment
memoryx::EnvironmentalPrimitiveSegmentBasePrx environmentalPrimitiveSegment
Definition: AffordanceExtraction.h:202
armarx::AffordanceExtraction::bimanualPlatformGraspAffordance
AffordanceKit::BimanualPlatformGraspAffordancePtr bimanualPlatformGraspAffordance
Definition: AffordanceExtraction.h:220
armarx::AffordanceExtraction::affordanceExtractionThread
void affordanceExtractionThread()
Definition: AffordanceExtraction.cpp:375
armarx::AffordanceExtraction::getDefaultName
std::string getDefaultName() const override
Definition: AffordanceExtraction.h:129
armarx::AffordanceExtraction::bimanualOpposedPlatformGraspAffordance
AffordanceKit::BimanualOpposedPlatformGraspAffordancePtr bimanualOpposedPlatformGraspAffordance
Definition: AffordanceExtraction.h:226
armarx::AffordanceExtraction::bimanualLiftAffordance
AffordanceKit::BimanualLiftAffordancePtr bimanualLiftAffordance
Definition: AffordanceExtraction.h:234
armarx::AffordanceExtraction::embodiment
AffordanceKit::EmbodimentPtr embodiment
Definition: AffordanceExtraction.h:206
armarx::PropertyDefinitionContainer::prefix
std::string prefix
Prefix of the properties such as namespace, domain, component name, etc.
Definition: PropertyDefinitionContainer.h:345
armarx::AffordanceExtraction::importScene
void importScene(const std::string &filename, const Ice::Current &c=Ice::emptyCurrent) override
Definition: AffordanceExtraction.cpp:363
armarx::AffordanceExtraction::enabled
bool enabled
Definition: AffordanceExtraction.h:196
PeriodicTask.h
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
EnvironmentalPrimitiveSegment.h
armarx::AffordanceExtraction::enableMutex
std::mutex enableMutex
Definition: AffordanceExtraction.h:195
armarx::AffordanceExtraction::isPipelineStepEnabled
bool isPipelineStepEnabled(const Ice::Current &c=Ice::emptyCurrent) override
Definition: AffordanceExtraction.cpp:565
armarx::AffordanceExtraction::prismaticGraspAffordance
AffordanceKit::PrismaticGraspAffordancePtr prismaticGraspAffordance
Definition: AffordanceExtraction.h:209
armarx::AffordanceExtraction::workingMemoryPrx
memoryx::WorkingMemoryInterfacePrx workingMemoryPrx
Definition: AffordanceExtraction.h:200
armarx::AffordanceExtraction::leanAffordance
AffordanceKit::LeanAffordancePtr leanAffordance
Definition: AffordanceExtraction.h:213
armarx::AffordanceExtraction::enablePipelineStep
void enablePipelineStep(const Ice::Current &c=Ice::emptyCurrent) override
Definition: AffordanceExtraction.cpp:547
armarx::AffordanceExtraction::unimanualAffordances
std::vector< AffordanceKit::UnimanualAffordancePtr > unimanualAffordances
Definition: AffordanceExtraction.h:238
armarx::AffordanceExtractionPropertyDefinitions
Definition: AffordanceExtraction.h:70
armarx::AffordanceExtraction::turnAffordance
AffordanceKit::TurnAffordancePtr turnAffordance
Definition: AffordanceExtraction.h:216
armarx::AffordanceExtraction::onDisconnectComponent
void onDisconnectComponent() override
Definition: AffordanceExtraction.cpp:279
armarx::AffordanceExtraction::bimanualAffordances
std::vector< AffordanceKit::BimanualAffordancePtr > bimanualAffordances
Definition: AffordanceExtraction.h:239
armarx::AffordanceExtraction::addObservation
void addObservation(const PoseBasePtr &endEffectorPose, const std::string &affordance, const std::string &primitiveId, float result, float certainty, float sigma_pos, float sigma_rot, const Ice::Current &c=Ice::emptyCurrent) override
Definition: AffordanceExtraction.cpp:290
armarx::AffordanceExtraction::pullAffordance
AffordanceKit::PullAffordancePtr pullAffordance
Definition: AffordanceExtraction.h:218
armarx::AffordanceExtraction::supportAffordance
AffordanceKit::SupportAffordancePtr supportAffordance
Definition: AffordanceExtraction.h:212
armarx::AffordanceExtractionPropertyDefinitions::AffordanceExtractionPropertyDefinitions
AffordanceExtractionPropertyDefinitions(std::string prefix)
Definition: AffordanceExtraction.h:73
filename
std::string filename
Definition: VisualizationRobot.cpp:86
AffordanceSegment.h
armarx::AffordanceExtraction::affordanceTypes
std::map< std::string, memoryx::AffordanceType > affordanceTypes
Definition: AffordanceExtraction.h:236
armarx::AffordanceExtraction::primitiveSegmentation
AffordanceKit::PrimitiveSetPtr primitiveSegmentation
Definition: AffordanceExtraction.h:204
armarx::AffordanceExtraction::disablePipelineStep
void disablePipelineStep(const Ice::Current &c=Ice::emptyCurrent) override
Definition: AffordanceExtraction.cpp:556
armarx::AffordanceExtraction::bimanualGraspAffordance
AffordanceKit::BimanualGraspAffordancePtr bimanualGraspAffordance
Definition: AffordanceExtraction.h:222
armarx::AffordanceExtraction::graspAffordance
AffordanceKit::GraspAffordancePtr graspAffordance
Definition: AffordanceExtraction.h:210
armarx::AffordanceExtraction::bimanualAlignedPrismaticGraspAffordance
AffordanceKit::BimanualAlignedPrismaticGraspAffordancePtr bimanualAlignedPrismaticGraspAffordance
Definition: AffordanceExtraction.h:232
armarx::AffordanceExtraction::bimanualOpposedGraspAffordance
AffordanceKit::BimanualOpposedGraspAffordancePtr bimanualOpposedGraspAffordance
Definition: AffordanceExtraction.h:223
armarx::AffordanceExtraction::AffordanceExtraction
AffordanceExtraction()
Definition: AffordanceExtraction.cpp:42
armarx::AffordanceExtraction::primitivesMutex
std::mutex primitivesMutex
Definition: AffordanceExtraction.h:189
Component.h
armarx::Component
Baseclass for all ArmarX ManagedIceObjects requiring properties.
Definition: Component.h:91
armarx::AffordanceExtraction::bimanualPrismaticGraspAffordance
AffordanceKit::BimanualPrismaticGraspAffordancePtr bimanualPrismaticGraspAffordance
Definition: AffordanceExtraction.h:221
armarx::AffordanceExtraction::hasNewPrimitives
bool hasNewPrimitives
Definition: AffordanceExtraction.h:190
armarx::ComponentPropertyDefinitions
Default component property definition container.
Definition: Component.h:69
armarx::AffordanceExtraction::bimanualAlignedPlatformGraspAffordance
AffordanceKit::BimanualAlignedPlatformGraspAffordancePtr bimanualAlignedPlatformGraspAffordance
Definition: AffordanceExtraction.h:230
armarx::AffordanceExtraction::affordanceExtractionTask
PeriodicTask< AffordanceExtraction >::pointer_type affordanceExtractionTask
Definition: AffordanceExtraction.h:198
IceUtil::Handle
Definition: forward_declarations.h:30
armarx::AffordanceExtraction::createPropertyDefinitions
PropertyDefinitionsPtr createPropertyDefinitions() override
Definition: AffordanceExtraction.cpp:540
armarx::AffordanceExtraction::onConnectComponent
void onConnectComponent() override
Definition: AffordanceExtraction.cpp:242
IceInternal::ProxyHandle<::IceProxy::armarx::DebugObserverInterface >
armarx::AffordanceExtraction
A brief description.
Definition: AffordanceExtraction.h:118
armarx::AffordanceExtraction::platformGraspAffordance
AffordanceKit::PlatformGraspAffordancePtr platformGraspAffordance
Definition: AffordanceExtraction.h:208
armarx::AffordanceExtraction::reportNewPointCloudSegmentation
void reportNewPointCloudSegmentation(const Ice::Current &c=Ice::emptyCurrent) override
Definition: AffordanceExtraction.cpp:48
armarx::AffordanceExtraction::bimanualAlignedGraspAffordance
AffordanceKit::BimanualAlignedGraspAffordancePtr bimanualAlignedGraspAffordance
Definition: AffordanceExtraction.h:224
armarx::AffordanceExtraction::holdAffordance
AffordanceKit::HoldAffordancePtr holdAffordance
Definition: AffordanceExtraction.h:214
armarx::AffordanceExtraction::exportScene
void exportScene(const std::string &filename, const Ice::Current &c=Ice::emptyCurrent) override
Definition: AffordanceExtraction.cpp:354
armarx::AffordanceExtraction::listenerPrx
AffordanceExtractionListenerPrx listenerPrx
Definition: AffordanceExtraction.h:185
armarx::AffordanceExtraction::bimanualTurnAffordance
AffordanceKit::BimanualTurnAffordancePtr bimanualTurnAffordance
Definition: AffordanceExtraction.h:233
armarx::AffordanceExtraction::affordanceExtractionCertainty
float affordanceExtractionCertainty
Definition: AffordanceExtraction.h:244
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::AffordanceExtraction::affordanceSegment
memoryx::AffordanceSegmentBasePrx affordanceSegment
Definition: AffordanceExtraction.h:201
armarx::AffordanceExtraction::debugObserver
DebugObserverInterfacePrx debugObserver
Definition: AffordanceExtraction.h:247
armarx::AffordanceExtraction::maxPrimitiveSamplingSize
unsigned int maxPrimitiveSamplingSize
Definition: AffordanceExtraction.h:243