Programming autonomous robotic systems is a complex task and often relies on
architectural principles and tools. In most robotic software architectures, a
distinction is made between a decisional layer and a functional layer.  The
decisional layer is typically in charge of planning, acting, monitoring, while
the functional layer in charge of driving sensors, effectors and activities
such as localization, mapping, motion planning, trajectory following or
obstacle avoidance.

GenoM (Generator Of Modules) is a tool to specify and implement a modular,
component-based architecture for a robotic functional layer, developed by the
robotics team of the LAAS laboratory for the LAAS Architecture for Autonomous
Systems. Components are independent executable units, that can be reused across
applications and communicate with each other thanks to a communication
middleware. Note that while GenoM was originally designed for autonomous and
terrestrial mobile robots, it can also be used in a broader set of
applications.

In Genom, each component is formally described using a language derived from
OMG IDL (Interface Description Language). This specification allows to generate
code for all the communication parts of the components as well as the internal
sequencing logic automatically. The programmer can concentrate his efforts on
the functional parts of the components and all generated components are
guaranteed to have a predictable, homogeneous behavior.

`genom3` (the current version of GenoM) provides middleware independence to the
components, to completely separate the algorithmic concerns of the components
from the integration framework. It supports different middlewares through the
notion of templates. A template is a program that describes how the formal
description of the component is going to be translated into actual code.
Templates also make it possible to support different programming languages.
