Table of Contents
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.
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.
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.
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 .
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.
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.
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.
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 .
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.