GraspCandidateObserver.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 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 RobotAPI
18 * @author Simon Ottenhaus
19 * @copyright 2019 Humanoids Group, H2T, KIT
20 * @license http://www.gnu.org/licenses/gpl-2.0.txt
21 * GNU General Public License
22 */
23 
24 #pragma once
25 
26 #include <mutex>
27 
29 
30 #include <RobotAPI/interface/observers/GraspCandidateObserverInterface.h>
33 
34 namespace armarx
35 {
36  /**
37  * \class GraspCandidateObserverPropertyDefinitions
38  * \brief
39  */
41  {
42  public:
45  {
46  defineOptionalProperty<std::string>("GraspCandidatesTopicName",
47  "GraspCandidatesTopic",
48  "Name of the Grasp Candidate Topic");
49  defineOptionalProperty<std::string>(
50  "ConfigTopicName",
51  "GraspCandidateProviderConfigTopic",
52  "Name of the Grasp Candidate Provider Config Topic");
53  }
54  };
55 
56  /**
57  * \class GraspCandidateObserver
58  * \ingroup RobotAPI-SensorActorUnits-observers
59  */
61  virtual public Observer,
62  virtual public armarx::armem::ClientPluginUser,
63  virtual public grasping::GraspCandidateObserverInterface
64  {
65  public:
67 
68  // framework hooks
69  std::string
70  getDefaultName() const override
71  {
72  return "GraspCandidateObserver";
73  }
74 
75  void onInitObserver() override;
76  void onConnectObserver() override;
77 
78  /**
79  * \see PropertyUser::createPropertyDefinitions()
80  */
82 
83  public:
84  static bool FilterMatches(const grasping::CandidateFilterConditionPtr& filter,
85  const std::string& providerName,
86  const grasping::GraspCandidatePtr& candidate);
87  static std::string ObjectTypeToString(objpose::ObjectType type);
88 
89  // GraspCandidateProviderListener interface
90  public:
91  void reportProviderInfo(const std::string& providerName,
92  const grasping::ProviderInfoPtr& info,
93  const ::Ice::Current& = Ice::emptyCurrent) override;
94  void reportGraspCandidates(const std::string& providerName,
95  const grasping::GraspCandidateSeq& candidates,
96  const ::Ice::Current& = Ice::emptyCurrent) override;
97  void reportBimanualGraspCandidates(const std::string& providerName,
98  const grasping::BimanualGraspCandidateSeq& candidates,
99  const ::Ice::Current& = Ice::emptyCurrent) override;
100 
101  // GraspCandidateObserverInterface interface
102  public:
103  grasping::InfoMap
104  getAvailableProvidersWithInfo(const ::Ice::Current& = Ice::emptyCurrent) override;
105  grasping::StringSeq getAvailableProviderNames(const ::Ice::Current&) override;
106  grasping::ProviderInfoPtr
107  getProviderInfo(const std::string& providerName,
108  const ::Ice::Current& = Ice::emptyCurrent) override;
109  bool hasProvider(const std::string& providerName, const Ice::Current& c) override;
110  grasping::GraspCandidateSeq
111  getAllCandidates(const ::Ice::Current& = Ice::emptyCurrent) override;
112  grasping::GraspCandidateSeq
113  getCandidatesByProvider(const std::string& providerName,
114  const Ice::Current& c = Ice::emptyCurrent) override;
115  grasping::GraspCandidateSeq
116  getCandidatesByProviders(const Ice::StringSeq& providerNames,
117  const Ice::Current& c = Ice::emptyCurrent) override;
118  grasping::GraspCandidateSeq
119  getCandidatesByFilter(const grasping::CandidateFilterConditionPtr& filter,
120  const ::Ice::Current& = Ice::emptyCurrent) override;
121  Ice::Int getUpdateCounterByProvider(const std::string& providerName,
122  const ::Ice::Current& = Ice::emptyCurrent) override;
123  grasping::IntMap getAllUpdateCounters(const Ice::Current& providerName) override;
124  bool setProviderConfig(const std::string& providerName,
125  const StringVariantBaseMap& config,
126  const ::Ice::Current& = Ice::emptyCurrent) override;
127 
128  void setSelectedCandidates(const grasping::GraspCandidateSeq& candidates,
129  const ::Ice::Current& = Ice::emptyCurrent) override;
130  grasping::GraspCandidateSeq
131  getSelectedCandidates(const ::Ice::Current& = Ice::emptyCurrent) override;
132 
133  // bimanual stuff
134  grasping::BimanualGraspCandidateSeq
135  getAllBimanualCandidates(const ::Ice::Current& = Ice::emptyCurrent) override;
136 
137 
138  // void setSelectedBimanualCandidates(::armarx::grasping::BimanualGraspCandidateSeq, const ::Ice::Current&) = 0;
139  void setSelectedBimanualCandidates(const grasping::BimanualGraspCandidateSeq& candidates,
140  const ::Ice::Current& = Ice::emptyCurrent) override;
141  grasping::BimanualGraspCandidateSeq
142  getSelectedBimanualCandidates(const ::Ice::Current& = Ice::emptyCurrent) override;
143 
144 
145  void clearCandidatesByProvider(const std::string& providerName,
146  const Ice::Current& c) override;
147 
148  private:
149  bool hasProvider(const std::string& providerName);
150  void checkHasProvider(const std::string& providerName);
151  grasping::StringSeq getAvailableProviderNames();
152  std::mutex dataMutex;
153  std::map<std::string, grasping::GraspCandidateSeq> candidates;
154  std::map<std::string, grasping::BimanualGraspCandidateSeq> bimanualCandidates;
155  grasping::InfoMap providers;
156  std::map<std::string, int> updateCounters;
157 
158  grasping::GraspCandidateProviderInterfacePrx configTopic;
159 
160  std::mutex selectedCandidatesMutex;
161  grasping::GraspCandidateSeq selectedCandidates;
162 
163  grasping::BimanualGraspCandidateSeq selectedBimanualCandidates;
164  armarx::armem::GraspCandidateWriter graspCandidateWriter;
165 
166  void handleProviderUpdate(const std::string& providerName, int candidateCount);
167  };
168 
169 } // namespace armarx
armarx::GraspCandidateObserver::FilterMatches
static bool FilterMatches(const grasping::CandidateFilterConditionPtr &filter, const std::string &providerName, const grasping::GraspCandidatePtr &candidate)
Definition: GraspCandidateObserver.cpp:69
armarx::GraspCandidateObserverPropertyDefinitions
Definition: GraspCandidateObserver.h:40
armarx::GraspCandidateObserver::getDefaultName
std::string getDefaultName() const override
Retrieve default name of component.
Definition: GraspCandidateObserver.h:70
armarx::GraspCandidateObserver::getCandidatesByFilter
grasping::GraspCandidateSeq getCandidatesByFilter(const grasping::CandidateFilterConditionPtr &filter, const ::Ice::Current &=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:247
armarx::GraspCandidateObserver::createPropertyDefinitions
PropertyDefinitionsPtr createPropertyDefinitions() override
Definition: GraspCandidateObserver.cpp:62
armarx::GraspCandidateObserver::getProviderInfo
grasping::ProviderInfoPtr getProviderInfo(const std::string &providerName, const ::Ice::Current &=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:196
armarx::StringVariantBaseMap
std::map< std::string, VariantBasePtr > StringVariantBaseMap
Definition: ManagedIceObject.h:110
armarx::Observer
Baseclass for all ArmarX Observers.
Definition: Observer.h:84
armarx::GraspCandidateObserver::getAllBimanualCandidates
grasping::BimanualGraspCandidateSeq getAllBimanualCandidates(const ::Ice::Current &=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:311
armarx::GraspCandidateObserver::reportProviderInfo
void reportProviderInfo(const std::string &providerName, const grasping::ProviderInfoPtr &info, const ::Ice::Current &=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:162
armarx::armem::GraspCandidateWriter
Definition: GraspCandidateWriter.h:13
armarx::GraspCandidateObserver::getCandidatesByProvider
grasping::GraspCandidateSeq getCandidatesByProvider(const std::string &providerName, const Ice::Current &c=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:223
armarx::GraspCandidateObserver::getAllCandidates
grasping::GraspCandidateSeq getAllCandidates(const ::Ice::Current &=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:211
armarx::GraspCandidateObserver::getCandidatesByProviders
grasping::GraspCandidateSeq getCandidatesByProviders(const Ice::StringSeq &providerNames, const Ice::Current &c=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:230
armarx::PropertyDefinitionContainer::prefix
std::string prefix
Prefix of the properties such as namespace, domain, component name, etc.
Definition: PropertyDefinitionContainer.h:345
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
armarx::GraspCandidateObserverPropertyDefinitions::GraspCandidateObserverPropertyDefinitions
GraspCandidateObserverPropertyDefinitions(std::string prefix)
Definition: GraspCandidateObserver.h:43
armarx::GraspCandidateObserver::onInitObserver
void onInitObserver() override
Framework hook.
Definition: GraspCandidateObserver.cpp:47
armarx::GraspCandidateObserver::clearCandidatesByProvider
void clearCandidatesByProvider(const std::string &providerName, const Ice::Current &c) override
Definition: GraspCandidateObserver.cpp:339
Observer.h
armarx::armem::client::plugins::PluginUser
Adds the Memory Name System client component plugin.
Definition: PluginUser.h:27
armarx::GraspCandidateObserver::setProviderConfig
bool setProviderConfig(const std::string &providerName, const StringVariantBaseMap &config, const ::Ice::Current &=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:282
armarx::GraspCandidateObserver::setSelectedBimanualCandidates
void setSelectedBimanualCandidates(const grasping::BimanualGraspCandidateSeq &candidates, const ::Ice::Current &=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:323
armarx::GraspCandidateObserver::getSelectedBimanualCandidates
grasping::BimanualGraspCandidateSeq getSelectedBimanualCandidates(const ::Ice::Current &=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:332
armarx::GraspCandidateObserver::setSelectedCandidates
void setSelectedCandidates(const grasping::GraspCandidateSeq &candidates, const ::Ice::Current &=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:296
armarx::GraspCandidateObserver::ObjectTypeToString
static std::string ObjectTypeToString(objpose::ObjectType type)
Definition: GraspCandidateObserver.cpp:99
armarx::GraspCandidateObserver::reportBimanualGraspCandidates
void reportBimanualGraspCandidates(const std::string &providerName, const grasping::BimanualGraspCandidateSeq &candidates, const ::Ice::Current &=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:152
armarx::GraspCandidateObserver::GraspCandidateObserver
GraspCandidateObserver()
Definition: GraspCandidateObserver.cpp:42
GraspCandidateWriter.h
armarx::GraspCandidateObserver::getAllUpdateCounters
grasping::IntMap getAllUpdateCounters(const Ice::Current &providerName) override
Definition: GraspCandidateObserver.cpp:275
armarx::GraspCandidateObserver::getAvailableProvidersWithInfo
grasping::InfoMap getAvailableProvidersWithInfo(const ::Ice::Current &=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:182
IceUtil::Handle
Definition: forward_declarations.h:30
armarx::GraspCandidateObserver
Definition: GraspCandidateObserver.h:60
PluginUser.h
armarx::VariantType::Int
const VariantTypeId Int
Definition: Variant.h:917
armarx::GraspCandidateObserver::hasProvider
bool hasProvider(const std::string &providerName, const Ice::Current &c) override
Definition: GraspCandidateObserver.cpp:204
armarx::ObserverPropertyDefinitions
Definition: Observer.h:49
armarx::GraspCandidateObserver::getUpdateCounterByProvider
Ice::Int getUpdateCounterByProvider(const std::string &providerName, const ::Ice::Current &=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:266
armarx::GraspCandidateObserver::onConnectObserver
void onConnectObserver() override
Framework hook.
Definition: GraspCandidateObserver.cpp:54
armarx::GraspCandidateObserver::getSelectedCandidates
grasping::GraspCandidateSeq getSelectedCandidates(const ::Ice::Current &=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:304
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::GraspCandidateObserver::reportGraspCandidates
void reportGraspCandidates(const std::string &providerName, const grasping::GraspCandidateSeq &candidates, const ::Ice::Current &=Ice::emptyCurrent) override
Definition: GraspCandidateObserver.cpp:140