Orocos Real-Time Toolkit 1.4 Release Series Changes, New Features, and Fixes

Open RObot COntrol Software


Table of Contents

1. Caveats
2. Improvements
2.1. Component network communication
2.2. OS Abstraction
2.3. RTT classes
2.4. Corba Support
1. About Orocos

This document provides a quick overview of what changed between the Real-Time Toolkit 1.2 and version 1.4. This release includes all bugfixes of the 1.2 branch. If your application does not work, look here for possible causes and solutions. Also feature additions and improvements are documented.

The complete changelog is available as well.

1. Caveats

  • The RTT library names and .pc files have been renamed from liborocos-rtt.so and orocos-rtt.pc to liborocos-rtt-<target>.so and orocos-rtt-<target>.pc. You need to update your Makefiles in order to look for these files. Also, the liborocos-rtt-corba.so file has been renamed to liborocos-rtt-corba-<target>.so. Where target refers to the OS target, for example: lxrt, gnulinux or xenomai.

    This was necessary to allow multiple RTT installations in the same place and to clearly distinguish between the libraries, which are all binary different.

    The Orocos Component Library (OCL) has adopted the same naming convention.

  • Compiling Orocos applications (or components) now requires the OROCOS_TARGET macro to be set during compilation. For example:

     gcc -c program.cpp -DOROCOS_TARGET=gnulinux 

    Will compile your program or component for the 'gnulinux' target.

    If you use pkg-config to get the build options, this define is returned as well:

     gcc -c program.cpp $(pkg-config orocos-rtt-gnulinux --cflags) 

    If you use CMake, you can use the FindOrocosRTT.cmake file from the Orocos Component Library.

  • A number of fuctions were added to TaskContext and TaskCore in version 1.4: bool activate() and bool activateHook(), void fatal(), bool resetError() and bool resetHook(), void warning(), void error(), void recovered() and bool errorHook(). The queries int getErrorCount(), int getWarningCount(), int inFatalError(), int inRunTimeError() and int inRunTimeWarning() have been added as well. If your RTT 1.2 component has functions like these, they need to be renamed or match the semantics of the new component state model. See the Component Builder's Manual for a description of these new hooks.

2. Improvements

2.1. Component network communication

  • From release 1.4.0 on, the decision if a component is accessible over a network is no longer taken at compile time, but at runtime. This is possible since the RTT has defined a 'plugin' API for network communication. Moving this code to an external library drastically improves compile time and memory footprint of a component.

2.2. OS Abstraction

  • The ORO_main function (from rtt/os/main.h) has now become a macro, and is optional to some extent. If you choose not to use ORO_main and write an application using the standard main() function, you need to call an additional function before using RTT functions: __os_init() and call __os_exit() just before returning from main(). This new implementation allows the RTT library to be compiled on other platforms with stricter library conventions than Linux.

    See also ORO_main should be optionally defined .

2.3. RTT classes

  • The TaskContext class has been extended to support an InError state. A component now has an error() and resetError() method to enter and leave the InError state. If a component is in error, it will stop running and refuse to start until it receives resetError(). Depending upon implementation, a resetError causes the component to enter the PreOperational or Stopped state. The associated user function (resetHook()) allow the user to control that transition.

    See also Orocos components do not have an 'Error' state .

  • The TaskContext class has been extended to support an Active state. A component now has an activate() method to enter the Active state. If a component is in error, it will stop running and refuse to start until it is resetError(). Depending upon implementation, a resetError causes the component to enter the PreOperational or Stopped state. The associated user function (resetHook()) allow the user to control that transition.

    See also [Project] Improve Component execution model .

  • The PeriodicActivity has received a more efficient implementation, removing unneccessary internal classes.

    See also [Project] PeriodicActivity/TimerThread imposes too much overhead .

  • The TaskContext interface classes (commands, methods, events, properties,...) were made more consistent in returning the contents of the interface in the get<InterfaceKind>() functions.

    See also RTT::EventService: getEvents returns no names .

  • A Timer class has been added which can be armed with multiple timers, such that time based events or user code can be executed at a programmed interval. The Orocos Components Library extends this class with a TimerComponent which exports this class as an Orocos component.

    See also [Project]TimerComponent for time based events .

2.4. Corba Support

  • From release 1.4.0 on, CORBA transport is an optional, run-time plugin for the Real-Time Toolkit. This means that any component, built with RTT 1.4.0 or later, can at any time be distributed over a network without being recompiled, even if at the time of compilation CORBA was not available or enabled. All CORBA specific functionality is now encapsualted in the 'orocos-rtt-corba' library.

    See also [Project]Make CORBA transport pluggable .

1. About Orocos

Please send your Orocos questions to orocos-users at lists.mech.kuleuven.be .

These pages are maintained by the Orocos team.

For questions related to the use of the Orocos Software, please consult these web pages and the Orocos RTT manuals. If that fails, the orocos-dev at lists.mech.kuleuven.be mailing list might help. Please send comments on these web pages and the development of Orocos to our developer mailing list at orocos-dev at lists.mech.kuleuven.be . All of our lists have public archives ( dev public archive ) .

Copyright (C) FMTC

Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.