Goals for RTT 2.0

The sections below formulate the major goals which RTT 2.0 wishes to attain.


The Real-Time Toolkit shouldn't be in the way of building complex applications, instead it should help making it easier. We're improving on different fronts to make it more simple to use for both beginners and experienced power users.

API: user oriented

The API is clearly separated in what public (rtt user) and private (rtt internal) APIs are. The number of concepts are reduced and a sane default is chosen where alternatives are possible. Policies allow users to deviate from the default behavior.

Tooling: enhancing the experience

The RTT is a very extensible library. When users require an extension, they don't need to write much or any additional code. Tools assist in generating helper libraries for adding user types (type plugins) or user interfaces (service plugins) to the RTT. The generated code is readable and understandable and documented. If required, these can be overriden by hand-written code such that tools in development do not block user development.

Component model: components are simple

RTT 2.0 components are simple to understand and explain. In essence they are stateful input/output systems that offer services to supervisors.

The input/output is offered by means of port based communication between data processing algorithms. An input port receives data, an output port sends data. The algorithms in the component define the transformation from input to output.

Service based communication offers operations such as configuration or task execution. A component always specifies if a service is provided or requested. This allows run-time dependency and system state checking, but also automatic connection/disconnection management which is important in distributed environments.

Components are stateful. They don't just start processing data right away. They can validate their preconditions, be queried for their current state and be started and stopped in a controlled manner. Although there is a standard state machine in each component that regulates these transitions, users can extend these without limitations.

Acceptable Upgrade Path

The first users of RTT 2.0 will be current users, seeing solutions for problems they have today. The upgrade path will be documented and assistive tools will be provided. Whenever possible, backwards compatibility is maintained.


The field knows a number of succesful robotics frameworks, languages and operating systems. RTT 2.0 is designed to allow bridges to these components.

Other frameworks

RTT 2.0 can easily interoperate with other robotics frameworks that provide the concepts of port based data flow communication and functional services.

Other languages

RTT 2.0 offers the 1.x real-time scripting language, but in addition binds to other languages as well. A real-time language binding to Lua is offered. Not real-time bindings are offered over a CORBA language independent interface.

Other operating systems

RTT 2.0 runs on Linux, RTAI, Xenomai, Mac OS-X and Windows. These are the main operating systems of the current advanced robotics domain.


Complex systems are hard to startup, shutdown or to recover from disfunctional components. RTT 2.0 aids the system architect in maintaining a robust machine controller, even in distributed setups.

Service oriented architectures

Components are aware of the available services and have chance to execute fall-back scenarios when they disappear. They are notified in time such that they can take proper action and recover and resume when a service becomes available again. Local and global supervisors keep track of these state changes such that such mechanisms do not need to be hard-coded into each component.

Separation between real-time and not real-time processes

A real-time component can not be disturbed due to the addition of a lower priority communicating peer. This allows to build systems incrementally around a hard-realtime core. The RTT decouples the communication between sender and receiver and allows real-time data transports to assure delivery.