Components are blocks of software building, each with specific functionality, which the user can assemble to achieve the robot global functionality; they have a standardized way to exchange information between each other so that they can be connected together. Components are executables; they represent an encapsulation of the notion of threads and process. They will be dedicated typically to a particular actuator and sensor, but this is not mandatory. They can also provide high level services and abstract and rely on data produced by other components.
Components execute their functionality or “deliver their services” independently of the context in which they are used, e.g. without having to know during design and implementation who is going to use its service and how they are going to be used. The independence of the component is a guide to decide what functionality should be put in the “grain size”, but this is not absolute, this choice is left to developer.
The services provided by the components are activated by external entities according to the task requirement and the execution context in order to accomplish tasks. The sequences of services can be activated directly by a human operator, planned and triggered by decisional components or more generally by event generated elsewhere in the system. It is important to stress that this structuring does not presuppose any decisional architectures, the way components are connected together is not specified nor forced. The controllable components can be used for implementing any architectures of decisional form behavior based to supervised and planned approaches. The same set components can be served different purposes when reused in different architectures.
They have defined three main entities that compose them, an execution engine, a set of algorithms, and a communication library in order to make components implementation independent and hence portable either from one robot to another or between decisional architectures.