====== Compound Skills ====== This page will refer to example skills from [[https://git.cs.lth.se/robotlab/skill_examples/-/tree/master/|this]] repository written by Pontus Rosqvist. When it comes to SkiROS a compound skill can be implemented by extending [[https://github.com/RVMI/skiros2/blob/master/skiros2_skill/src/skiros2_skill/core/skill.py|SkillBase]]. This class can run arbitrary python code but it is mostly intended for calling other skills. If primitive skills are intepreted then compound skills are compiled, anything written in expand only specifies the behaviour tree, it isn't run when expand is called. A compound skill has the following stages of execution: ^ Name ^ When it runs ^ Note ^ | onStart | Once each time the skill starts. | | | onPreempt | When a preempt signal is sent. | A preempt signal can be sent from, for example, the SkiROS gui. | | expand | After onStart. | Call primitive (or other compound) skills here. | | onEnd | Once when execute has returned a terminal state. | | A compound skill can call other skills and by choosing different processors one can coordinate the execution of skill with a behaviour tree. ===== Skill Processors ===== The execution of skills from the compound skill can be coordinate with the help of many different skill processors. The available skill processors are ^ Processor Name ^ Purpose ^ Note ^ | Serial | Executes each skill sequentially until every skill has succeeded. Restarts finished skills. | | | SerialStar | Executes each skill sequentially until every skill has succeeded. Does not restart skills that have succeeded. | | | Sequential | Alias of SerialStar. Deprecated. | | | Selector | Executes each skill sequentially until one succeeds. | | | SelectorStar | Executes each skill sequentially until one succeeds, additionally it keeps track of which skills have succeded and refrains from running them again. | | | ParallelFf | Parallel First Fail - Executes skills in parallel until all succeed. Stop all processes if a skill fails. | | | ParallelFs | Parallel First Success - Executes skills in parallel until one succeeds. Stop all processes if a skill succeeds/fails. | | | Loop | Executes the skills sequentially N times. | Optionally takes amount times to loop as parameter, otherwise loops forever. | | RetryOnFail | Executes the skills sequentially restarts from the beginning if a skill fails. | Optionally takes the maximal amount restarts as parameter, otherwise retires until all skills have succeded. | | NoFail | Wrapper for a skill processor to stop if from returning fail. | Takes a skillprocessor as a parameter. | | InferInvalid | Infers parameters which exist in the blackboard which might happen to be invalid | | These are all the skill processors one can use but they can also be found [[https://git.cs.lth.se/robotlab/rvmi/skiros2/-/blob/master/skiros2_skill/src/skiros2_skill/core/processors.py|here]]. An example of how to use these skill processors can be seen in [[https://git.cs.lth.se/robotlab/skill_examples/-/blob/master/src/skill_examples/basic_compound_skill.py|basic_compound]] and an example of how to use these processors to perform conditional checks which determine how the skill runs can be seen in [[https://git.cs.lth.se/robotlab/skill_examples/-/blob/master/src/skill_examples/compound_if_statement.py|compound_if_statement]].