SkillProviderComponentPlugin.cpp
Go to the documentation of this file.
2 
4 
7 
8 namespace armarx::plugins
9 {
10  void
12  {
13  }
14 
15  void
17  {
18  auto& p = parent<SkillProviderComponentPluginUser>();
19  p.getProxy(myPrx, -1);
20  }
21 
22  void
24  {
25  auto& p = parent<SkillProviderComponentPluginUser>();
26  const std::string providerName = p.getName();
27 
28  // register self to manager
30  .providerInterface = myPrx,
31  .providedSkills = getSkillDescriptions()};
32 
33  ARMARX_INFO << "Adding provider to manager: " << i.providerId;
34  manager->addProvider(i.toIce()); // add provider info to manager
35  }
36 
37  void
39  {
40  auto& p = parent<SkillProviderComponentPluginUser>();
41  std::string providerName = p.getName();
42 
43  auto id = skills::manager::dto::ProviderID{providerName};
44  manager->removeProvider(id);
45  }
46 
47  void
49  {
50  std::string prefix = "skill.";
51  properties->component(
52  manager,
53  "SkillMemory",
54  prefix + "SkillManager",
55  "The name of the SkillManager (or SkillMemory) proxy this provider belongs to.");
56  }
57 
58  void
59  SkillProviderComponentPlugin::addSkillFactory(std::unique_ptr<skills::SkillBlueprint>&& fac)
60  {
61  if (!fac)
62  {
63  return;
64  }
65 
66  auto& p = parent<SkillProviderComponentPluginUser>();
67  const std::string componentName = p.getName();
68 
69  const skills::ProviderID providerId({componentName});
70 
71  // lock skills map
72  const std::unique_lock l(skillFactoriesMutex);
73  auto skillId = fac->createSkillDescription(providerId).skillId;
74 
75  if (skillFactories.find(skillId) != skillFactories.end())
76  {
77  ARMARX_WARNING << "Try to add a skill factory for skill '" + skillId.toString() +
78  "' which already exists in list. Ignoring this skill.";
79  return;
80  }
81 
82  ARMARX_INFO << "Adding skill `" << skillId << "` to component `" << componentName << "` .";
83 
84  skillFactories.emplace(skillId, std::move(fac));
85 
86  // if (connected)
87  // {
88  // // if skill is added after onConnect we have to set the proxies manually.
89  // std::string providerName = parent().getName();
90  // s.first->second.skill->manager = manager;
91  // s.first->second.skill->providerName = providerName;
92  // }
93  }
94 
98  {
99  return addSkillFactory<skills::LambdaSkill>(desc, f);
100  }
101 
103  SkillProviderComponentPlugin::getSkillFactory(const armarx::skills::SkillID& skillId)
104  {
105  // NON BLOCKING: WE ASSERT THAT THE LOCK IS ALREADY TAKEN
106  ARMARX_CHECK(skillId.isFullySpecified());
107 
108  if (skillFactories.count(skillId) == 0)
109  {
110  ARMARX_INFO << "Could not find a skill factory for id: " << skillId;
111  return nullptr;
112  }
113 
114  auto* facPtr = skillFactories.at(skillId).get();
115  return static_cast<skills::SkillBlueprint*>(facPtr);
116  }
117 
118  std::optional<skills::SkillStatusUpdate>
120  const skills::SkillExecutionID& execId) const
121  {
123 
124  const std::shared_lock l(skillExecutionsMutex);
125  if (skillExecutions.find(execId) == skillExecutions.end())
126  {
127  ARMARX_WARNING << "Skill execution for skill '" + execId.skillId.toString() +
128  "' not found!";
129  return std::nullopt;
130  }
131 
132  return skillExecutions.at(execId).statusUpdate;
133  }
134 
135  std::map<skills::SkillExecutionID, skills::SkillStatusUpdate>
137  {
138  std::map<skills::SkillExecutionID, skills::SkillStatusUpdate> skillUpdates;
139 
140  const std::shared_lock l(skillExecutionsMutex);
141  for (const auto& [key, impl] : skillExecutions)
142  {
143  const std::scoped_lock l2(impl.skillStatusesMutex);
144  skillUpdates.insert({key, impl.statusUpdate});
145  }
146  return skillUpdates;
147  }
148 
149  std::optional<skills::SkillDescription>
151  {
152  ARMARX_CHECK(skillId.isFullySpecified());
153 
154  const std::shared_lock l(skillFactoriesMutex);
155  if (skillFactories.find(skillId) == skillFactories.end())
156  {
157  std::stringstream ss;
158  ss << "Skill description for skill '" + skillId.toString() +
159  "' not found! Found instead: {"
160  << "\n";
161  for (const auto& [k, _] : skillFactories)
162  {
163  ss << "\t" << k.toString() << "\n";
164  }
165  ss << "}";
166  ARMARX_WARNING << ss.str();
167 
168  return std::nullopt;
169  }
170 
171  return skillFactories.at(skillId)->createSkillDescription(*skillId.providerId);
172  }
173 
174  std::map<skills::SkillID, skills::SkillDescription>
176  {
177  std::map<skills::SkillID, skills::SkillDescription> skillDesciptions;
178  const std::shared_lock l(skillFactoriesMutex);
179  for (const auto& [key, fac] : skillFactories)
180  {
181  ARMARX_CHECK(key.isFullySpecified());
182  skillDesciptions.insert({key, fac->createSkillDescription(*key.providerId)});
183  }
184  return skillDesciptions;
185  }
186 
189  const skills::SkillExecutionRequest& executionRequest)
190  {
191  ARMARX_CHECK(executionRequest.skillId.isFullySpecified());
192 
193  skills::SkillExecutionID executionId{.skillId = executionRequest.skillId,
194  .executorName = executionRequest.executorName,
195  .executionStartedTime =
197 
199  {executionId, executionRequest.parameters, executionRequest.callbackInterface}};
200 
202  {
203  auto l1 = std::unique_lock{skillFactoriesMutex};
204 
205  const auto& fac = getSkillFactory(executionId.skillId);
206  ARMARX_CHECK(fac) << "Could not find a factory for skill " << executionId.skillId;
207 
208  {
209  const std::unique_lock l2{skillExecutionsMutex};
210  auto it =
211  skillExecutions.emplace(std::piecewise_construct,
212  std::make_tuple(executionId),
213  std::make_tuple(fac,
214  executionId,
215  executionRequest.parameters,
216  executionRequest.callbackInterface));
217  wrapper = &it.first->second;
218  // ATTENTION NOT DEFINED BEHAVIOR
219  }
220 
221  // async start execution. But we wait for the execution to finish at the end of this method
222  wrapper->execution = std::thread(
223  [&]()
224  {
225  // execute waits until the previous execution finishes.
226  auto x = wrapper->executeSkill();
227  ret.result = x.result;
228  ret.status = armarx::skills::toSkillStatus(x.status);
229  });
230  } // release lock. We don't know how long the skill needs to finish and we have to release the lock for being able to abort the execution
231 
232  if (wrapper && wrapper->execution.joinable())
233  {
234  wrapper->execution.join();
235 
236  // tidy up map of executions
237  // const std::unique_lock l2{skillExecutionsMutex};
238  // if (auto it = skillExecutions.find(executionId); it != skillExecutions.end())
239  // {
240  // skillExecutions.erase(it);
241  // }
242  }
243  return ret;
244  }
245 
248  const skills::SkillExecutionRequest& executionRequest)
249  {
250  ARMARX_CHECK(executionRequest.skillId.isFullySpecified());
251 
252  skills::SkillExecutionID executionId{executionRequest.skillId,
253  executionRequest.executorName,
255 
257  {
258  auto l1 = std::unique_lock{skillFactoriesMutex};
259 
260  const auto& fac = getSkillFactory(executionId.skillId);
261  ARMARX_CHECK(fac) << "Could not find a factory for skill " << executionId.skillId;
262 
263  {
264  const std::unique_lock l2{skillExecutionsMutex};
265  auto it =
266  skillExecutions.emplace(std::piecewise_construct,
267  std::make_tuple(executionId),
268  std::make_tuple(fac,
269  executionId,
270  executionRequest.parameters,
271  executionRequest.callbackInterface));
272  wrapper = &it.first->second;
273  // ATTENTION NOT DEFINED BEHAVIOR
274  }
275 
276  wrapper->execution = std::thread(
277  [&]()
278  {
279  // execute waits until the previous execution finishes.
280  auto x = wrapper->executeSkill();
281  });
282  }
283 
284  // wait until skill is constructed. This assures, that a status update exists.
285  while (true)
286  {
287  {
288  std::scoped_lock l(wrapper->skillStatusesMutex);
289 
290  if (wrapper->statusUpdate.hasBeenConstructed())
291  {
292  break;
293  }
294  }
295 
296  std::this_thread::sleep_for(std::chrono::milliseconds(20));
297  }
298 
299  return executionId;
300  }
301 
302  bool
305  {
306  ARMARX_CHECK(executionId.skillId.isFullySpecified());
307 
308  std::shared_lock l{skillExecutionsMutex};
309  auto it = skillExecutions.find(executionId);
310  if (it == skillExecutions.end())
311  {
312  ARMARX_INFO << "No acive execution for skill '" + executionId.skillId.toString() +
313  "' found! Ignoring prepareSkill request.";
314  return false;
315  }
316 
317  std::scoped_lock l2{it->second.skillStatusesMutex};
318  if (it->second.statusUpdate.status != skills::SkillStatus::Preparing)
319  {
320  ARMARX_INFO << "Could not prepare the skill '" + executionId.skillId.toString() +
321  "' because its not in preparing phase.";
322  return false;
323  }
324 
325  it->second.updateSkillParameters(input);
326  return true;
327  }
328 
329  bool
331  {
332  ARMARX_CHECK(executionId.skillId.isFullySpecified());
333 
334  std::shared_lock l(skillExecutionsMutex);
335  auto it = skillExecutions.find(executionId);
336  if (it == skillExecutions.end())
337  {
338  ARMARX_INFO << "No acive execution for skill '" + executionId.skillId.toString() +
339  "' found! Ignoring abortSkill request.";
340  return false;
341  }
342 
343  auto& runtime = it->second;
344  runtime.stopSkill();
345 
346  while (true)
347  {
348  {
349  std::scoped_lock l(runtime.skillStatusesMutex);
350  auto status = runtime.statusUpdate;
351 
352  if (status.hasBeenTerminated())
353  {
354  break;
355  }
356  }
357  std::this_thread::sleep_for(std::chrono::milliseconds(20));
358  }
359 
360  return true;
361  }
362 
363  bool
365  {
366  ARMARX_CHECK(executionId.skillId.isFullySpecified());
367 
368  std::shared_lock l(skillExecutionsMutex);
369  auto it = skillExecutions.find(executionId);
370  if (it == skillExecutions.end())
371  {
372  ARMARX_INFO << "No acive execution for skill '" + executionId.skillId.toString() +
373  "' found! Ignoring abortSkill request.";
374  return false;
375  }
376 
377  it->second.stopSkill();
378  return true;
379  }
380 
381 } // namespace armarx::plugins
382 
383 namespace armarx
384 {
386  {
387  addPlugin(plugin);
388  }
389 
390  IceUtil::Optional<skills::provider::dto::SkillDescription>
392  const skills::provider::dto::SkillID& skillId,
393  const Ice::Current& /*unused*/)
394  {
396  auto o = plugin->getSkillDescription(id);
397  if (o.has_value())
398  {
399  return o->toProviderIce();
400  }
401  return {};
402  }
403 
404  skills::provider::dto::SkillDescriptionMap
406  {
407  skills::provider::dto::SkillDescriptionMap ret;
408  for (const auto& [k, v] : plugin->getSkillDescriptions())
409  {
410  ret.insert({k.toProviderIce(), v.toProviderIce()});
411  }
412  return ret;
413  }
414 
415  IceUtil::Optional<skills::provider::dto::SkillStatusUpdate>
417  const skills::provider::dto::SkillExecutionID& executionId,
418  const Ice::Current& /*unused*/)
419  {
420  auto execId = skills::SkillExecutionID::FromIce(
421  executionId, skills::ProviderID{.providerName = getName()});
422  auto o = plugin->getSkillExecutionStatus(execId);
423  if (o.has_value())
424  {
425  return o->toProviderIce();
426  }
427  return {};
428  }
429 
430  skills::provider::dto::SkillStatusUpdateMap
432  {
433  skills::provider::dto::SkillStatusUpdateMap ret;
434  for (const auto& [k, v] : plugin->getSkillExecutionStatuses())
435  {
436  ret.insert({k.toProviderIce(), v.toProviderIce()});
437  }
438  return ret;
439  }
440 
441  // Please not that this method waits until the skill can be scheduled!
442  skills::provider::dto::SkillStatusUpdate
444  const skills::provider::dto::SkillExecutionRequest& info,
445  const Ice::Current& /*unused*/)
446  {
449  auto up = this->plugin->executeSkill(exec);
450  return up.toProviderIce();
451  }
452 
453  skills::provider::dto::SkillExecutionID
455  const skills::provider::dto::SkillExecutionRequest& info,
456  const Ice::Current& current /*unused*/)
457  {
460  auto id = this->plugin->executeSkillAsync(exec);
461  return id.toProviderIce();
462  }
463 
464  skills::provider::dto::ParameterUpdateResult
466  const skills::provider::dto::SkillExecutionID& id,
468  const Ice::Current& current /*unused*/)
469  {
470  skills::provider::dto::ParameterUpdateResult res;
471 
472  auto exec =
475  res.success = this->plugin->updateSkillParameters(exec, prep);
476  return res;
477  }
478 
479  skills::provider::dto::AbortSkillResult
480  SkillProviderComponentPluginUser::abortSkill(const skills::provider::dto::SkillExecutionID& id,
481  const Ice::Current& /*unused*/)
482  {
483  skills::provider::dto::AbortSkillResult res;
484  auto exec =
486  res.success = this->plugin->abortSkill(exec);
487  return res;
488  }
489 
490  skills::provider::dto::AbortSkillResult
492  const skills::provider::dto::SkillExecutionID& id,
493  const Ice::Current& /*unused*/)
494  {
495  skills::provider::dto::AbortSkillResult res;
496  auto exec =
498  res.success = this->plugin->abortSkillAsync(exec);
499  return res;
500  }
501 
504  {
505  return plugin;
506  }
507 } // namespace armarx
armarx::skills::SkillExecutionID
Definition: SkillExecutionID.h:19
armarx::SkillProviderComponentPluginUser::getSkillProviderPlugin
const std::experimental::observer_ptr< plugins::SkillProviderComponentPlugin > & getSkillProviderPlugin() const
Definition: SkillProviderComponentPlugin.cpp:503
armarx::skills::SkillID::toString
std::string toString() const
Definition: SkillID.cpp:64
armarx::aron::ret
ReaderT::InputType T & ret
Definition: rw.h:21
armarx::plugins::SkillProviderComponentPlugin::preOnDisconnectComponent
void preOnDisconnectComponent() override
Definition: SkillProviderComponentPlugin.cpp:38
armarx::SkillProviderComponentPluginUser::getSkillDescriptions
skills::provider::dto::SkillDescriptionMap getSkillDescriptions(const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:405
armarx::skills::SkillExecutionRequest::skillId
skills::SkillID skillId
Definition: SkillExecutionRequest.h:33
armarx::SkillProviderComponentPluginUser::getSkillDescription
IceUtil::Optional< skills::provider::dto::SkillDescription > getSkillDescription(const skills::provider::dto::SkillID &skill, const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:391
armarx::ManagedIceObjectPlugin::prefix
const std::string & prefix() const
Definition: ManagedIceObjectPlugin.cpp:63
armarx::plugins::SkillProviderComponentPlugin::getSkillDescription
std::optional< skills::SkillDescription > getSkillDescription(const skills::SkillID &) const
Definition: SkillProviderComponentPlugin.cpp:150
armarx::skills::detail::SkillRuntime::statusUpdate
SkillStatusUpdate statusUpdate
Definition: SkillImplementationWrapper.h:31
armarx::plugins::SkillProviderComponentPlugin::executeSkill
skills::SkillStatusUpdate executeSkill(const skills::SkillExecutionRequest &executionInfo)
Definition: SkillProviderComponentPlugin.cpp:188
armarx::plugins::SkillProviderComponentPlugin::preOnConnectComponent
void preOnConnectComponent() override
Definition: SkillProviderComponentPlugin.cpp:16
armarx::plugins::SkillProviderComponentPlugin::addSkillFactory
void addSkillFactory(std::unique_ptr< skills::SkillBlueprint > &&)
Definition: SkillProviderComponentPlugin.cpp:59
SkillProviderComponentPlugin.h
armarx::skills::SkillDescription
Definition: SkillDescription.h:18
armarx::core::time::DateTime::Now
static DateTime Now()
Definition: DateTime.cpp:55
armarx::SkillProviderComponentPluginUser::updateSkillParameters
skills::provider::dto::ParameterUpdateResult updateSkillParameters(const skills::provider::dto::SkillExecutionID &executionId, const armarx::aron::data::dto::DictPtr &parameters, const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:465
armarx::skills::SkillID::isSkillSpecified
bool isSkillSpecified() const
Definition: SkillID.h:35
armarx::skills::detail::SkillRuntime::skillStatusesMutex
std::mutex skillStatusesMutex
Definition: SkillImplementationWrapper.h:30
armarx::skills::SkillExecutionRequest::FromIce
static SkillExecutionRequest FromIce(const manager::dto::SkillExecutionRequest &)
Definition: SkillExecutionRequest.cpp:29
armarx::skills::ProviderID::providerName
std::string providerName
Definition: ProviderID.h:31
armarx::skills::SkillID::providerId
std::optional< ProviderID > providerId
Definition: SkillID.h:59
armarx::skills::LambdaSkill::FunctionType
std::function< TerminatedSkillStatus()> FunctionType
Definition: LambdaSkill.h:12
armarx::ManagedIceObject::addPlugin
PluginT * addPlugin(const std::string prefix="", ParamsT &&...params)
Definition: ManagedIceObject.h:182
armarx::SkillProviderComponentPluginUser::abortSkillAsync
skills::provider::dto::AbortSkillResult abortSkillAsync(const skills::provider::dto::SkillExecutionID &skill, const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:491
armarx::SkillProviderComponentPluginUser::executeSkillAsync
skills::provider::dto::SkillExecutionID executeSkillAsync(const skills::provider::dto::SkillExecutionRequest &executionInfo, const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:454
std::experimental::fundamentals_v2::observer_ptr
Definition: ManagedIceObject.h:53
armarx::aron::data::Dict::FromAronDictDTO
static PointerType FromAronDictDTO(const data::dto::DictPtr &aron)
Definition: Dict.cpp:129
armarx::plugins::SkillProviderComponentPlugin::abortSkillAsync
bool abortSkillAsync(const skills::SkillExecutionID &execId)
Definition: SkillProviderComponentPlugin.cpp:364
ARMARX_CHECK
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
Definition: ExpressionException.h:82
armarx::plugins::SkillProviderComponentPlugin::getSkillExecutionStatus
std::optional< skills::SkillStatusUpdate > getSkillExecutionStatus(const skills::SkillExecutionID &) const
Definition: SkillProviderComponentPlugin.cpp:119
armarx::skills::detail::SkillRuntime::execution
std::thread execution
Definition: SkillImplementationWrapper.h:34
armarx::skills::SkillExecutionRequest
Definition: SkillExecutionRequest.h:21
armarx::skills::detail::SkillRuntime::executeSkill
TerminatedSkillStatusUpdate executeSkill()
Definition: SkillImplementationWrapper.cpp:46
armarx::status
status
Definition: FiniteStateMachine.h:259
armarx::plugins::SkillProviderComponentPlugin::abortSkill
bool abortSkill(const skills::SkillExecutionID &execId)
Definition: SkillProviderComponentPlugin.cpp:330
armarx::plugins::SkillProviderComponentPlugin::updateSkillParameters
bool updateSkillParameters(const skills::SkillExecutionID &id, const armarx::aron::data::DictPtr &params)
Definition: SkillProviderComponentPlugin.cpp:303
armarx::skills::SkillStatusUpdate
Definition: SkillStatusUpdate.h:139
armarx::skills::ProviderID
Definition: ProviderID.h:15
armarx::plugins
This file is part of ArmarX.
Definition: DebugObserverComponentPlugin.cpp:28
armarx::skills::SkillExecutionRequest::callbackInterface
callback::dti::SkillProviderCallbackInterfacePrx callbackInterface
Definition: SkillExecutionRequest.h:36
armarx::aron::input
ReaderT::InputType & input
Definition: rw.h:19
armarx::plugins::SkillProviderComponentPlugin::postOnConnectComponent
void postOnConnectComponent() override
Definition: SkillProviderComponentPlugin.cpp:23
armarx::skills::SkillStatus::Preparing
@ Preparing
armarx::SkillProviderComponentPluginUser::abortSkill
skills::provider::dto::AbortSkillResult abortSkill(const skills::provider::dto::SkillExecutionID &skill, const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:480
armarx::SkillProviderComponentPluginUser::executeSkill
skills::provider::dto::SkillStatusUpdate executeSkill(const skills::provider::dto::SkillExecutionRequest &executionInfo, const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:443
armarx::plugins::SkillProviderComponentPlugin::getSkillDescriptions
std::map< skills::SkillID, skills::SkillDescription > getSkillDescriptions() const
Definition: SkillProviderComponentPlugin.cpp:175
armarx::SkillProviderComponentPluginUser::getSkillExecutionStatus
IceUtil::Optional< skills::provider::dto::SkillStatusUpdate > getSkillExecutionStatus(const skills::provider::dto::SkillExecutionID &executionId, const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:416
armarx::skills::SkillID::FromIce
static SkillID FromIce(const manager::dto::SkillID &)
Definition: SkillID.cpp:32
armarx::skills::SkillStatusUpdate::hasBeenConstructed
bool hasBeenConstructed() const
Definition: SkillStatusUpdate.h:180
Component.h
armarx::skills::detail::SkillRuntime
Definition: SkillImplementationWrapper.h:19
armarx::aron::data::DictPtr
std::shared_ptr< Dict > DictPtr
Definition: Dict.h:41
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
armarx::skills::SkillBlueprint
Definition: SkillFactory.h:11
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:174
ProviderInfo.h
IceUtil::Handle< class PropertyDefinitionContainer >
armarx::skills::SkillExecutionID::skillId
SkillID skillId
Definition: SkillExecutionID.h:21
armarx::skills::SkillExecutionID::FromIce
static SkillExecutionID FromIce(const skills::manager::dto::SkillExecutionID &)
Definition: SkillExecutionID.cpp:29
armarx::plugins::SkillProviderComponentPlugin::executeSkillAsync
skills::SkillExecutionID executeSkillAsync(const skills::SkillExecutionRequest &executionInfo)
Definition: SkillProviderComponentPlugin.cpp:247
armarx::plugins::SkillProviderComponentPlugin::postCreatePropertyDefinitions
void postCreatePropertyDefinitions(PropertyDefinitionsPtr &properties) override
Definition: SkillProviderComponentPlugin.cpp:48
armarx::skills::SkillExecutionRequest::parameters
armarx::aron::data::DictPtr parameters
Definition: SkillExecutionRequest.h:35
armarx::skills::SkillExecutionRequest::executorName
std::string executorName
Definition: SkillExecutionRequest.h:34
armarx::ManagedIceObject::getName
std::string getName() const
Retrieve name of object.
Definition: ManagedIceObject.cpp:107
armarx::plugins::SkillProviderComponentPlugin::getSkillExecutionStatuses
std::map< skills::SkillExecutionID, skills::SkillStatusUpdate > getSkillExecutionStatuses() const
Definition: SkillProviderComponentPlugin.cpp:136
armarx::skills::ProviderInfo
Definition: ProviderInfo.h:19
armarx::skills::toSkillStatus
SkillStatus toSkillStatus(const ActiveOrTerminatedSkillStatus &d)
Definition: SkillStatusUpdate.cpp:8
armarx::plugins::SkillProviderComponentPlugin::preOnInitComponent
void preOnInitComponent() override
Definition: SkillProviderComponentPlugin.cpp:11
ARMARX_WARNING
#define ARMARX_WARNING
Definition: Logging.h:186
armarx::skills::SkillID
Definition: SkillID.h:17
armarx::SkillProviderComponentPluginUser::getSkillExecutionStatuses
skills::provider::dto::SkillStatusUpdateMap getSkillExecutionStatuses(const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:431
armarx::skills::SkillID::isFullySpecified
bool isFullySpecified() const
Definition: SkillID.h:29
armarx::skills::ProviderInfo::providerId
ProviderID providerId
Definition: ProviderInfo.h:22
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
armarx::SkillProviderComponentPluginUser::SkillProviderComponentPluginUser
SkillProviderComponentPluginUser()
Definition: SkillProviderComponentPlugin.cpp:385
All.h