Compound Skills

This page will refer to example skills from this repository written by Pontus Rosqvist.

When it comes to SkiROS a compound skill can be implemented by extending 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 here. An example of how to use these skill processors can be seen in 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 compound_if_statement.