Orocos Toolchain 2.4 Release Series Changes, New Features, and Fixes

Open RObot COntrol Software

Table of Contents

1. Upgrading from RTT 1.x to Toolchain 2.x
2. Caveats
2.1. Changes in rtt/os/oro_atomic.h atomics headers
3. Improvements
3.1. Building
3.2. TaskContext and Services
3.3. Data Types, Toolkits and Typekits
3.4. Operating Systems
3.5. Orocos scripting
4. Orocos Component Library (OCL)
4.1. Lua scripting
4.2. Deployment
4.3. TaskBrowser
4.4. Logging Service
1. About Orocos

This document provides a quick overview of what changed between the Orocos Toolchain 2.3 and version 2.4.

1. Upgrading from RTT 1.x to Toolchain 2.x

Please consult the online wiki for all available information about the 1.x to 2.x transition: The Road to RTT 2.0. The Real-Time Toolkit is no longer released as a single entity, but as part of a complete set of tools and libraries for creating real-time applications. See also the changes documents of the previous major releases:

2. Caveats

  • This release is binary incompatible with RTT 2.3.x. You need to recompile the whole toolchain and all your applications in order to use this release.


    Take care that all previously built components and plugins in the lib/orocos directory and subdirectories are removed, since the deployment/plugin logic may want to load it. Especially on 'ROS' systems, which have such files in their lib/ directory.

  • There are issues with plugin loading on the Mac OS-X platform which might have been fixed with this release. We invite Mac users to test the Orocos toolchain on their platform and to submit bug reports if some functionality does not work.

  • We have confirmed reports of compilation time regressions when using GCC. We are looking into reducing them. You can speed-up compilation times of components by including the 'Types.hpp' files of the typekits you are using in data ports, properties or operations. For example:

      #include <rtt/typekit/Types.hpp> // Speeds up compiling components using regular C types
      #include <geometry_msgs/typekit/Types.hpp> // Speeds up compiling ROS geometry message types (depends on rtt_ros_integration_geometry_messages)

2.1.  Changes in rtt/os/oro_atomic.h atomics headers

The atomic operations have been refactored in order to suit future maintainability. The GCC-specific implementations have been rewritten in order to use the intrinsics. For this, the oro_atomic.h and oro_system.h headers were removed and a new header, oro_arch.h is in place for each target to implement the required atomics.

3. Improvements

3.1. Building

  • Building of executables on ROS systems using the UseOrocos cmake macros has been improved such that rosrun will no longer offer two options. If you upgrade OCL in-tree, In order to delete the old executables, use git clean -xdf and then rebuild.

3.2. TaskContext and Services

  • The data flow port implementation has been optimized in order to reduce the number of copies to a minimum.

  • There are fixes for the serialization of complex properties (structs and sequences) into the XML file format.

  • A bug in the Signal implementation lead to a segfault when removing an event port from a TaskContext. This has been fixed.

3.3. Data Types, Toolkits and Typekits

  • The rt__string type has been added to the type system, allowing real-time string manipulations in scripts. It has the same featureset as the std string type, but uses the real-time memory allocators. You can create an rt_string as such:

      var rt_string test = rt_string("Testit!") 

    You can pass an rt_string where is a string is expected and the other way around. Creating the rt_string will always be hard real-time.

  • The Posix MQueue transport for flow ports is now supported through orogen/typegen using a generic transport plugin. It relies on the type specific typelib transport, which is generated automatically when you use orogen/typegen. The traditional MQueue transport remains in place as well.

3.4. Operating Systems

  • It's now possible to set CPU Affinity when creating an activity or a thread. If your OS abstraction supports it, changing the affinity at run-time is possible too. Currently, this is only implemented for gnulinux targets. On other targets, setCPUAffinity() will have no effect, until their OS interface makes use of it.

  • As of this version, Orocos will use the GCC intrinsics API in order to implement atomic operations on data, when GCC 4.1.0 or newer is available.

3.5. Orocos scripting

  • There were fixes in the parsing of the assignment operator. Especially the case a = b = c has now been fixed.

4. Orocos Component Library (OCL)

4.1. Lua scripting

  • Release 2.4.0 now has Lua 1.0-beta3, providing an as-good-as-stable API for creating and using components and applications. A LuaCookbook has been put online which is updated regularly.

  • You are now allowed to write:

      tc:provides():setPeriod( 0.01 ) -- calls operation immediately 

    instead of:

      op = tc:provides():getOperation("setPeriod") -- 'getOperation syntax'
      op(0.01) -- calls 'setPeriod'

    Both forms for calling operations is supported. The former is convenient, but may be slower, the latter can be used in loops where the operation is first stored and then called with an argument later on.

4.2. Deployment

  • You can now kickOut any component, also if it was created using a script. A bug was fixed which did not shut down components which were not loaded using XML.

4.3. TaskBrowser

  • Allows to display all values in hex format using the .hex taskbrowser command.

  • Tab-completion on services has been fixed. Properties did not show up.

4.4. Logging Service

  • A new logger for logging to Apache ChainSaw has been added, the Log4cxxAppender component. You need ChainSaw running before your application starts in order to see the log events in the GUI. Any number of applications in your network may log to ChainSaw. For more details about logging in Orocos, see the LoggingService wiki page.

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) The SourceWorks

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