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. It is also available as asciidoc and HTML in the source distribution.
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:
- A genom3-bip template (see also BIP). 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 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 openprs client template can be found at 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 openprs, using transgen3 to build the supervisor. Browse the code online here.
GenoM3 is currently under development and there is no official release yet.
Preliminary beta releases are available for download here .
Sources can also be accessed through the git repository
GenoM development was initiated by Sara Fleury and Matthieu Herrb 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 by using GenoM3 on your robotic system.