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
64namespace 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");
80 "WorkingMemoryName", "WorkingMemory", "Name of WorkingMemory component");
81 defineOptionalProperty<std::string>("AffordanceExtractionTopicName",
82 "ExtractedAffordances",
83 "Topic for publishing extraction notifications");
85 "PrimitiveExtractionTopicName",
86 "SegmentedPointCloud",
87 "Topic under which primitive extraction notifications are published");
89 "EmbodimentName",
90 "WalkMan",
91 "Name of the embodiment to use for affordance extraction (Armar3, Armar4, WalkMan");
93 "SpatialSamplingDistance", 75, "Distance between two spatial samplings in mm");
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)");
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
188
189 std::mutex primitivesMutex;
191
192 std::mutex timestampMutex;
194
195 std::mutex enableMutex;
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
constexpr T c
AffordanceKit::BimanualPrismaticGraspAffordancePtr bimanualPrismaticGraspAffordance
AffordanceKit::BimanualTurnAffordancePtr bimanualTurnAffordance
AffordanceKit::BimanualOpposedGraspAffordancePtr bimanualOpposedGraspAffordance
AffordanceKit::HoldAffordancePtr holdAffordance
AffordanceKit::PlatformGraspAffordancePtr platformGraspAffordance
memoryx::AffordanceSegmentBasePrx affordanceSegment
AffordanceKit::BimanualGraspAffordancePtr bimanualGraspAffordance
memoryx::WorkingMemoryInterfacePrx workingMemoryPrx
void reportNewPointCloudSegmentation(const Ice::Current &c=Ice::emptyCurrent) override
AffordanceKit::PrismaticGraspAffordancePtr prismaticGraspAffordance
std::vector< AffordanceKit::UnimanualAffordancePtr > unimanualAffordances
std::map< std::string, memoryx::AffordanceType > affordanceTypes
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
AffordanceKit::BimanualAlignedGraspAffordancePtr bimanualAlignedGraspAffordance
AffordanceKit::BimanualPlatformGraspAffordancePtr bimanualPlatformGraspAffordance
AffordanceKit::LiftAffordancePtr liftAffordance
AffordanceKit::PushAffordancePtr pushAffordance
AffordanceKit::PullAffordancePtr pullAffordance
void enablePipelineStep(const Ice::Current &c=Ice::emptyCurrent) override
DebugObserverInterfacePrx debugObserver
AffordanceKit::BimanualLiftAffordancePtr bimanualLiftAffordance
AffordanceKit::BimanualAlignedPrismaticGraspAffordancePtr bimanualAlignedPrismaticGraspAffordance
std::set< std::string > affordanceRestriction
void disablePipelineStep(const Ice::Current &c=Ice::emptyCurrent) override
PropertyDefinitionsPtr createPropertyDefinitions() override
std::vector< AffordanceKit::BimanualAffordancePtr > bimanualAffordances
AffordanceKit::EmbodimentPtr embodiment
AffordanceExtractionListenerPrx listenerPrx
AffordanceKit::SupportAffordancePtr supportAffordance
AffordanceKit::PrimitiveSetPtr primitiveSegmentation
AffordanceKit::GraspAffordancePtr graspAffordance
AffordanceKit::BimanualAlignedPlatformGraspAffordancePtr bimanualAlignedPlatformGraspAffordance
AffordanceKit::TurnAffordancePtr turnAffordance
void exportScene(const std::string &filename, const Ice::Current &c=Ice::emptyCurrent) override
memoryx::EnvironmentalPrimitiveSegmentBasePrx environmentalPrimitiveSegment
AffordanceKit::BimanualOpposedPrismaticGraspAffordancePtr bimanualOpposedPrismaticGraspAffordance
AffordanceKit::BimanualOpposedPlatformGraspAffordancePtr bimanualOpposedPlatformGraspAffordance
PeriodicTask< AffordanceExtraction >::pointer_type affordanceExtractionTask
armarx::TimestampBasePtr getLastProcessedTimestamp(const Ice::Current &c=Ice::emptyCurrent) override
std::string getDefaultName() const override
bool isPipelineStepEnabled(const Ice::Current &c=Ice::emptyCurrent) override
void importScene(const std::string &filename, const Ice::Current &c=Ice::emptyCurrent) override
AffordanceKit::LeanAffordancePtr leanAffordance
Default component property definition container.
Definition Component.h:70
ComponentPropertyDefinitions(std::string prefix, bool hasObjectNameParameter=true)
Definition Component.cpp:46
Component()
Protected default constructor. Used for virtual inheritance. Use createManagedIceObject() instead.
Definition Component.cpp:66
IceUtil::Handle< PeriodicTask< T > > pointer_type
Shared pointer type for convenience.
std::string prefix
Prefix of the properties such as namespace, domain, component name, etc.
PropertyDefinition< PropertyType > & defineOptionalProperty(const std::string &name, PropertyType defaultValue, const std::string &description="", PropertyDefinitionBase::PropertyConstness constness=PropertyDefinitionBase::eConstant)
This file offers overloads of toIce() and fromIce() functions for STL container types.
::IceInternal::ProxyHandle<::IceProxy::armarx::DebugObserverInterface > DebugObserverInterfacePrx
IceUtil::Handle< class PropertyDefinitionContainer > PropertyDefinitionsPtr
PropertyDefinitions smart pointer type.