[Rock-dev] Roby: Projects and Patterns

Chris Mueller christoph.mueller at dfki.de
Mon Oct 22 19:40:13 CEST 2012


I'm currently refacting some points in our bundles of the RIMRES project 
and evaluating for myself the
current source code and solutions of other projects using the Roby 
Planning systems.

I'm interested in which projects additionally use / used intensively the 
Planning system? Most of the time i'm alwas looking
into:

- imoby
- avalon
- rimres

In the past there were discussions in some of our roby meetings about 
the needs to find "good practise patterns" using
the orocos.rb / roby framework. I would like to motivate this point 
again especially for generating plans because based on
my experience i'm more often see common requirements with different 
solutions.

I think introducing conceptional good solutions would be much helpful 
for the usage of the framework (especially for newcomers)
I know each projects has also its individual, harsh requirements, most 
solutions are also developed under big time pressure due
to some milestones and generalizing in robotics is sometimes not very easy.

But i would like to give you a small example what currently attracts my 
attention in the current source base to fulfill my requirements.

(Problem) The robotic system has a complete compositions model for 
sensor processing and control loops. In the past most of my
work with roby depends on generating plans, in which different tasks 
needs to be executed in a specific set of sequences. Each task
is often associated with a specific composition structure which monitors 
and controls its port connections, orocos task states and
mission state information. i often aim an execution sequence based on a 
state machine where each state can represents the
execution of task and events are controlling the transitions for task 
switches / changes.

I think the three, mentioned projects have already coped with this 
framework-relevant requirement for their individual szenarios and
and found different solutions to map the flexible roby api to this 
logical concept (linear- and non-linear sequences).

(AVALON 2011) Uses intensively the Plan Scripting Interface to 
manipulate the related composition structure. Each task is modelled by a 
scripted planning
method that was associated with a RobyTask (for EventDefinitions) and 
state changes are directly controlled by Roby relations calls
(depends_on, influence_by, starts_after calls, etc.).

(AVALON 2012) For the last SAUC-E i've introduced a new abstraction 
where a state machine is modelled with a ruby DSL that setted up
the task relations for the user automatically. It's usage was very 
limited and its design probably violates some concepts behind the roby 
mechanism. But it
did its job and provided the advantage, a mission could be changed by 
members without a deep knowledge of the planning system.

(RIMRES) currently embeds its code directly into its compositions 
definition and uses the mechanism for "refine_running_state" to model
behaviour switches. Each task is directly encoded in a "poll_in_state" 
which bloats the compositions massively. State Machine transitions are
often triggered by external RobyTasks that emits the relevant events. 
(Thats also my current point i would like to refactor)

(IMOBY) I've read a little the Roby API about its common components and 
looked afterwars into some files for imoby. I think it maps at best
the description of the API where behaviours are encapsled in RobyTasks 
(which represents Activities of a Robot) and the sequencing is
controlled through the Planner Interface.

Sorry, if i mixed up intensively some terminology. I hope you can follow 
this example without knowing the source code and see my points.

I guess, for the future there will be also much more complex szenarios 
which would also prophibit from common patterns.
Especially, when more projects are aiming and coping with reactive- and 
behaviour-driven control architectures (*winks_to_Jan*) and try to map this
requirements to the Roby API.

Chris


More information about the Rock-dev mailing list