19#include <RobotAPI/interface/skills/SkillManagerInterface.h>
42 using SkillProxyPtr = std::unique_ptr<class SkillProxy>;
134 const std::string& abortedMessage =
"")
const;
150 void _onTimeoutReached();
151 void _onStopRequested();
153 std::optional<TerminatedSkillStatusUpdate>
154 executeSkill(const ::armarx::skills::SkillID& skillID,
156 parametersFunction)
override;
180 std::function<
void()>&& cb);
215 std::optional<TerminatedSkillStatusUpdate>
228 template <
class ParameterT>
229 std::optional<TerminatedSkillStatusUpdate>
249 std::optional<TerminatedSkillStatusUpdate>
269 template <
class ParameterT>
270 std::optional<TerminatedSkillStatusUpdate>
272 std::function<
void(ParameterT&
parameters)> parametersFunction)
274 SkillProxyPtr proxy = std::make_unique<SkillProxy>(
manager, skillId);
277 if (
auto parametersAron = proxy->getRootProfileParameters())
279 parameters = ParameterT::FromAron(parametersAron);
288 template <
class ParameterT>
291 std::function<
void(ParameterT&
parameters)> parametersFunction)
293 SkillProxyPtr proxy = std::make_unique<SkillProxy>(
manager, skillId);
328 std::optional<TerminatedSkillStatusUpdate>
338 template <
class ParameterT>
341 std::function<
void(ParameterT&
parameters)> parametersFunction)
344 if (
auto parametersAron = proxy->getRootProfileParameters())
346 parameters = ParameterT::FromAron(parametersAron);
363 manager::dti::SkillManagerInterfacePrx
manager =
nullptr;
391 mutable std::mutex conditionCallbacksMutex;
392 std::vector<std::pair<std::function<bool()>, std::function<void()>>>
393 conditionCallbacks = {};
395 std::thread conditionCheckingThread;
398 mutable std::mutex subskillsMutex;
399 std::vector<skills::SkillExecutionID> subskills;
415 [[deprecated(
"callSubskill(proxy) should be replaced by callSubskill(skillId)")]] std::
416 optional<TerminatedSkillStatusUpdate>
433 "callSubskill(proxy, parameters) should be replaced by "
434 "callSubskill(skillId, parameters)")]] std::optional<TerminatedSkillStatusUpdate>
441 template <
class ParameterT>
442 [[deprecated(
"callSubskillAsync(proxy, parametersFunction) should be replaced by "
445 std::function<
void(ParameterT&
parameters)> parametersFunction)
450 parameters = ParameterT::FromAron(parametersAron);
458 [[deprecated(
"callSubskillAsync(proxy, parameters) should be replaced by "
468 concept isSkill = std::is_base_of<Skill, T>::value;
static Duration MilliSeconds(std::int64_t milliSeconds)
Constructs a duration in milliseconds.
static Frequency Hertz(std::int64_t hertz)
Base Class for all Logging classes.
Represents a point in time.
static DateTime Invalid()
SkillID getSkillId() const
get the skill id from the skill description
aron::data::DictPtr getRootProfileParameters() const
get the default parameters of the skill. TODO: Skill profiles in memory!
virtual PrepareResult prepare()
Override this method with the actual implementation.
void installConditionWithCallback(std::function< bool()> &&f, std::function< void()> &&cb)
install a condition which is frequently checked from the conditionCheckingThread
std::optional< TerminatedSkillStatusUpdate > callSubskill(const SkillID &skillId, const ParameterT ¶meters)
Call a subskill with the given ID and parameters.
armarx::core::time::DateTime started
void notifyTimeoutReached()
SkillExecutionHandlePtr callSubskillAsync(const skills::SkillProxy &proxy, const aron::data::DictPtr ¶meters)
armarx::core::time::DateTime exited
std::optional< TerminatedSkillStatusUpdate > callSubskill(const SkillID &skillId)
Call a subskill with the given ID and its default parameters.
std::atomic_bool finished
static MainResult MakeSucceededResult(aron::data::DictPtr data=nullptr)
void setManager(const manager::dti::SkillManagerInterfacePrx &manager)
manager::dti::SkillManagerInterfacePrx manager
InitResult initSkill()
Initialization of a skill.
SkillExecutionHandlePtr callSubskillAsync(SkillProxyPtr proxy, std::function< void(ParameterT ¶meters)> parametersFunction)
virtual InitResult init()
Override this method with the actual implementation.
static MainResult MakeAbortedResult(aron::data::DictPtr data=nullptr)
armarx::aron::data::DictPtr parameters
ExitResult exitSkill()
Exit method of a skill.
std::atomic_bool constructing
void notifySkillToStop()
Notify the skill from extern to stop.
PrepareResult prepareSkill()
Prepare a skill once.
SkillExecutionHandlePtr callSubskillAsync(const SkillProxy &proxy, std::function< void(ParameterT ¶meters)> parametersFunction)
Similar to callSubskill but non-blocking.
std::atomic_bool timeoutReached
SkillDescription description
std::mutex parametersMutex
virtual void onStopRequested()
bool shouldSkillTerminate() const override
Returns whether the skill should terminate as soon as possible.
std::optional< TerminatedSkillStatusUpdate > callSubskill(const SkillID &skillId, std::function< void(aron::data::DictPtr ¶meters)> parametersFunction)
Call a subskill with parameters based on the default parameters.
SkillExecutionHandlePtr callSubskillAsync(const SkillID &skillId, std::function< void(ParameterT ¶meters)> parametersFunction)
Similar to callSubskill but non-blocking.
virtual MainResult main()
Override this method with the actual implementation.
void throwIfSkillShouldTerminate(const std::string &abortedMessage="") const
SkillID getSkillId() const
Get the id of the skill.
std::optional< TerminatedSkillStatusUpdate > callSubskill(const skills::SkillProxy &proxy)
Call a subskill with default parameters and block until the subskill terminates.
virtual ExitResult exit()
Override this method with the actual implementation.
void setCallback(const CallbackT &callback)
std::optional< TerminatedSkillStatusUpdate > callSubskill(const skills::SkillProxy &proxy, const aron::data::DictPtr ¶meters)
Call a subskill with given parameters and block until the subskill terminates.
~Skill() override
Virtual destructor of a skill.
MainResult mainOfSkill()
Main method of a skill.
aron::data::DictPtr getParameters() const
Get the parameters of a skill that have been set so far.
SkillExecutionHandlePtr callSubskillAsync(const SkillID &skillId, std::function< void(aron::data::DictPtr &)> parametersFunction)
void setParameters(const aron::data::DictPtr &d)
Hard set the parameters, ignoring everything that has been set or merged before.
std::atomic_bool initializing
void updateSubSkillStatus(const skills::SkillStatusUpdate &statusUpdate)
SkillDescription getSkillDescription() const
Get the description of a skill.
Skill()=delete
We completely remove the default constructor!
armem::task_outcome::TaskOutcome taskOutcome_
virtual void onTimeoutReached()
Override these methods if you want to do something special when notification comes.
static MainResult MakeFailedResult(aron::data::DictPtr data=nullptr)
void updateParameters(const aron::data::DictPtr &d)
Merge parameters to the local parameters of the skill.
void setProviderId(const skills::ProviderID &pid)
Set the provider id of the description of the skill.
void waitFor(const armarx::Duration &duration, const armarx::Duration &interval=armarx::Duration::MilliSeconds(200)) const override
void setExecutorName(const std::string &executorName)
std::function< void(const SkillStatus s, const armarx::aron::data::DictPtr &)> CallbackT
std::atomic_bool preparing
std::optional< TerminatedSkillStatusUpdate > callSubskill(const SkillID &skillId, std::function< void(ParameterT ¶meters)> parametersFunction)
Call a subskill with parameters based on the default parameters.
std::shared_ptr< Dict > DictPtr
std::unique_ptr< class SkillExecutionHandle > SkillExecutionHandlePtr
ActiveOrTerminatedSkillStatus
std::unique_ptr< class SkillProxy > SkillProxyPtr
This file offers overloads of toIce() and fromIce() functions for STL container types.
Interval< T > interval(T lo, T hi)
This file is part of ArmarX.
A result struct for skill exit function.
TerminatedSkillStatus status
A result struct for skill initialization.
TerminatedSkillStatus status
A result struct for th main method of a skill.
TerminatedSkillStatus status
A result struct for skill preparing.
ActiveOrTerminatedSkillStatus status