GenoM3

Introduction

This page is about GenoM version 3, which is the successor of GenoM version 2. If you are looking for GenoM 2, please visit this page.

The Generator of Modules GenoM is a tool to design real-time software architectures. It encapsulates software functions inside independent components. GenoM is more specifically dedicated to complex on-board systems, such as autonomous mobile robots or satellites, that require:

  • The integration of heterogeneous functions with different real-time constraints and algorithm complexities (control of sensors and actuators, data processings, task planification, etc.).
  • An homogeneous integration of these functions in a control architecture which requires coherent and predictable behaviors (starting, ending, error handling), and standard interfaces (configuration, control flow, data flow).
  • The management of parallelization, physical distribution and portability of the functions.
  • Simple procedures to add, modify or (re)use the functions by non-specialists

GenoM generates the source code of components by using:

  • A generic template, common for all components. This guarantees that all components share the same consistent behaviour. The template itself is not part of GenoM, so that different template kind can be developped easily.
  • A formal description of the components interface. This description is based on a simple language using OMG IDL for data types definitions and a custom syntax for the description of a more detailed component model.

The project is released under an open-source, BSD-like license.

Documentation

A preliminary documentation is available online. The same document is available as PDF, HTML or text in the source distribution.

You can also browse those PDF slides of an introductory talk on GenoM3 and a paper published in ICRA2010. A short paper presented at CAR2011 is also available.

Finally, a paper on the use of GenoM2 on a planetary rover presents a concrete integration example. It was published in ASTRA2011.

Source code

GenoM3 is currently under development and there is no official release yet.
You can browse the git repository and check it out (read-only) via anonymous git with one of

% git clone git://git.openrobots.org/git/robots/genom3
% git clone http://git.openrobots.org/git/robots/genom3.git

Preliminary beta releases are available for download here:

Middleware templates

GenoM3 needs source code templates to be able to generate code for a given middleware. Those templates represent the actual implementation of the GenoM component model. They are provided as separate source code repositories.

Currently, three major templates are under active development :

  • The pocolibs template (see pocolibs), which is what GenoM 2 used to provide. A few functionalities are still missing, but the resulting components are largely useable. You can browse the repository or check it out with git clone git://git.openrobots.org/git/robots/genom3-pocolibs.
  • The ros template (see ros). You can browse the repository or check it out with git clone git://git.openrobots.org/git/robots/genom3-ros.
  • A BIP template (see BIP). This one is really in a very early alpha stage, so you probably cannot use it yourself yet.

All templates provide a server implementation (the component itself) and a variety of clients.

Clients

GenoM3 components can be controlled by several kind of clients:

  • A middleware independent C client library. Both the pocolibs and ros templates provide an implementation of this client. The middleware is hidden behind the client api, so that components can be controlled in a generic way. The library interface provides functions to read data ports or invoke the component services and wait for completion, either synchronously or via callbacks. This interface is generated for each component. A generic C client interface is also provided, where all methods are accessed via function pointers through a generic structure and the component services, ports and datatypes are described with JSON dictionaries. This allows code to dynamically load and control any component.
  • The genomix HTTP server and associated clients. The genomix http server is a generic interface between clients and genom components (it uses the C client described above). Control is done be the mean of specific HTTP GET requests (not yet documented...) and the tcl-genomix package wraps this into a tcl package for use in TCL scripts.
    Check git://git.openrobots.org/git/robots/genomix and git://git.openrobots.org/git/robots/tcl-genomix if you dare experimenting undocumented code :-).

    The design allows any other kind of clients to be developped, based on genomix (e.g. a raw javascript client for use in a web browser, a LUA or python client ...). Volunteers welcome!

  • An OpenPRS client template can be found at git://git.openrobots.org/git/robots/genom3-openprs. Browse online here.

History

GenoM development was initiated by Sara Fleury and Matthieu Herrb in 1994. The first opensource version, labelled version 2.x, was released in 2004. I started the reflexion and development of version 3 in 2009, with the great help of Cédric Pasteur who quickly developed the first prototype in the context of his master training period.

This page summarizes the GenoM3 development process.