Recent evolutions in GenoM
Anthony Mallet, Matthieu HerrbLAAS - CNRS
Grenoble, May 25th, 2011
Overview
1. History and concepts
2. GenoM3
3. Simplified example
4. Internals
History and concepts GenoM3 Example Internals 1/34
History
Martha EU project – Circa 1995
History and concepts GenoM3 Example Internals 2/34
Salient demonstrations
Hilare2 – 2002 Rackham – 2005 Karma – 2004
Lama – 2001 Dala – 2004 HRP-2 – 2008
History and concepts GenoM3 Example Internals 3/34
GenoM Authors
Sara Fleury Matthieu Herrb
• 1994 - 2000 First version. Running only on VxWorks.
• 2000 - 2004 Linux support with pocolibs.
• 2004 - 2010 Version 2 - Opensource, english documentation.Used by a few other labs/companies (JPL, EPFL, GMV).
• 2010 - Version 3 - Middleware independence.History and concepts GenoM3 Example Internals 4/34
Concepts
History and concepts GenoM3 Example Internals 5/34
LAAS layered architecture: Functions, Supervision
supervisor
effortswrist
recognition
speech
sentences
trajectorygeometric
speedreferences
sensor position
proxi segs
points referencesspeed
position
human position (3D)human position (2D)
head position
map
localmap
manipulationhuman perception recognitionobject
base motion
3D image
referencefingers efforts
positionreferences
(jerk cntrl)
laser data
images
human posture
handposition
proximetric
jloco
segloc
sick laser
human
camera2(videre)
qarm
sranger graspCntrlNDD cameras
aspect
humPos
ViewPoint Obj 3D
graspPlan
speak
clone
fingersforcePTURECO
voodooGEST ICUFUSION
hardware sensors and actuators
xarm
collision
HueBlobMHPNHP
HATP CRSSHARY
(from the COGNIRON EU project, circa 2007)
History and concepts GenoM3 Example Internals 6/34
GenoM: component-based model
Components
• are entities relevant to the supervision,
• coarse grained,
• provide high-level services (e.g. not a matrix product).
History and concepts GenoM3 Example Internals 7/34
Components formal description
Components are defined by a text file:
• Interface: ports, services.
• Properties.
• Internals:· codels (elementary code).· executions contexts (tasks, threads).
History and concepts GenoM3 Example Internals 8/34
GenoM: a unique component model
All components share the same component model:
• Robustness
• Ease of development
• Generic supervision architecture
• Software validation
• Decoupling architecture / algorithmic core
History and concepts GenoM3 Example Internals 9/34
Formal component description
• A component defines several services.• Each running service corresponds to an activity.• GenoM activities execute according to a state machine.
Example: GenoM2 activity FSM.
ETHER
INIT
ZOMBIE
exec/−init/−
abort/−
abort/−
EXEC
INTER−/ended
−/failed
−/failed
abort/−
−/ended
− / execution
control / −events
History and concepts GenoM3 Example Internals 10/34
Control & data flows
• Control flow· Service requests, may have parameters and output data.
· Provides building blocks for application development (supervision).
· Low bandwidth.
• Data flow· Input and output ports: “posters”.
· Long-lived inter-components connections, configured dynamically viaservices. Meant for high bandwidth data transmission.
History and concepts GenoM3 Example Internals 11/34
Decoupled components
• No control flow between components· Prevents conflicting requests.
· Supervision layer can rely on a known state.
· Increases modularity.
History and concepts GenoM3 Example Internals 12/34
GenoM3
Can we make components truly middleware-independent?
History and concepts GenoM3 Example Internals 13/34
Middleware issues
There are a lot of different middlewares / frameworks.
• Player (2001)
• Orocos (2002)
• OpenRTM (2002)
• Urbi (2003)
• Orca (2004)
• YARP (2006)
• ROS (2007)
• ... ETC ...
History and concepts GenoM3 Example Internals 14/34
Middleware issues
• The choice of a middleware is crucial:revoking that choice is costly.
• Different contexts require different solutions.
• There is no unique solution.
• Modularity is good.
History and concepts GenoM3 Example Internals 15/34
Middleware issues
A generic component will usually look like this:
Middleware
Component
Library
OS
History and concepts GenoM3 Example Internals 16/34
Goals
Components:
• Be able to use any middleware.
• Make the underlying libraries highly reusable.
• Define a common component model, allowing generic su-pervision or validation. e.g. BIP from VERIMAG.
Architectures:
• Can be compared (e.g. middleware or architecture benchmarks) in thecontext of real and complex applications.
History and concepts GenoM3 Example Internals 17/34
GenoM3
Avoid those approaches:
Middleware
Component
OS
Library
Abstraction
Component
OS
Library
Middleware
Normalized
• → No component model• An extra layer generates extra code and less performance.
• “Least common denominator” of all the middlewares.
• Helps a lot for communication, but not for the rest.(component interface definition, internal component behaviour, control architecturedefinition, ...)
History and concepts GenoM3 Example Internals 18/34
GenoM3 component architecture
• No dependency between “library” and “middleware”.
• Middleware-dependent part generated.
• Use of a formal description file.
Generated code
OS
Middleware Library
Component
DescriptionFormal
History and concepts GenoM3 Example Internals 19/34
GenoM3 tool
Template
Codels
.gen
GeneratedSource
Generic template
2
Middleware
GenoM3
1Parser
Component source
Interpreter
Build3
ComponentExt. Libraries
AST
History and concepts GenoM3 Example Internals 20/34
Formal component description
• Components templates implement the formal description.
• Templates are tied to the middleware.
• Only one template for a given middleware.
History and concepts GenoM3 Example Internals 21/34
Simplified example: servo control
History and concepts GenoM3 Example Internals 22/34
The codels library
intvalidate_k(double *k) {
if (*k<0.) return ERROR;return OK;
}
intservo_control(double target, double k) {
double velocity;
velocity = motor_get_velocity();motor_set_velocity(k * (target - velocity));
return EXEC;};
History and concepts GenoM3 Example Internals 23/34
The component formal description
component servo;
ids { double target; double k; };
task main { period: 1ms; }
service set_k(in k) {validate: validate_k(inout k);
}
service servo(in target) {task: main;codel main: servo_control(in target, in k)
yield main, ether;};
History and concepts GenoM3 Example Internals 24/34
Run genom3
% genom3 <template1> <component.gen>generating ...
% ./configure && make && make install
% genom3 <template2> <component.gen>generating ...
% ./configure && make && make install
History and concepts GenoM3 Example Internals 25/34
Internals
• Formal component description: meta-model
• Templates: component model
History and concepts GenoM3 Example Internals 26/34
Formal component description
• Component interface: IDL data structures
struct sample_data {long l;double d;string s;...
};
History and concepts GenoM3 Example Internals 27/34
Formal component description
• General component description.
component name {lang: "c, c++, ...";
...};
• Internal Data Structure (IDS)ids { ... };
· groups all services parameters.
· state of the component.History and concepts GenoM3 Example Internals 28/34
Formal component description
• Input/output data ports.
inport type name;
outport type name;
History and concepts GenoM3 Example Internals 29/34
Formal component description
• Executions contexts.
task name {period: 100ms;priority: 200;stack: 20k;
codel start: tstart(in ::ids) yield main;codel main: tmain(in d, out s)
yield main, stop;codel stop: tstop() yield ether;
};
History and concepts GenoM3 Example Internals 30/34
Formal component description
• Services.
service name(inout s) {doc: "Service description";task: name;
validate: svalidate();throws: ERROR_1, ERROR_2, ...;interrupts: name;
codel start: sstart() yield step1;codel step1: sstep1() yield step1, step2;codel step2: sstep2() yield ether;codel stop: sstop() yield ether;
};History and concepts GenoM3 Example Internals 31/34
Component templates
Key feature of GenoM3: components templates
• Implements the internal machinery of a component.
• Works with an embbeded scripting language (TCL)Similar to PHP + HTML web pages
• Can be complex to develop.But just one template is needed for a given middleware.
History and concepts GenoM3 Example Internals 32/34
Simple template example
• Regular source code with embedded TCL expressions.
#include <stdio.h><’ set component [dotgen component] ’>
int main(){
const char cname[] = "<"$component name">";<’ foreach s [$components services] { ’>printf("%s: <"[$s name]">\n", cname);<’ } ’>return 0;
}
History and concepts GenoM3 Example Internals 33/34
Work in progress
In development:
• pocolibs: legacy GenoM middleware. 95% ready.
• bip: with VERIMAG lab?
• orocos: with ONERA lab?
• ros-comm: ROS middleware?
History and concepts GenoM3 Example Internals 34/34