Matthieu Herrb, 2018-07-31 15:01
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.
* The [[Install]] page explains how to install the GenoM software and its dependencies.
* The [[Tutorials]] page gives you practical example to get started with GenoM.
Documentation is available online "here":https://git.openrobots.org/projects/genom3/gollum. It is also available as asciidoc and HTML in the source distribution.
You can also browse those "PDF slides":http://homepages.laas.fr/mallet/share/doc/genom3/2010-08-04-bonn.pdf for an introductory talk on GenoM3 and a "paper":http://homepages.laas.fr/mallet/share/doc/genom3/icra2010.pdf published in "ICRA2010":http://icra2010.grasp.upenn.edu/. A "short paper":http://homepages.laas.fr/mallet/share/doc/genom3/car2011.pdf presented at "CAR2011":http://car2011.inrialpes.fr/ is also available.
Finally, a "paper on the use of GenoM2 on a planetary rover":http://homepages.laas.fr/mallet/share/doc/genom3/astra2011.pdf presents a concrete integration example. It was published in "ASTRA2011":http://www.congrexprojects.com/11a06/.
h3. 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 available:
* The project:genom3-pocolibs template (see also "pocolibs":https://www.openrobots.org/wiki/pocolibs), which is what GenoM 2 used to provide.
* The project:genom3-ros template (see also "ros":http://ros.org/wiki/).
* The project:genom3-orocos template (see also "orocos":http://www.orocos.org/toolchain).
* A project:genom3-bip template (see also "BIP":http://www-verimag.imag.fr/Rigorous-Design-of-Component-Based). This one is really in a very early alpha stage, so you probably cannot use it yet without a deep knowledge of BIP.
All templates provide a server implementation (the component itself) and a variety of clients.
GenoM3 components can be controlled by several kind of clients:
* A middleware independent C client library, specialized for each component. 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 and do not expose any middleware dependency. 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 (not specialized for a particular component). All methods are accessed via function pointers through a generic structure. The component services, ports and datatypes are described with JSON dictionaries. This allows code to dynamically load and control any component in a generic way.
* The project:genomix HTTP server and associated clients (currently only a TCL client). `genomix` is a generic http server that serves as a proxy between clients and genom components (it uses the generic 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.
* An project:openprs client template can be found at project:genom3-openprs. It bridges `OpenPRS` and `genom` components, again in a middleware agnostic way. This template is used when you plan to control your module(s) with project:openprs, using project:transgen3 to build the supervisor. Browse the code online "here":https://git.openrobots.org/projects/genom3-openprs/repository.
h3. Source code
GenoM3 is currently under development and there is no official release yet.
Preliminary beta releases are available for download "here":https://www.openrobots.org/distfiles/genom/ .
Sources can also be accessed through the "git repository":https://git.openrobots.org/projects/genom3/repository
GenoM development was initiated by "Sara Fleury":http://homepages.laas.fr/sara/ and "Matthieu Herrb":http://homepages.laas.fr/matthieu/ in 1994. The first opensource version, labelled version 2.x, was released in 2004. The reflexion and development of version 3 started in 2009, with the great help of Cédric Pasteur who quickly developed the first prototype in the context of his master training period.
And as a reward for those who read this entire page, here is "an overview of what you can expect":http://xkcd.com/974/ by using GenoM3 on your robotic system.