diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp index f48165ab95c12f4f16dfd68c35212893e24373a6..846c34ae54888288d0f635b03e47da5b2399d8e7 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp @@ -187,8 +187,8 @@ namespace armarx widget.treeWidgetSkills->clear(); widget.treeWidgetSkillDetails->clear(); skillsArgumentsTreeWidgetItem = nullptr; - selectedSkill.skillId.providerId->providerName = skills::SkillID::UNKNOWN; - selectedSkill.skillId.skillName = skills::SkillID::UNKNOWN; + selectedSkill.skillId.providerId->providerName = ""; + selectedSkill.skillId.skillName = ""; } void @@ -233,7 +233,7 @@ namespace armarx auto skillId = skills::SkillID::FromIce(sid); auto providerId = skills::ProviderID(skillId); - ARMARX_CHECK(skillId.fullySpecified()); + ARMARX_CHECK(skillId.isFullySpecified()); auto& providedSkillsMap = skills[providerId]; // create new if not existent providedSkillsMap.insert({skillId, description}); @@ -432,7 +432,7 @@ namespace armarx void SkillManagerMonitorWidgetController::executeSkill() { - if (not selectedSkill.skillId.fullySpecified()) + if (not selectedSkill.skillId.isFullySpecified()) { return; } @@ -456,7 +456,7 @@ namespace armarx ")", data); - ARMARX_CHECK(selectedSkill.skillId.fullySpecified()); // sanity check + ARMARX_CHECK(selectedSkill.skillId.isFullySpecified()); // sanity check ARMARX_IMPORTANT << "Executing skill from GUI: " << selectedSkill.skillId << "."; // Note that we execute the skill in a seperate thread so that the GUI thread does not freeze. memory->begin_executeSkill(req.toManagerIce()); @@ -466,7 +466,7 @@ namespace armarx SkillManagerMonitorWidgetController::stopSkill() { // std::scoped_lock l(updateMutex); - // if (selectedSkill.skillId.fullySpecified()) + // if (selectedSkill.skillId.isFullySpecified()) // { // return; // } diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h index 869e7921366da0290f741037f4aab9cf3ef3a08f..665982d64def770a002ecb73d912d2e7df39550e 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h @@ -154,7 +154,7 @@ namespace armarx skills::SkillID skillId; // make default constructable - SelectedSkill() : skillId({skills::SkillID::UNKNOWN}, skills::SkillID::UNKNOWN) + SelectedSkill() : skillId({""}, "") { } } selectedSkill; diff --git a/source/RobotAPI/interface/skills/SkillManagerInterface.ice b/source/RobotAPI/interface/skills/SkillManagerInterface.ice index b2c3b5deba9aa8239023d4559b6d20405e5b0889..b4bb67e6c910aaab5f56340dee310c4d0f55dc4d 100644 --- a/source/RobotAPI/interface/skills/SkillManagerInterface.ice +++ b/source/RobotAPI/interface/skills/SkillManagerInterface.ice @@ -92,6 +92,7 @@ module armarx module dti { + /// @todo Rename in the same manner as provider interface. interface SkillManagerInterface extends callback::dti::SkillProviderCallbackInterface { diff --git a/source/RobotAPI/interface/skills/SkillProviderInterface.ice b/source/RobotAPI/interface/skills/SkillProviderInterface.ice index 80a8a97fbdb9f6eff8f19cfaf1384338748c6232..5a256544c075e41deaccc0b0732112178548eccd 100644 --- a/source/RobotAPI/interface/skills/SkillProviderInterface.ice +++ b/source/RobotAPI/interface/skills/SkillProviderInterface.ice @@ -58,9 +58,6 @@ module armarx { module dto { - - sequence<string> StringList; - // The status enum of a skill module Execution { @@ -123,8 +120,8 @@ module armarx SkillID skillId; string description; armarx::core::time::dto::Duration timeout; - aron::type::dto::AronObject acceptedType; - aron::type::dto::AronObject returnType; + aron::type::dto::AronObject acceptedType; /// @todo Rename to "parametersType" + aron::type::dto::AronObject returnType; /// @todo Rename to "resultType" aron::data::dto::Dict rootProfileDefaults; }; @@ -135,7 +132,7 @@ module armarx { SkillID skillId; string executorName; - aron::data::dto::Dict params; + aron::data::dto::Dict params; /// @todo Rename to "parameters" callback::dti::SkillProviderCallbackInterface* callbackInterface; }; @@ -152,10 +149,13 @@ module armarx struct SkillStatusUpdate { SkillExecutionID executionId; - aron::data::dto::Dict usedParams; - callback::dti::SkillProviderCallbackInterface* usedCallbackInterface; + aron::data::dto::Dict usedParams; /// @todo Rename to "parameters" + callback::dti::SkillProviderCallbackInterface* + usedCallbackInterface; /// @todo Rename to "callbackInterface" core::dto::Execution::Status status; - aron::data::dto::Dict data; + aron::data::dto::Dict data; /// @todo Rename to "result" + /// @todo maybe add in future: + // aron::data::dto::Dict feedback; }; dictionary<SkillExecutionID, SkillStatusUpdate> SkillStatusUpdateMap; @@ -183,9 +183,11 @@ module armarx dto::SkillExecutionID executeSkillAsync(dto::SkillExecutionRequest executionInfo); + /// @todo: Rename to "updateSkillParameters". void addSkillParameters(dto::SkillExecutionID executionId, aron::data::dto::Dict params); // add params to a skill + /// @todo Rename to "abortSkillAsync" and add "abortSkill as blocking variant. // try to kill a skill as soon as possible. When the skill is stopped depends on the implementation. void abortSkill(dto::SkillExecutionID skill); }; diff --git a/source/RobotAPI/libraries/armem_skills/aron_conversions.cpp b/source/RobotAPI/libraries/armem_skills/aron_conversions.cpp index 4bb6f1f5128de5c8afd422114e92530ddba8bce2..44021a2acbb863d51e7f98d1fb0522c8c031b47f 100644 --- a/source/RobotAPI/libraries/armem_skills/aron_conversions.cpp +++ b/source/RobotAPI/libraries/armem_skills/aron_conversions.cpp @@ -133,7 +133,7 @@ namespace armarx::armem fromAron(const armarx::skills::arondto::SkillID& dto, skills::SkillID& bo) { bo.skillName = dto.skillName; - bo.providerId = skills::ProviderID(skills::SkillID::UNKNOWN); + bo.providerId = skills::ProviderID(""); fromAron(dto.providerId, *bo.providerId); } diff --git a/source/RobotAPI/libraries/skills/core/SkillID.cpp b/source/RobotAPI/libraries/skills/core/SkillID.cpp index 9bb0b36a881642fbbdb7c21841dc5597e050fe7b..3213183d0a9e267979574df0d50ebb99a2a89a97 100644 --- a/source/RobotAPI/libraries/skills/core/SkillID.cpp +++ b/source/RobotAPI/libraries/skills/core/SkillID.cpp @@ -12,7 +12,7 @@ namespace armarx SkillID::SkillID(const ProviderID& providerId, const std::string& skillName) : providerId(providerId), skillName(skillName) { - if (simox::alg::contains(providerId.providerName, NAME_SEPARATOR) || + if (simox::alg::contains(providerId.providerName, NAME_SEPARATOR) or simox::alg::contains(skillName, NAME_SEPARATOR)) { throw error::SkillException( @@ -20,15 +20,6 @@ namespace armarx std::string("A skill provider or a skill contains the blacklisted token '") + NAME_SEPARATOR + "'."); } - - if (simox::alg::contains(providerId.providerName, PREFIX_SEPARATOR) || - simox::alg::contains(skillName, PREFIX_SEPARATOR)) - { - throw error::SkillException( - __PRETTY_FUNCTION__, - std::string("A skill provider or a skill contains the blacklisted token '") + - PREFIX_SEPARATOR + "'."); - } } bool @@ -69,7 +60,7 @@ namespace armarx manager::dto::SkillID SkillID::toManagerIce() const { - ARMARX_CHECK(fullySpecified()); + ARMARX_CHECK(isFullySpecified()); return {providerId->toManagerIce(), skillName}; } @@ -80,15 +71,13 @@ namespace armarx } std::string - SkillID::toString(const std::string& prefix) const + SkillID::toString() const { if (providerId.has_value()) { - return (prefix.empty() ? std::string("") : (prefix + PREFIX_SEPARATOR)) + - providerId->providerName + NAME_SEPARATOR + skillName; + return providerId->providerName + NAME_SEPARATOR + skillName; } - return (prefix.empty() ? std::string("") : (prefix + PREFIX_SEPARATOR)) + UNKNOWN + - NAME_SEPARATOR + skillName; + return NAME_SEPARATOR + skillName; } } // namespace skills diff --git a/source/RobotAPI/libraries/skills/core/SkillID.h b/source/RobotAPI/libraries/skills/core/SkillID.h index 39561595db477c926f809bc5a51644510f8da484..38af6a6d277ebf8e04400af7f9d0a15869c55b86 100644 --- a/source/RobotAPI/libraries/skills/core/SkillID.h +++ b/source/RobotAPI/libraries/skills/core/SkillID.h @@ -17,12 +17,7 @@ namespace armarx class SkillID { public: - static const constexpr char* PREFIX_SEPARATOR = "->"; static const constexpr char* NAME_SEPARATOR = "/"; - static const constexpr char* UNKNOWN = "UNKNOWN"; - - std::optional<ProviderID> providerId; - std::string skillName; SkillID() = delete; SkillID(const std::string& skillName); @@ -33,25 +28,25 @@ namespace armarx bool operator<(const SkillID& other) const; bool - fullySpecified() const + isFullySpecified() const { - return skillSpecified() && providerSpecified(); + return isSkillSpecified() and isProviderSpecified(); } bool - skillSpecified() const + isSkillSpecified() const { - return skillName != UNKNOWN; + return not skillName.empty(); } bool - providerSpecified() const + isProviderSpecified() const { if (not providerId.has_value()) { return false; } - return providerId->providerName != UNKNOWN; + return not providerId->providerName.empty(); } manager::dto::SkillID toManagerIce() const; @@ -61,7 +56,10 @@ namespace armarx static SkillID FromIce(const provider::dto::SkillID&, const std::optional<ProviderID>& providerId = std::nullopt); - std::string toString(const std::string& prefix = "") const; + std::string toString() const; + + std::optional<ProviderID> providerId; + std::string skillName; }; std::ostream& operator<<(std::ostream& os, const SkillID& id); diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp index 51694c8d9f2ff130f0684a0c0dda268e40c09979..a6f2d60d35123927b953d941d9a9961d60706525 100644 --- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp +++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp @@ -85,7 +85,7 @@ namespace armarx::plugins skills::SkillStatusUpdate SkillManagerComponentPlugin::executeSkill(const skills::SkillExecutionRequest& executionRequest) { - ARMARX_CHECK(executionRequest.skillId.fullySpecified()); + ARMARX_CHECK(executionRequest.skillId.isFullySpecified()); std::unique_lock l(skillProviderMapMutex); @@ -158,7 +158,7 @@ namespace armarx::plugins SkillManagerComponentPlugin::executeSkillAsync( const skills::SkillExecutionRequest& executionRequest) { - ARMARX_CHECK(executionRequest.skillId.fullySpecified()); + ARMARX_CHECK(executionRequest.skillId.isFullySpecified()); std::unique_lock l(skillProviderMapMutex); @@ -232,7 +232,7 @@ namespace armarx::plugins SkillManagerComponentPlugin::addSkillParameters(const skills::SkillExecutionID& executionId, const aron::data::DictPtr& data) { - ARMARX_CHECK(executionId.skillId.fullySpecified()); + ARMARX_CHECK(executionId.skillId.isFullySpecified()); std::unique_lock l(skillProviderMapMutex); if (auto it = skillProviderMap.find(*executionId.skillId.providerId); @@ -268,7 +268,7 @@ namespace armarx::plugins void SkillManagerComponentPlugin::abortSkill(const skills::SkillExecutionID& executionId) { - ARMARX_CHECK(executionId.skillId.fullySpecified()); + ARMARX_CHECK(executionId.skillId.isFullySpecified()); std::unique_lock l(skillProviderMapMutex); if (auto it = skillProviderMap.find(*executionId.skillId.providerId); @@ -303,7 +303,7 @@ namespace armarx::plugins std::optional<skills::SkillDescription> SkillManagerComponentPlugin::getSkillDescription(const skills::SkillID& skillId) { - ARMARX_CHECK(skillId.fullySpecified()); + ARMARX_CHECK(skillId.isFullySpecified()); std::unique_lock l(skillProviderMapMutex); if (auto it = skillProviderMap.find(*skillId.providerId); it != skillProviderMap.end()) @@ -406,7 +406,7 @@ namespace armarx::plugins SkillManagerComponentPlugin::getSkillExecutionStatus( const skills::SkillExecutionID& executionId) { - ARMARX_CHECK(executionId.skillId.fullySpecified()); + ARMARX_CHECK(executionId.skillId.isFullySpecified()); std::unique_lock l(skillProviderMapMutex); if (auto it = skillProviderMap.find(*executionId.skillId.providerId); diff --git a/source/RobotAPI/libraries/skills/provider/SkillFactory.h b/source/RobotAPI/libraries/skills/provider/SkillFactory.h index ea4cd5edbff7130b560e7725fc57cda70841612d..63996a968a229ba218968be82d00bc068beab481 100644 --- a/source/RobotAPI/libraries/skills/provider/SkillFactory.h +++ b/source/RobotAPI/libraries/skills/provider/SkillFactory.h @@ -8,6 +8,7 @@ namespace armarx { namespace skills { + /// @todo Rename to SkillBlueprint. class SkillFactory { public: @@ -18,11 +19,9 @@ namespace armarx } template <class _Skill, class... Args> - requires isSkill<_Skill> - + requires isSkill<_Skill> static std::unique_ptr<SkillFactory> ForSkill(Args&&... args) - { // capture params in new lambda // (https://stackoverflow.com/questions/47496358/c-lambdas-how-to-capture-variadic-parameter-pack-from-the-upper-scope) diff --git a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.cpp b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.cpp index d24535a2241afc4493ab354968313151217e5105..0b4aa3eeaf0524ce5337e78e99eb438142920fc5 100644 --- a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.cpp +++ b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.cpp @@ -101,7 +101,7 @@ namespace armarx::plugins SkillProviderComponentPlugin::getSkillFactory(const armarx::skills::SkillID& skillId) { // NON BLOCKING: WE ASSERT THAT THE LOCK IS ALREADY TAKEN - ARMARX_CHECK(skillId.fullySpecified()); + ARMARX_CHECK(skillId.isFullySpecified()); if (skillFactories.count(skillId) == 0) { @@ -117,7 +117,7 @@ namespace armarx::plugins SkillProviderComponentPlugin::getSkillExecutionStatus( const skills::SkillExecutionID& execId) const { - ARMARX_CHECK(execId.skillId.skillSpecified()); + ARMARX_CHECK(execId.skillId.isSkillSpecified()); const std::unique_lock l(skillExecutionsMutex); if (skillExecutions.find(execId) != skillExecutions.end()) @@ -147,7 +147,7 @@ namespace armarx::plugins std::optional<skills::SkillDescription> SkillProviderComponentPlugin::getSkillDescription(const skills::SkillID& skillId) const { - ARMARX_CHECK(skillId.fullySpecified()); + ARMARX_CHECK(skillId.isFullySpecified()); const std::unique_lock l(skillFactoriesMutex); if (skillFactories.find(skillId) != skillFactories.end()) @@ -166,7 +166,7 @@ namespace armarx::plugins const std::unique_lock l(skillFactoriesMutex); for (const auto& [key, fac] : skillFactories) { - ARMARX_CHECK(key.fullySpecified()); + ARMARX_CHECK(key.isFullySpecified()); skillDesciptions.insert({key, fac->createSkillDescription(*key.providerId)}); } return skillDesciptions; @@ -176,7 +176,7 @@ namespace armarx::plugins SkillProviderComponentPlugin::executeSkill( const skills::SkillExecutionRequest& executionRequest) { - ARMARX_CHECK(executionRequest.skillId.fullySpecified()); + ARMARX_CHECK(executionRequest.skillId.isFullySpecified()); // The skill will be executed in a seperate thread std::thread execution; @@ -244,7 +244,7 @@ namespace armarx::plugins SkillProviderComponentPlugin::executeSkillAsync( const skills::SkillExecutionRequest& executionRequest) { - ARMARX_CHECK(executionRequest.skillId.fullySpecified()); + ARMARX_CHECK(executionRequest.skillId.isFullySpecified()); // The skill will be executed in a seperate thread std::thread execution; @@ -299,7 +299,7 @@ namespace armarx::plugins SkillProviderComponentPlugin::addSkillParameters(const skills::SkillExecutionID& executionId, const armarx::aron::data::DictPtr& input) { - ARMARX_CHECK(executionId.skillId.fullySpecified()); + ARMARX_CHECK(executionId.skillId.isFullySpecified()); const std::scoped_lock l{skillExecutionsMutex}; auto it = skillExecutions.find(executionId); @@ -324,7 +324,7 @@ namespace armarx::plugins void SkillProviderComponentPlugin::abortSkill(const skills::SkillExecutionID& executionId) { - ARMARX_CHECK(executionId.skillId.fullySpecified()); + ARMARX_CHECK(executionId.skillId.isFullySpecified()); const std::unique_lock l(skillExecutionsMutex); auto it = skillExecutions.find(executionId); diff --git a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h index e03d73e26da0ae1fbec86daeca5bd8f1021f5a9f..9e64ea6925344a5adfea525eea8a7dd11c7d17cc 100644 --- a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h +++ b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h @@ -56,7 +56,8 @@ namespace armarx::plugins template <class _Skill, typename... Args> - requires skills::isSkill<_Skill> skills::SkillFactory* + requires skills::isSkill<_Skill> + skills::SkillFactory* addSkillFactory(Args&&... args) { auto fac = skills::SkillFactory::ForSkill<_Skill>(std::forward<Args>(args)...); @@ -67,7 +68,8 @@ namespace armarx::plugins template <typename _FactoryT, typename... Args> - requires skills::isSkillFactory<_FactoryT> _FactoryT* + requires skills::isSkillFactory<_FactoryT> + _FactoryT* addCustomSkillFactory(Args&&... args) { auto fac = std::make_unique<_FactoryT>(std::forward<Args>(args)...); @@ -160,9 +162,10 @@ namespace armarx // ----------------------------------------------------------------------------------------- // LEGACY, TODO: NEEDS TESTING // ----------------------------------------------------------------------------------------- - template <class _Skill> + template <class _Skill> /// @todo rename to SkillT or so, _[A-Z] is compiler reserved - requires skills::isSkill<_Skill> skills::SkillFactory* + requires skills::isSkill<_Skill> + skills::SkillFactory* addSkill(std::unique_ptr<_Skill>&& s) { return addSkillFactory<_Skill>(); @@ -170,7 +173,8 @@ namespace armarx template <class _Skill, typename... Args> - requires skills::isSkill<_Skill> skills::SkillFactory* + requires skills::isSkill<_Skill> + skills::SkillFactory* addSkill(Args&&... args) { return addSkillFactory<_Skill>(std::forward<Args>(args)...); @@ -188,15 +192,17 @@ namespace armarx template <class _Skill, typename... Args> - requires skills::isSkill<_Skill> skills::SkillFactory* + requires skills::isSkill<_Skill> + skills::SkillFactory* addSkillFactory(Args&&... args) { return plugin->addSkillFactory<_Skill>(std::forward<Args>(args)...); } - template <typename _Fac, typename... Args> + template <typename _Fac, typename... Args> /// @todo "_Fac" is compiler reserved identifier - requires skills::isSkillFactory<_Fac> _Fac* + requires skills::isSkillFactory<_Fac> + _Fac* addCustomSkillFactory(Args&&... args) { return plugin->addSkillFactory<_Fac>(std::forward<Args>(args)...); diff --git a/source/RobotAPI/libraries/skills/provider/SkillProxy.cpp b/source/RobotAPI/libraries/skills/provider/SkillProxy.cpp index 3a969b2819eb8ec9fd2328dfe069ede85fa480f0..98276c4fb166ad2f538e06e21e1de77045467bb6 100644 --- a/source/RobotAPI/libraries/skills/provider/SkillProxy.cpp +++ b/source/RobotAPI/libraries/skills/provider/SkillProxy.cpp @@ -16,7 +16,7 @@ namespace armarx const SkillDescription& skillDesc) : manager(manager), skillDescription(skillDesc) { - ARMARX_CHECK(skillDesc.skillId.fullySpecified()); + ARMARX_CHECK(skillDesc.skillId.isFullySpecified()); } TerminatedSkillStatusUpdate diff --git a/source/RobotAPI/libraries/skills/provider/detail/SkillImplementationWrapper.cpp b/source/RobotAPI/libraries/skills/provider/detail/SkillImplementationWrapper.cpp index 41679d93a07ea883f9cf199431d83c217b33a3b6..87c446721e7612cd8cfe1027b3ff862504240ddf 100644 --- a/source/RobotAPI/libraries/skills/provider/detail/SkillImplementationWrapper.cpp +++ b/source/RobotAPI/libraries/skills/provider/detail/SkillImplementationWrapper.cpp @@ -56,7 +56,7 @@ namespace armarx // setup basic vars and lambdas // ------------------------------------------------------------------------------------- // actually we should lock... however this is only read access and the members are const throughout the execution... - ARMARX_CHECK(statusUpdate.executionId.skillId.fullySpecified()); + ARMARX_CHECK(statusUpdate.executionId.skillId.isFullySpecified()); const auto& initial_aron_params = statusUpdate.usedParameterization.parameterization; const auto& callback_interface = statusUpdate.usedParameterization.callbackInterface; @@ -116,10 +116,10 @@ namespace armarx // ------------------------------------------------------------------------------------- updateStatus(SkillStatus::Constructing); this->skill = this->factory.createSkill(providerId); - this->skill->executorName = (executorName); + this->skill->executorName = executorName; this->skill->manager = skills::manager::dti::SkillManagerInterfacePrx::checkedCast( callback_interface); // ugly. Get managerPrx from manager! - ; + this->skill->callback = [&](const SkillStatus s, const armarx::aron::data::DictPtr& d) { updateStatus(s, d); }; @@ -163,9 +163,10 @@ namespace armarx // ------------------------------------------------------------------------------------- // Init skill // ------------------------------------------------------------------------------------- + updateStatus(SkillStatus::Initializing); + try { - updateStatus(SkillStatus::Initializing); Skill::InitResult initRet = skill->initSkill(); if (initRet.status != TerminatedSkillStatus::Succeeded) { @@ -174,7 +175,6 @@ namespace armarx return exitAndMakeTerminationResult(message); } } - catch (const std::exception& ex) { std::string message = @@ -187,9 +187,10 @@ namespace armarx // ------------------------------------------------------------------------------------- // Prepare skill // ------------------------------------------------------------------------------------- + updateStatus(SkillStatus::Preparing); + try { - updateStatus(SkillStatus::Preparing); auto prepareRet = skill->prepareSkill(); while (prepareRet.status == ActiveOrTerminatedSkillStatus::Running) { @@ -197,8 +198,8 @@ namespace armarx << skillName << " fulfilled. Waiting..."; // wait... - prepareRet = skill->prepareSkill(); std::this_thread::sleep_for(std::chrono::milliseconds(50)); + prepareRet = skill->prepareSkill(); } if (prepareRet.status != ActiveOrTerminatedSkillStatus::Succeeded) @@ -208,7 +209,6 @@ namespace armarx return exitAndMakeTerminationResult(message); } } - catch (const std::exception& ex) { std::string message = "SkillError 201e: An error occured during waiting for skill " diff --git a/source/RobotAPI/libraries/skills/provider/detail/SkillImplementationWrapper.h b/source/RobotAPI/libraries/skills/provider/detail/SkillImplementationWrapper.h index 45108724d3ce8ec2bf1e9e1559ebb9be5142fdb6..433777e4e81ab8b3a817a8942db4f926023d4593 100644 --- a/source/RobotAPI/libraries/skills/provider/detail/SkillImplementationWrapper.h +++ b/source/RobotAPI/libraries/skills/provider/detail/SkillImplementationWrapper.h @@ -15,6 +15,7 @@ namespace armarx { namespace detail { + /// @todo SkillRuntime class SkillImplementationWrapper { private: