Download and Install
Quick Start

Driver Interfaces


Full Software Listings

Dev Guide

Users Logo
Mailing lists



Changes since Last Release and To-Do List

Developers: as you make substantial changes in the code (add features, fix bugs, etc.), add an item in the section on changes. When the next version is released, this list will be copied into the release notes.


To-Do List

  • Documentation
    • An end-to-end tutorial: create new slice interface, write server, write client. (alex m)
    • Update the 'coordinate systems' image.
  • libOrcaIce
    • feature: Add a true default timeout config. The existing Ice.Override.Timeout is a blunt tool. Should we make libOrcaIce internally add a configurable finite timeout when dealing proxies without a timeout? (alexm)
    • Investigate apparent hang when Linux network interfaces change or network is disconnected.
    • Should components quit when there's no registry and Orca.Component.RequireRegistry=1? Right now they seem to hang. Look into component thread. (alexm)
    • What happens when the component assumes a config file name but it's not there? e.g. $ teleop (without teleop.cfg). This should be allowed for utilities like probe but components with required interfaces should say something intelligent (alexm).
    • feature: Make standard Ice::Admin interface appear through Home interface (and therefore make them available through Probe)
    • fix inconsistancy in template definitions in connectutils.h (some template types are expected to be InterfaceType some InterfaceTypePrx). Test these functions, apparently connectToInterfaceWithString<InterfaceType> does not compile but when called with template parameter it does.
  • RegistryView
    • bug: fix stale display of components (alexm)
  • laser2og:
    • The ray-trace stuff in here is currently cut-n-pasted from hydroogmap...
  • image stuff:
    • update the viewer to allow viewer to modify slightly for common needs... rotation, zoom, mirroring of the display and showing statistics on image frequency and delay between the capture the the display of it.
  • libOrcaIfaceUtil
    • feature: special toString() for exceptions? only for those which derive from OrcaException?
  • Probe
    • bug: probes the wrong interface. DataHub has 3 standard and 2 nonstandard interfaces. selecting 3 (the first unsupported interface) for some reason still talks to Home (the last supported iface) (alexm)
    • use JobQueue to parallelize the pinging (alexm)
  • IcePing
    • feature: add a mechanism to ping admin interfaces (alexm)
    • do general cleanup

Changes in Release 9.11.0

Project wide
  • Build system
    • Added a hook in the CMake setup to allow building Orca as part of a bigger "super-project". Default behavior is not modified. (tobie,alexm)
    • Using new CMake macro GBX_REQUIRE_LIBS which simplifies enforcing dependencies, both in-project and installed ones. The older macros GBX_REQUIRE_INSTALLS and GBX_REQUIRE_TARGETS have been removed. (alexm)
    • Changed format style of CMake files. Standard functions are low-case. Custom macros are upper case. "Local" variables are low-case. "Global" and cache variables are upper-case. (alexm)
    • When compiling Slice files to C++: using 'slice2cpp --depend' option to generate proper inter-dependencies between .ice files. This eliminates unnecessary re-generation of cpp files and solves a rare problem: .ice files in a satelite project did not automatically regenerate when Orca .ice files were changed. (alexm)
    • There was a minor readjustment of CMake files in the satellite projects. Reason: simplify updates in the future by separating bootstrap files which change as Orca evolves and project-specific files which do not need to be updated. In your satellite project, make the following changes. First update Orca.
      $ cd <your-project>
      $ mkdir cmake/project
      $ svn add cmake/project/
      $ svn rm cmake/internal/bootstrap.cmake
      $ svn rm cmake/internal/FindOrca.cmake
      $ svn mv cmake/internal/project_setup.cmake cmake/project/ProjectSetup.cmake
      $ svn mv cmake/internal/project_rules.cmake cmake/project/ProjectComponentRules.cmake
      $ cp <orca>/cmake/internal/*.cmake cmake/internal/.
      $ rm cmake/internal/orca-*
      $ svn add cmake/internal/Setup.cmake
      $ cp <orca>/CMakeLists.txt . # edit project name and version
    • Using new CMake macro GBX_REQUIRE_LIBS which simplifies enforcing dependencies, both in-project and installed ones. (alexm)
    • Hydro libraries do not look for Qt, use QT4_FOUND variable instead.
    • Removed a bunch of redundant checks for e.g. GbxUtilAcfr when HydroUtil is checked.
    • Builds with gcc-4.4
    • Using LIB_INSTALL variable in all Hydro libs and drivers.
  • Autogeneration of component files
    • Renamed *.template files used by autogenerators to more standard *.in
    • added COMP_INTERFACE_FLAG option to control which standard interfaces are created.
    • added COMP_ADAPTER_POLICY option to control component's adapter activation: automatically vs manually.
    • Simplified CMake wrapping macros. Instead of pretending to pass some parameters we now expect them to be defined by the CMakeLists.txt of the component. Despite simplified syntax, robustness is improved because macros now check that the required parameters are actually defined and throw a fatal error if not. The following project-wide search-and-replace operation to be performed in satellite projects:
      replace this:
      by this:
      replace this:
      by this:
      replace this:
      by this:
      replace this:
      by this:
  • Dependency cleanup
    • Removed all instances of including <Ice/Ice.h> from library headers to reduce build time. The subset of Ice headers required by standard libs and components is included by <orcaice/context.h> (alexm)
    • Not generating and not using 'global' includes: orca/orca.h, orcaifaceutil/orcaifaceutil.h, orcaifacelog/orcaifacelog.h because they were leading to unnecessary rebuilds which is difficult to fix. Legitimate uses of these headers are replaced by a long list of includes, one per interface. At the same time, removed many instances of wrong usage where only a small subset of interfaces was required. (alexb, alexm)
    • Trimmed what is included by <orcaice/orcaice.h> to minimize the number of includes needed by typical component code. Non-typical code may need to add the following:
New driver interfaces
  • RangerArray (Mikel Astiz)
    • Interface for arrays of range sensors, e.g. sonar rings.
New drivers
  • RangerArrayFake, RangerArrayPlayerSonarClient (Mikel Astiz)
  • PathPlanner2dFake (alexm)
New component interfaces
  • RangerArray (Mikel Astiz)
  • BinarySwitch (AlexB)
New components
  • RangerArray (Mikel Astiz)
  • FaithLocaliser3d (AlexB)
New utilities
  • SnapShotLogger (AlexB)
    • Logs data and configurations from interfaces when triggered
  • DelayMon (alex m)
    • A simple utility for recording histograms of delays between consecutive messages.
New libraries
  • libOrcaSystemStatusUtil
    • wraps up tricky functionality of maintaining remote status of a component. Used in SystemStatus. (alexm)
Updated driver interfaces
Updated drivers
  • SegwayRmpAcfr
    • removed unnecessary dependency between CAN and USB drivers. (alexm)
Updated non-framework utilities
Updated non-framework libraries
  • libHydroIceUtil
    • Job class: implements gbxutilacfr::Stoppable interface. No change required in existing code.
    • JobQueue: added to toString() function to get current contents of the queue.
    • LocalStatus class: added component-wide tolerance to subsystem heartbeat delays. This change is promted by long-operations of non-RT OS's, e.g. Linux.
  • libHydroQGuiPath
    • Improved abstract ipathinput and ipathuserinteraction interfaces (tobi)
    • Fixed rare segfaults related to shortcut keys and mouse events (tobi)
    • Changed the way paths are saved from user input (tobi)
  • libHydroUtil
    • using new History API.
    • class LocalHistory works with components which are not shutdown properly.
Updated component interfaces
  • Status
    • new classes to support the taks of keeping history of status changes. (alexm)
  • SystemStatus
    • redefined relationships between the communicated status information and the estimated component status. (alexm)
  • Power
    • renamed BatteriesData structure to a more standard BatteryDataSeq. (alexm)
Updated components
  • SystemStatus
    • refactored status-maintenance code into libSystemStatusUtil (alexm)
  • TracerMon
    • This component was broken by the big changes which converted Tracer interface to an Admin facet. Fixed by making it connect to the admin facet. (alexm)
  • PixMapLoader, OgMapLoader
    • fixed leading to brief unavailability of data on startup (alexm)
Updated utilities
  • PureIce example
    • bugfix patch from Alberto Liu
  • RegistryClean
    • renamed from CleanRegistry.
    • user feedback is more responsive when pinging home objects.
    • fixed bug with expiring session.
    • now using libOrcaIceGrid.
  • RegistryList
    • the pinging process can be interrupted by Ctrl-C
  • Probe
    • Browser now checks return code of loadOperationEvent() and quits with debugging info when an interface probe fails to load an operation.
  • SliceToOrca
    • Added --depend option to generate dependency information.
    • Added implementation of meta information, i.e. pre-processor directives which are specific to slice2orca. Currently implemented directives include:
      • ["slice2orca:string:degrees"] -- instructs autogenerated toString() functions to convert the marked value to degrees (from radians). See for an example.
      • ["slice2orca:string:custom"] -- instructs autogenerated toString() functions to use a custom, human-written toCustomString() instead of the autogenerated code. See for an example.
  • OrcaView2d
    • Got rid of "detail", API to create GuiElements is simplified (tobi)
    • Guielements can now add widgets to the bottom right of the worldview (tobi)
    • main window position and size are now stored and restored.
  • LogRecorder
    • Fixed bug causing segfault on shutdown (alexm)
Updated libraries
  • libOrcaQGuiElementUtil
    • added icestormguielement class which does not get the painter as a template argument (tobi)
    • restructured and renamed icestormguielement2d (tobi)
  • libOrcaView2dFactory
    • support for RangerArray (Mikel Astiz)
    • pathfollower and pathplannerelement: changed the way paths are saved from user input (tobi)
    • fixed rare segfaults related to mouse events and shortcut keys for pathfollower/pathplanner elements (tobi)
    • improved pathfollowerinput according to changes in hydroqguipath::ipathinput (tobi)
    • added a velocitycontrol2d element to teleoperate a robot (tobi)
  • libOrcaIce
    • SubsystemThread class: does not derive from SubstatusThread, does not expose walk() function to prevent un-intended use (alexm)
    • SubstatusThread class: is no longer use and was removed.
    • SubsystemThread class: uses a new light-weight SubHealth class to provide access to health functions of status only. The function related to the state machine, initialise(), work(), finalise(), are handled by the internal implementation of the subsystem state machine and are not exposed. For non-standard usage, they are still available through context_.status(). Changes for satelite projects (in all threads derived from SubsystemThread):
      • subStatus().ok() --> health().ok()
      • subStatus().warning() --> health().warning()
      • subStatus().fault() --> health().fault()
      • subStatus().setMaxHeartbeatInterval() --> setMaxHeartbeatInterval()
      • subStatus().setSubsystemType() --> setSubsystemType()
    • all multi-try functions: redefined in terms of the new light interface class gbxutilacfr::Stoppable. No change in satellite code are requried. (alexm)
    • all multi-try functions report status warnings where in the past only tracer warnings were generated. (alexm)
    • IceStorm-related functions: better feedback on exceptions.
    • Component class: the default proxy to IceStorm/TopicManager now has an 8 sec timeout (used to be infinite before).
    • Component class: added a configuration option for automatically activating the component's adapter from the internal thread. All satellite projects should remove manual activation from their code, i.e. calls to Component::activate(), Context::activate(), and orcaice::activate() function. If these calls are not removed, the components will still work but they would be redundant and confusing. If you want to keep manual activation, supply orcaice::Component with the following 3rd initialization parameter: orcaice::AdapterManualActivation.
    • connectutils/multiconnectutils: added getDescriptionWithTag functions (alex b)
    • fixed bug which prevented custom override of Admin endpoints (alexm)
    • Default value for the Orca.Tracer.Filename property is now component-specific: <component-name>_trace.txt (alexm)
  • libOrcaIfaceImpl
    • all multi-try functions: redefined in terms of the new light interface class gbxutilacfr::Stoppable. Similar changes in satelite projects are recommended but are not required. (alexm)
    • all *Impl templates: simplified by internally defining the Proxy types; i.e. only ProviderType and ConsumerType need to be specified, the templates figures out ProviderPrxType and ConsumerPrxType. (alexm)
  • libOrcaObjects
    • broke up header files into those corresponding to individual interfaces. Changes required: instead of including orcaobj.h, stringutils.h, etc., include a file corresponding to the interface file you are using, e.g.
      #include <orcaobj/rangescanner2d.h>
    • moved all frame-related functions from frameutils.h to the following file:
      #include <orcaobj/bros1.h>
  • libOrcaView3d & libOrcaView3dFactory (AlexB)
    • Cleaned out some bugs, added some tests.
  • libOrcaLog and libOrcaLogFactory
    • auto- and snapshot loggers now use standard ConsumerImpl class. (alexm)
    • added a line break between logs of diff objects in 'asciigenerated' format. comapatible with existing logs. (alexm)
  • libOrcaCompModel -Registry information is now sorted alphabetically.

Changes in Release 2.13.0

Project wide
  • Build system
    • Made searching for Ice and IceUtil more robust.
    • Simplified the task of switching to static libraries in Windows. GBX_ADD_LIBRARY is now called with DEFAULT flag which resolves to the new GBX_DEFAULT_LIB_TYPE variable.
  • Documentation
    • Updated the Quick-start Guide by adding a sorely missing bit on how to connect components over the network.
New driver interfaces
  • MultiImage (tom)
    • Abstract class for an multiimage source.
  • ImageConverter (tom)
    • Abstract class for a imageconverter source.
  • Disparity (tom)
    • Abstract class for a stereo image correspondance, or disparity, source.
New drivers
  • ImageConverterBayer (tom)
  • ImageCvCamera (tom)
    • OpenCV camera driver
  • ImageDc1394 (tom)
    • libdc1394-2 image driver
  • ImageFake (tom)
    • Bogus image driver, useful for testing the rest of the component.
  • DisparitySimple (tom)
    • An extremely simple, error prone, but fast with the right video card, stereo correspondance driver.
New non-framework utilities
  • listcameras (tom)
    • list all firewire cameras and their associated information using libdc1394 v2
New component interfaces
  • SystemStatus (tobi)
    • provides the status of a whole system consisting of a bunch of components
    • see the new SystemStatus component below which implements the interface
New components
  • Disparity (tom)
    • stereo image correlation component
  • SystemStatus (tobi)
    • provides a system-level overview of components' status, adds observed states and health
  • SystemStatusMon (tobi)
    • reads from SystemStatus and displays in different formats
New utilities
  • slice2util (alexm)
    • generates toString() as well as logging functions. More code generation will be added in the future.
New libraries
  • orcaifacelog
    • autogenerated log/replace functions for all Orca Slice data types.
  • orcaifaceutil
    • autogenerated utility functions for all Orca Slice data types, including toString() functions.
Updated drivers
  • LaserScanner2dPlayerClient (tobi)
  • Robot2dPlayerClient (tobi)
    • made the usage of the Player timestamp configurable
  • PathPlanner2dAcfr (alexb)
Updated non-framework libraries


  • EventQueueHolder class: renamed convenience function postEvent(int) to postEventWithType(int) because it was succeptible to inheritance hiding. (alexm)
  • JobQueue class: when warning about the queue size also provides information about the last added job. (alexm)
  • JobQueue class: can now detect when a job is stalled and optionally trace a warning. For this to work jobs need to report their expected run time. (alexm)
Updated component interfaces
  • all existing interfaces
    • removed cpp:const directive from idempotent methods. This was a leftover from the old days with 'nonmutating' keyword. Clients did not need any changes. Servers required the removal of 'const' qualifier in interface implementations (alexm)
  • all interfaces with publish/subscribe functionality
    • new subscription pattern: call subscribe() to subscribe yourself and get the topic proxy. To unsubscribe, talk directly to the topic. This done for more robust unsubscription, possibly after the server component is already down.
  • Status
    • added component-level states/health (tobi)
  • Image
    • uses string to define format instead of an enum
  • Camera
    • data types derive from ones found in the Image interface
  • MultiCamera
    • Composed as a set of CameraData objects
  • Home
    • removed getProperties() because the same functionality is now available through the Proprerties facet of the standard Admin interface. (alexm)
    • removed getTimeUp() and timeUp from HomeData because Status provides this information. (alexm)
  • Tracer
    • TracerData: string 'category' changed to an enum with common trace types. Initially we thought we would need flexibility in trace type definitions, we don't see any need for this now.
    • Removed unused methods for (un)subscribing for platform summaries. This functionality is now in Status.
Updated components
  • LocalNav
    • checking timestamps discrepancies is optional now (tobi)
  • all components
    • all components which subscribe to remote interfaces now attempt to unsubscribe before stopping. (alexm)
    • all components catch exeptions in a consise and standardised manner using new orcaice:: functions. (alexm)
    • converted to new Subsystem implementation. (alexm)
    • all components quit cleaner when stopped during unsuccessful initialization (alexm)
  • pathplanner
    • Shoveled a lot of ugly code out into hydro. Now makes use of a hydro driver, loaded dynamically. (alexb)
  • Gps2Localise2d
    • fixed rare bug which lead to assertion failure when the component is stopped shortly after starting (alexm)
  • FaithLocaliser
    • converted to new Subsystem implementations (tobi)
  • SegwayRMP
    • Now respects (ac/de)celeration limits.
Updated utilities
  • Probe
    • Added an option to trace progress when pinging components on a particular platform. (alexm)
    • Operations can now be added but flagged as unsupported. (alexm)
Updated libraries
  • libOrcaIce
    • Removed IceApplication, using Ice::Application directly.
    • Application class
      • stops component before shutting down the Communicator. This means that the component has a chance to unsubscribe or perform other remote operations before stopping. (alexm)
      • added new property Orca.Application.CallbackOnInterrupt with default 1. This is an advanced setting. Default is good for most situations. Setting it to 0 will result in communicator shutdown on interrupt. (alexm)
      • streamlined property handling process. (alexm)
    • Component class
      • removed a rarely used interfaceFlag() function. Functionality replaced with setting properties: Orca.Component.EnableXXX, where XXX are the names of standard interfaces (Home, Status, Tracer).
      • stop() now has a default (empty) implementation. No change to existing code is required. (alexm)
      • activate() now calls Context::activate() (alexm)
    • Context class
      • moved the code for Adapter activation from Component to cut dependency. No change to existing code is required. (alexm)
    • new functions for catching exceptions in a consise and standardised manner from inside components. (alexm)
    • status-related classes are updated for new SubsystemStatus representation. (alexm)
    • new class Subsystem which encodes a simple state machine Idle->Initialising->Working->Finalising->Shutdown (with an extra transition Initialising->Finalising) (alexm)
    • major overhaul of standard interface implementations: Status, Tracer, and Home. The old implementations were clunky and succeptible to rare but real distributed deadlock conditions. No changes to public interfaces. (alexm)
    • fixed bug in getInterfaceIdWithString() which prevented teleop from connecting to components on other hosts (alexm)
  • libOrcaObjectUtil
    • moved waypoint/path ASCII logging functions from logfactory to here (tobi)
  • libOrcaLogFactory
    • added logging to ascii for PolarFeature2d (tobi)
    • added matlab scripts to read ascii files for PolarFeature2d and LaserScanner2d (tobi)
  • libOrcaIfaceImpl
    • a lot of redundant code removed by using templates
    • new headers similar to the autogenerated libs: e.g. to use any Impl related to Odometry2d interface (server or consumer) include <orcaifaceimpl/odometry2d.h>
  • slice2string and slice2log are combined into one new utility: slice2util
  • systemtracermon: used to display aggregated traces from platforms. This functionality is now in Status interface and the new SystemStatus component.

Changes in Release 2.12.0

New drivers
  • HydroHokuyoAist
    • Wrapper around the re-written and renamed Hokuyo driver from Gearbox. (michael m.)
New non-framework libraries
  • libHydroQGuiPath
  • libHydroRmpUtil
New components
  • OrcaView3d
    • Complete re-write, basic functionality now works. (alex b)
New libraries
  • libOrcaTeleop
    • refactored Teleop functionality into a library for reuse in GUI's (tobi)
Updated drivers
  • HydroSegwayRmpFake, HydroLaserScanner2dFake
    • Simulated data rate is now configurable. Default values remained unchanged: 1Hz for segway and 10Hz for laser. (alexm)
Updated non-framework libraries
  • libHydroQGui
    • ZoomWidget: removed an arbitrary limit to zoom-in and zoom-out factors. (alexm)
    • ZoomWidget: fixed bug with recentering view when scaling (alexm)
    • WorldView widget now display XY position of the mouse (alexm)
  • libHydroQGuiPath
    • added button for enabling/disabling the path follower (alexm)
  • libHydroIceUtil
    • Jobs in the JobQueue are now individually tracable (alexm)
Updated component interfaces
  • VehicleDescription (alexb)
    • Removed 'platformToVehicleTransform', renamed 'vehicleToGeometryTransform' -> 'platformToGeometryTransform'
      • (note: this invalidates old log files)
Updated components
  • PathPlanner
    • Fixed long-standing segfault on shutdown (alexm)
  • Gps2Localise2d
    • Added a bunch of (configurable) heuristics to discard faulty records (tobi)
  • LocalNav
    • When PathFollower2d interface becomes disabled the component now sends a zero-velocity command (once). This is done for safety. (alexm)
Updated utilities
  • RegistryView
    • Toggling display of standard interfaces also affects Tracer interface (alexm)
  • Probe
    • Fixed segfault when providing incorrect platform selection (alexm)
Updated libraries
  • libOrcaTeleop
    • added event optimization to mixed command, reducing delays in command propagation through the event queue. (alexm)
  • libOrcaQGui2dFactory
    • painted width of walls and return points in LaserScanner2dPainter is now zoom-independent. (alexm)
  • libOrcaIfaceString
    • added documentation.

Changes in Release 2.11.0

Project wide
  • Updated dart2 documentation to cdash (tobi)
  • Dependencies
    • works with Ice-3.3 (continues to work with Ice-3.2)
  • Build system
    • Big cleanup of CMake scripts for generating interface code.
    • cmake files updated for cmake 2.6
  • Compiler
    • compiles cleanly with gcc43, tested nightly and continuously (tobi)
New drivers
  • GpsGarminGbx
    • a thin wrapper for the actual Garmin driver which moved from Hydro to Gearbox.
New non-framework libraries
  • libHydroQGuiPath (tobi)
    • Library for gui path representation and input
  • libHydroSim2d (alex b)
    • Library for simple 2D simulations
New utilities
  • slice2string (alex m)
    • utility for generating string functions from Slice definitions.
  • LogReplayer
    • renamed from Logger to avoid conflicts with shell logger command.
New libraries
  • OrcaTeleop (tobi)
    • Moved files from teleop component directory
  • OrcaSim2d (alex b)
    • Library for simple 2D simulations
  • OrcaVfh (alex b)
    • moved out of lovalnav directory
  • OrcaIfaceString (alex m)
    • This library is autogenerated from Slice defenitions (.ice files). It contains string utilities for Slice data types (enums, structures, classes).
Updated non-framework libraries
  • HydroIceUtil
    • In the EventLoop class fixed a bug which caused error messages from clearing (alex m)
    • EventLoop::postEvent() added an option to supply a string to the event which will help identify where the event came from in case it's not handled properly (alex m)
    • In EventScheduler class fixed bug which led to mutex lockup on recursive scheduling. (alex m)
    • Fixed a number of bugs in LocalStatus which prevented properly reporting changes in status. Update is published when subsystems are added and removed. (alex m)
Updated component interfaces
  • Image, OgPatch, OgMap, RangeScanner2d, LaserScanner2d, QGraphics2d, Hand, PointCloud.
    • Using newly defined 'standard' sequences of builtin types (defined in
  • RangeScanner2d, OgPatch, Hand
    • Not deriving from depricated OrcaObject class. The affected classes define its own time stamp.
  • a global header file is auto-generated which includes all individual interface header files.
Updated components
  • LocalNav (alex b)
    • Big overhaul and simplification
  • Gps
    • Not messing with gps data in case of no fix. just publishing what the driver provided. (alex m)
  • SegwayRmp
    • removed obsolete config parameter ProvideOdometry3d. Use Odometry3dPublishInterval instead.
Updated libraries


  • big overhaul of user interaction with pathfollower/planner (tobi)
  • created a factory for path input (tobi)


  • Added QGraphics2dImpl and PathFollower2dImpl (alex b)
  • ConsumerImpl: fixed a long-standing bug which lead to segfault when the life of the consumer was shorter than the life of the Object Adapter. (alex m)


  • fixed bug which could lead to uncaught exception under certain conditions when setting observers. (alexm)


  • subscribers to component's Status interface get current status on subscription (alex m)
  • fixed bug which could lead to uncaught exception under certain conditions during component initialization. (alexm)
  • fixed bug which could lead to unjustified status fault under certain conditions during component shutdown. (alexm)
  • brought SubsystemThread back from gearbox and made it aware of component deactivation, i.e. status fault is not reported when ComponentDeactivatingException is caught.
  • added function Context::isDeactivating() to check if the component is deactivating.


  • implementation cleanup using ConsumerImpl (alex m)
  • IceGridMon utility because the standard IceGrid GUI is very good.
  • Logger utility was renamed to LogReplayer to avoid conflicts with shell logger command.
  • GpsGarmin device driver. Moved to GearBox. Added new driver wrapper called GpsGarminGbx.

Changes in Release 2.10.0

Project wide
  • Build system
    • GearBox distribution is now required to build Orca. Orca uses Gearbox cmake scripts.
    • Default installation directories follow GearBox standard (/usr/local).
    • Renamed all local cmake variables to low case. The names of all CMake macros defined in Orca now start with "ORCA_" (alex m)
    • Added autogenerated linking tests to all dynamically loadable drivers. (alex m)
  • Documentation
    • Cleaned up and shortened the programming style guide.
New driver interfaces
  • Gps
    • Access to GPS devices.
  • LaserFeatureExtractor
    • Extracts features from scans
New drivers
  • GpsFake, GpsGarmin
    • Ported from Orca.
  • LaserFeatureExtractorCombined
    • Ported from Orca.
New non-framework libraries
  • libHydroFeatureObs (alex b)
    • Library for representing features (eg features extracted for SLAM purposes).
  • libHydroLaserFeatureExtract (alex b)
    • Library for extracting features from laser scans.
    • Almost-complete rewrite from Orca version.
New utilities
  • SnapshotLogger (alex b)
    • Logs a small window (in time) of information when triggered.
Updated non-framework libraries
  • libHydroUtil
    • Much stricter parsing of properties. Throwing exceptions whenever parsing fails (to int and double, vectors of ints and doubles). Fails when characters trail a numeric value. This applies to '.' as meaning that parsing fails when a double is given in place of an int. Comments are allowed to trail values. (alex m)
    • Properties API. Added function isDefined(key). (alex m)
  • libHydroIceUtil
    • JobQueue reports number of active jobs. (alex m)
    • New class EventLoop which is a specialization of JobQueue for dispatching events to recievers. Includes a built-in registry of reciever ID's. (alex m)
Updated component interfaces
  • PolarFeature2d (alex b)
    • Added 'description' which includes the sensor offset.
Updated components
  • Gps
    • Big clean up of the component. All driver functionality moved to Hydro. (alex m)
  • PathPlanner
    • Big cleanup of the component. Conversion from output of algorithm to orca path improved. (alex b)
  • LaserFeatureExtractor
    • Moved all the algorithms out to hydro (alex b)
    • Made an important functional change: the component no longer does coordinate transformations. The interface now reports the sensor's offset, leaving it up to clients to do the transformation. This gives more flexibility, eg clients can transform the uncertainty correctly if they want to. (alex b)
    • General overhaul and cleanup (alex b)
Updated utilities
  • Orcaview2d (tobi)
    • Elements in config file can have an arbitrary string, no consecutive numbers required any more
    • Grid element does not need to be configured any more
    • Fixed bug: multiple deletions of QObjects in component.cpp
    • General cleanup
Updated libraries
  • libOrcaIce
    • Component API: removed now rarely used shortcuts to the contents of Context.
    • Much stricter parsing of properties. No changes in API. Throwing exceptions whenever parsing fails (to int and double, vectors of ints and doubles). Fails when characters trail a numeric value. This applies to '.' meaning that parsing fails when a double is given in place of an int. Comments are allowed to trail values. (alex m)
  • libOrcaProbeFactory
    • Added button probe (alex b)
  • libOrcaIceGrid
    • New function IceGridSession::setObservers() allows delayed observer initialization. (alexm)
  • Imu component
  • InsGps component (the old version, a complete re-write is currently in the repository).

Changes in Release 2.9.0

Project wide
  • Build system
    • Better cmake feedback when modules cannot be built. (alex m)
    • Added modular input of license information (with GLOBAL_ADD_LICENSE macro). (alex m)
    • Updated style of checking module dependencies, for both components and libraries. Better cmake feedback when a component cannot be built. (alex m)
    • Component containers (Application and Service) are now auto-generated by the build-system (using WRAP_COMPONENT_INTO_APP and WRAP_COMPONENT_INTO_SERVICE cmake macros). This means that for "standard" component there's no need to write main.cpp and service.h/cpp by hand. (alex m)
    • Component itself can also be autogenerated (using WRAP_MAINTHREAD_INTO_APP and WRAP_MAINTHREAD_INTO_SERVICE cmake macros). For "standard" components, this eliminates the need for writing component.h/cpp by hand (alex m)
    • Added modular input of license information (with GLOBAL_ADD_LICENSE macro). (alex m)
  • Source
    • Global change to the updated API's of orcaice::Context.
    • Global change to the updated API's of hydroutil::Status and hydrointerfaces::Context.
    • Compiles with gcc-4.3
New non-framework libraries
  • HydroSerialDriver (alex b)
    • Utility classes for writing serial drivers.
  • HydroIceUtil (alex m)
    • Split off all IceUtil-dependent code from HydroUtil. This allows IceUtil-independent drivers.
    • Added EventScheduler class -- a simple inaccurate delayed dispatcher of events. (alex m)
    • Added checkedSleep(ThreadPtr) function to sleep for some time but check for stopping every once in a while. (alex m)
New component interfaces
  • Properties (alex b)
    • Hands out a set of Properties, for use in implementing a centralised properties database.
New components
  • PropertyServer (alex b)
    • Implements orca::Properties interface
      Updated driver interfaces

LaserScanner2d (alex b)

  • Allowed reporting of warnings.
Updated drivers
  • SegwayRmpAcfr
    • Fixed a couple of bugs which resulted in incorrect speeds. (alex b)
    • CAN version: tested with libpcan v. 6.5 and updated documentation. (alex m)
  • HydroPathPlan (alex b)
    • Bugfix in extra nodes for sparse skel
Updated non-framework libraries
  • libHydroUtil
    • Fixed thread-unsafe bug in LocalTracer (alex m)
    • Significant changes to JobQueue API. Results are no longer returned. Any results should be sent back to job owners through events. Polling for jobs is replaced with much more efficient blocking. (alex m)
    • Important changes to Status API. addSubsystem() must be called first. (alex m)
    • Added convinience class SubStatus integrated by SafeThread. (alex m)
    • Moved Context from libHydroInterfaces
    • Context now returns references to Tracer and Status instead of pointers (alex m)
    • Removed deprecated hydroutil::Proxy (replaced with Store) (alex b)
    • Split off all IceUtil-dependent code into libHydroIceUtil (alex m)
  • libHydroInterfaces
    • Moved Context to libHydroUtil
Updated component interfaces
  • VehicleDescription (alex b)
    • For Differential Drive robots, changed description of allowable control region. Rather than defining maxTurnrate as a linear function of speed, put a limit on the maximum lateral acceleration due to centripital force. This gives a hyperbolic relation between speed and turnrate. Better because it has a physical justification.
  • Gps (alex b)
    • Deleted deprecated 'offset' from GpsDescription.
Updated components
  • pathplanner (alex b)
    • brought closer to modern standards, implemented status.
    • implemented handling of simultaneous arrival of tasks properly
  • segwayrmp (alex b)
    • use updated vehicle description. Limit unfeasible commands in netthread, issue a warning to status when commands are limited.
  • lasermon
    • brought closer to modern standards (alex m)
  • ognode (alex b)
    • Allowed beginning with a prior map.
Updated utilities
  • Probe
    • added support for Pinger interface (alex m)
    • added support for VelocityControl2d interface (alex b)
  • IceGridMon
    • Updated implementation to modern standards. (alex m)
Updated libraries
  • libOrcaIce
    • Component standard interfaces can now be configured from the config file in addition to the programatic method used before. (alex m)
    • Context now returns references to Tracer and Status instead of pointers (alex m)
    • added conversion function to hydroutil::Context
    • better feedback on exceptions caught during component startup. no need to catch them in Component::start() just to print them out.

Removed deprecated orcaice::PtrProxy (replaced with PtrStore) (alex b)

  • Cleaned up reading of properties in orcaice::Application and orcaice::Service (alex b)
  • Added ability to read configuration parameters from network (alex b)
  • Imported toString() and getProperty*() functions related to Orca types defined in orca.h and those included from it. These came form libOrcaObjects. The rest of utility functions related to other Orca the objects stayed in libOrcaObjects and libOrcaIce no longer depens on it.
  • libOrcaObjects
    • Got its own namespace -- orcaobj. Exported toString() and getProperty*() functions related to Orca types defined in orca.h and those included from it. These came form libOrcaObjects. The rest of utility functions related to other Orca objects stayed in libOrcaObjects and libOrcaIce no longer depens on it.
  • libOrcaIceGrid
    • Rearranged all code by merging two independent implementations of IceGrid admin sessions into two classes. (alex m)
Turned Off
  • Image components and libraries are turned off by default because they do not properly check their dependencies and fail to compile under some circumstances. Hopefully they'll be fixed soon.
  • Imu component. It was never implemented properly and it's component structure was hopelessly obsolete.

Changes in Release 2.8.0

Project wide
  • java build (Jayen Ashar)
    • Dealt with the fact that gcj only handles '-classpath', not '-cp'.
  • documentation
    • orca documentation now links to hydro's (alex m)
    • new tutorial: line-by-line step-through of Brick source code. (alex m)
    • new tutorial: detailed comments on running Brick. (alex m)
  • build system
    • looking for Ice installation, first looks in generic dirs: /opt/Ice; /opt/Ice-3; /opt/Ice-3.2
    • fixed bugs in checking dependencies (alex m, alex b)
    • fixed compilation in Windows (tom b.)
New driver interfaces
  • HumanInput2d
    • Abstraction of 2D input for position or velocity control.
  • Robot2d
    • Access to a generic 2D robotic platform.
  • SegwayRmp
    • Access to Segway's RMP robotic platform.
New drivers
  • HumanInput2dJoystick
  • HumanInput2dKbdIostream
  • HumanInput2dKbdTermio
    • Implementations of HumanInput2d interface. Refactored from Orca's Teleop component. (alexm)
  • Robot2dFake
  • Robot2dPlayerClient
    • Implementations of Robot2d interface. Refactored from Orca's Robot2d component. (alexm)
  • SegwayRmpAcfr
  • SegwayRmpFake
  • SegwayRmpPlayerClient
    • Implementations of SegwayRmp interface. Refactored from Orca's SegwayRmp component. (alexm)
New non-framework utilities
  • mgaconversion
    • moved from Orca
New non-framework libraries
  • libHydroGeom2d
  • libHydroGpsUtil
  • libHydroNovatelUtil
  • libHydroOgMap
  • libHydroPathPlan
  • libHydroMapLoad
    • Moved in from Orca (alexb, alexm)
New component interfaces
  • Button (alex b)
    • A simple thing you can press remotely, with no feedback.
New libraries
  • libOrcaNavUtil (alex b)
    • Library for conversion between Orca types and HydroNavUtil types.
Updated non-framework libraries
  • libHydroUtil
    • The constructor of Properties can now take an optional string specifying the common key prefix which will be removed from all keys before insertion. (alex m)
    • bug fix: LocalTracer inits itself properly. (alex m)
    • Calls to LocalStatus are now automatically traced when status or message change (alex m)
    • SafeThread uses Tracer if one is provided. (alex m)
    • added simple time utility functions. (alex m)
  • libHydroNavUtil
    • Created Gmm: a class for representing Gaussian Mixture Models (for pose distributions) (alex b)
    • Moved Velocity in (from orcalocalnav) (alex b)
    • Removed Offset. Use Pose everywhere instead (alex b)
  • libHydroPathPlan
    • Cleaned up structure (alex b)
    • Added code to add extra nodes in SparseSkel to avoid problems when the skel is super-sparse in some areas (alex b)
Updated component interfaces
  • PolarFeature2d (alex b)
    • PolarFeature2dData was un-necessarily a class. It's now a struct.
  • FeatureMap2d (alex b)
    • FeatureMap2d was un-necessarily a class. It's now a struct.
Updated components
  • Laser2d
    • fixed bug made dynamically loaded drivers not to load configuration parameters (alex m)
    • converted source code to modern style (alex m)
  • LogPlayer
    • Implemented interactive interface which allows pausing/fast-forwarding/rewinding/etc during log playing (alex b)
  • Robot2d/SegwayRMP
    • simplified and improved common code (alex b)
  • Robot2d
    • moved hardware drivers to Hydro (alex m)
    • converted source code to modern style (alex m)
  • SegwayRMP
    • big overhaul of SegwayRmpDriver (alex b)
    • Added interpretation of pct remaining for CU batteries (alex b)
    • moved hardware drivers to Hydro (alex m)
    • converted source code to modern style (alex m)
  • GoalPlanner
    • Added functionality to re-plan when something goes awry (alex b)
  • Teleop
    • moved hardware drivers to Hydro (alex m)
  • PathPlanner
    • Got rid of that hazardMap malarky -- now only accepts an OG map (alex b)
  • FaithLocaliser, Gps, LaserFeatureExtractor
    • converted source code to modern style (alex m)
Updated utilities
  • Pinger/Replier
    • These utilities for measuring communication latencies are working again (alex m)
  • IcePing
    • Added command line shortcut '-s' for pinging IceStorm (specifically its TopicManager interface). (alex m)
    • Fixed seg fault with '-f' option when file name is not specified. (alex m)
    • Updated documentation. (alex m)
Updated libraries
  • libOrcaIce
    • fixed bug which made Tracer and Status not to load configuration parameters (alex m)
    • all multi-try functions now accept an optional parameter specifying the name of the subsystem. if this name is provided, Status heartbeat is sent at every attempt. (alex m)
  • libOrcaLog
    • Changes for interactive log-playing (alex b)
  • libOrcaLocalNav
    • Moved Velocity/Acceleration out into hydronavutil (alex b)
  • libOrcaIfaceImpl
    • Fixed bug where interfaces were not removed from the adapter correctly (alex b)
    • Added NotifyingConsumer types (alex b)
  • libOrcaDef
    • changed 'orca2' to 'orca' in executable path in generated .xml files (alex m, thanks duncan m.)
  • libOrcaOgMap
    • Moved the guts out to Hydro. This is now just a set of conversion functions (alex b).
  • libOrcaPathPlan
    • Moved the guts out to Hydro. This is now just a set of conversion functions (alex b).
  • libOrcaMapLoad
    • Moved out to Hydro (alex b).
  • mgaconversion
  • libHydroGeom2d
  • libHydroGpsUtil
  • libHydroNovatelUtil
  • libHydroOgMap
  • libHydroPathPlan
  • libHydroMapLoad
    • Moved to Hydro (alexb, alexm)

Changes in Release 2.7.0

Project wide
  • Moved from CVS to SVN version control system.
  • Created a separate distribution called Hydro for communication-independent code (e.g. hardware drivers and algorithm implementations). Hydro only requires CMake to compile (but is more useful with libIceUtil). Orca requires CMake, Hydro, and Ice.
  • Added a new keyword for writing .def files. A single line which starts with 'ExternalConfig.*' replaces 2 lines: 'Config.*' + 'Config.*.External=1'. The old syntax is deprecated but will be supported for a while. All .def files in Orca have been updated. (alexm)
  • Documentation
    • New tutorial: "Closed-loop control of a robot simulated with Player/Stage"
  • Build system
    • only one XML file is now generated from .def file instead of two before (it contains the xml template)
New non-framework libraries and utilities
  • Code refactored from Orca.
  • libHydroUtil was refactored from libOrcaIce
    • a set of tools which depends only on libIceUtil (and general c++). Specifically, contains nothing related to communications. See notes on libOrcaIce. (alex m)
    • added new utility class JobQueue for spinning off long-term tasks into a different thread. (alex b)
    • added new function substitute() to string utilities. It substitutes parameters in the form ${parameter}. (alex m)
    • added new function executeSystemCommand() a wrapper for Linux popen(). (alex b)
New libraries
  • libOrcaIceXml (alex m.)
    • Tools useful for XML parsing. Current contents were extracted from IceGrid code.
New examples
  • Brick (alex m)
    • moved from tests and cleaned up. It's very simple and makes a good first example.
  • ReactiveWalker (alex m)
    • resurrected from the sandbox. It's a robot controller similar to Player's randomwalk.
Updated component interfaces
  • Gps (alex b)
    • removed GpsMapGrid and GpsTime interfaces.
Updated components
  • SegwayRmpUsb
    • Added correction for the curve which the Segway applies to the commanded turn rate. This is a big improvement, but it's still not 100% right (it's not clear if the MAX_TURNRATE_SCALE is applied internally as well). (alexb, alexm)
  • Laser2d
    • Moved all 4 drivers to hydro.
Updated utilities
  • Orcaview2d
    • big overhaul of how paths are stored internally and to files (Tobi)
    • olympic marker is configurable (Tobi)
    • overhaul of paint utils: independence of transformation matrices (Tobi)
Updated libraries
  • libOrcaWifi (Tobi)
    • removed dependence on orca enums before moving to hydro
  • libOrcaIce
    • split some of the contents into a new libOrcaIceUtil library. This is done in preparation for decoupling of Ice-dependent components and libs from Ice-independent drivers and algorithm implementations. libOrcaIce depends on libOrcaIceUtil. (alex m.)
    • added function isInterfaceReachable() (alex m.)
    • all multi-try connection functions now have an optional retryNumber parameter. default is -1, i.e. infinite -- same as before. therefore, no changes in existing code are needed. (alex m)
    • renamed function getProvidedTopic() into getProvidedTopicWithTag() and added getProvidedTopicWitString(). These were mostly used internally by libOrcaIce and other utilities. (alex m)
  • libOrcaMisc
    • moved Activator to libOrcaIce
  • libOrcaDef
    • Added new keyword 'ExternalConfig' (see Project Wide changes above). Fixed bugs in tests. (alexm)
  • libOrcaObjects
    • moved general string functions toStringSeq() and toString(vector<string>) to libOrcaIceUtil
    • moved math defenitions to libOrcaIceUtil
  • libOrcaIceGrid
    • added a new session manager with can control the IceGrid registry through its Admin interface. (alex b)
  • libOrcaDynamicLoad
    • split up include file into parts for more modular inclusions. added explicit dependence on libdl (which before was included somehow through libIce). added tests which can also server as examples. (alex m)
  • libOrcaIfaceImpl
    • the two multi-try subscribe functions now have an optional retryNumber parameter. default is -1, i.e. infinite -- same as before. therefore, no changes in existing code are needed. (alex m)
    • Added constructors that don't rely on a tag but rather take the interface name directly as a string (alex b)
  • libOrcaLog/libOrcaLogFactory
    • Huge overhaul of how logging/replaying is done. Note: This is solely an implementation change: log file formats remain the same (and old logs will still play) (alex b)
  • OrcaSmc utility (alex m)

Changes in Release 2.6.0

Project wide
  • Build system
    • Modularized cmake scripts which contain dependencies and build preferences. This will allow reduce the number of unintended dependencies.
    • Added experimental support for Python. (ben u.)
    • Stopped using convenience libraries because they were problematic on 64bit systems. (alex m)
    • Fixed CMake bug with ORCA_MOTHERSHIP, it was unusalbe in satellite projects. (thanks John Yamokoski)
    • Added project-wide access to Orca installation directory by adding -DCMAKE_INSTALL_PREFIX (Tobi)
New component interfaces
  • Pinger (alex b)
    • Interface for requesting that a host be 'ping'ed.
New components
  • ImageServer
    • fixed bug in figuring out dependencies: opencv installed but low-level libs are not. (alex m)
  • PingServer
    • Simple component which will execute 'ping' and report the results when asked over a slice interface. (alex b)
New utilities
  • Wall (alex m)
    • Simulates Orca interfaces. Use it during component development and debugging to easily create 'fake' implementations of standard interfaces. Then plug your component into 'the wall'.
New libraries
  • libBros1 (alex m)
    • C++ implementation of the proposed BROS-I standard.
  • libOrcaBros1 (alex m)
    • utility library to convert between BROS-I data structures defined in Slice ( and in C++ (
  • libOrcaWall and libOrcaWallFactory (alex m)
    • Dynamically loadable implementation of the interface simulators used by the Wall utility.
  • libOrcaPing (alex b)
    • C++ Wrapper for the 'oping' library: a C library for executing the 'ping' command.
  • libOrcaLockFile (alex b)
    • Pulled code for creating lockfiles (for ensuring unique access to resources) out of libOrcaSerial and into separate lib, to allow use elsewhere.
New examples
  • PureIcePython (ben u.)
    • Example of Orca component in Python.
Updated component interfaces
  • Localise2d
    • added getGeometry() which describes the geometry of the localised robot (Tobi)
Updated components
  • LaserFeatureExtractor (alex b)
    • Improved Corner and ForegroundPoint detectors.
  • Laser2d (alex b)
    • Added SickAcfr driver library.
  • Gps2Localise2d, FaithLocaliser, SimLocaliser
    • get vehicle description from odometry interface and relay to localise2d (Tobi)
  • OgNode/Laser2Og (alex b)
    • big cleanup. fixed problem where skinny objects are missed.
  • robot2d/segwayrmp (alex b)
    • factored out common code into orcarobotdriverutil library.
    • cleaned up robot2d, so exceptions are handled better.
    • fixed threading problem in robot2d which could cause the Ice thread to hang.
  • gps (Duncan Mercer)
    • Added support for Garmin GPS units.
    • General cleanup, which broke the old Ashtech driver.
Updated utilities
  • Orcaview2d
    • LocaliseElement gets VehicleGeometryDescription and draws robot properly (Tobi)
    • Lookup table (hazardmap) is installed and accessed from there (Tobi)
    • Hazard map by itself is displayed properly (Tobi)
    • WifiElement: Windows-like interpretation of signal strength is displayed (Tobi)
Updated libraries
  • libOrcaWifi
    • bug fixes for signal strength (Tobi)
    • status reports warnings when signal strength is low (Tobi)
  • libOrcaNavUtil
    • added convenience functions for transformations between poses (alex b)
  • libOrcaIce
    • added getPropertyAsIntVector/WithDefault() and getPropertyAsDoubleVector/WithDefault() which loads ints and doubles respectively separated by spaces from a cfg file into vector<int> and vector<double> resp. (ben u)
    • added multi-try versions of getInterfaceIdWithString() and getInterfaceIdWithTag() functions. (alex m)
    • changed API for Thread class. isActive() is depricated, isStopping() should be used instead. added isStarted(). The implicit state machine is explained in the documentation. (alex m)
    • added a specialized thread class SafeThread which defines a new entry point called walk() and catches all possible exceptions around it. (alex m)
    • Buffer and PtrBuffer classes now require explicit configuration (depth and buffer type). The latest defaults (infinite depth, circular type) were used at the point of instantiation. (alex m)
    • Renamed Proxy storage class into (hopefully less confusing) Store. Proxy still exists but is depricated.
  • libOrcaImage
    • added support for Image interface in image conversion functions. (alex m)
  • libOrcaObjects
    • added functions to parse a sequence of int's and double's into an std::vector. (ben u)
    • added support for Image interface. (alex m)
    • mathdefs.h: changed CHECK_LIMITS to CLIP_TO_LIMITS. (alex b)
  • libOrcaProbeFactory
    • added support for Image interface. (alex m)
  • libOrcaQGui2d
    • PixMap gets repainted if its offset has changed (ben u)
  • libOrcaLogFactory
    • added replayer for DriveBicycle interface (ben u)
    • fixed bug which led to unbounded growth in internal buffer sizes in all replayers (michael m)
  • libOrcaOgMap (alex b)
    • use doubles instead of floats to represent world coords
    • map orcaogmap::OgMap a specific instance of the more general orcaogmap::GenericMap
  • libOrcaIfaceImpl
    • added fully-featured Consumer implementations which can subscribe themselves, including multi-try versions. Name cleaning up so that Impl classes of consumer and 'provider' interfaces have similar names and API. (alex m)

Changes in Release 2.5.0

Project wide
  • Build system: changed the order of places where we search for Ice. The new order is this:
    • specified by env. var. $ICE_HOME
    • Debian package install point: /usr/
    • standard Ice istall point: /opt/Ice-[VERSION]
    • possible install point when built from source: /usr/local This change simplifies switching between source and package Ice installs. Common situations with outcomes:
    • source install w/env.var -> source install
    • package -> package
    • package + source install w/env.var -> source install
    • package + source install w/out env.var -> package
  • Build system
    • fixed bug which prevented distrib. compilation in external projects (alexm)
  • Documentation
    • added tutorial with simple robot teleop in stage
    • added tutorial on logging interface data in text format
New component interfaces
  • Image (alexm)
    • Represents an image source. It is similar to PixMap and Camera. Unlike the other two its defines its main data object as a class.
New components
New utilities
New libraries
  • libOrcaColourText (alexb, alexm)
    • Simple text colours on the Linux terminal, using escape-codes.
New examples
  • Orca2Yarp (alex m.)
    • A simple component which connects to both Orca and Yarp systems.
  • Player2Orca (alex m.)
    • A simple component which connects to both Player and Orca systems.
Updated component interfaces
  • DriveBicycle (alex m.)
    • provides information on the current state of the actuators (speed and steer angle).
  • Gps (michael m.)
    • added Novatel-specific position types.
  • Localise2d (tobi)
    • got rid of getDataAtTime which was not implemented
Updated components
  • FaithLocaliser (tobi)
    • complete overhaul
    • got rid off storing history and interpolation
  • Wifi (tobi)
    • reading using ioctl only attempted once
    • bug fix with open sockets
  • GoalPlanner (tobi)
    • new config parameter: velocity to reach first waypoint
    • figures out the timing to the first wp and changes subsequent times accordingly
    • localisation data is obtained using getData rather than through Icestorm
  • PathPlanner (tobi)
    • policy for adding timing to waypoints changed: distances are taken into account
  • Imu (ben u.)
    • Added configurable offset between the IMU sensor and the platform.
  • SegwayRmp
    • Internal source cleanup. Not using orca:: structures internally. (alex m)
    • Added Peak CAN interface (Duncan Mercer)
  • Robot2d
    • Internal source cleanup. Not using orca:: structures internally. (alex m)
  • LocalNav
    • Catch exceptions properly on driver initialisation. (alex b)
  • Laser2d (alex b)
    • Simplified interaction between component code and driver code.
    • Allowed dynamically-loaded drivers from libraries outside the orca2 distribution.
    • remove SickAcfr (QNX implementation no longer compatible with OrcaSerial)
Updated utilities
  • Name change: sysmon -> systemtracermon (alex b)
  • OrcaView2d (tobi)
    • olympic marker displays properly
    • more shortcuts for path input added
    • improved display of table in main window
  • Probe: added support for wifi interface (alex b)
Updated libraries
  • libOrcaObjects
    • Bugfixes to 3D transformations in orcaobj/frameutils.cpp (Will Uther)
    • added toIntVector() and toDoubleVector() which parses a string of ints/doubles separated by spaces. (ben u)
  • libOrcaDef
    • fixed bug in XML generation: 'external' tag for config was ignored (alexm)
  • libOrcaIce
    • added two config properties with the following defaults: Orca.Warn.DefaultProperty=1 and Orca.Warn.FactoryProperty=0. Streamlined and standardized progress reports during component initialization. (alexm)
    • fixed bugs handling negative times in conversions between orca::Time, doubles, durations, and strings. Added more tests. (alexm)
    • Worked around an Ice3.2 bug which occasionally resulted in a deadlock on adapter activation. (alex b)
    • added functions for looped multi-try connections and interface setup. these wrap the existing "single-shot" function e.g. activate(), connectToInterfaceWithTag(), but catch the exceptions which indicate conditions which may change (service unavailability) and try again. (alexm)
    • version info printed out on startup (or with --version) now includes project version, which could be useful for non-orca projects. (alexm)
    • getRequiredTags() and getProvidedTags() now takes an optional string parameter to filter the list of tags by initial text. (alexm)
  • libOrcaSerial (alex b, duncan)
    • Big overhaul:
      • The interface is substantially different, hopefully more sane and consistent and easier to understand. Plus error checking and reporting is improved. Plus lockfiles have been implemented, to prevent concurrent access to a device from multiple instances of orcaserial.
  • libOrcaIfaceImpl
    • (for some interfaces) added multi-try function for interface initialization. (alex m)

Changes in Release 2.4.0

Project wide
  • documentation
    • added a high-level guide on how to start coding (alex m)
New component interfaces
New components
  • gps2localise2d (alexb)
  • Imu component has been moved from sandbox to the components directory (ben u)
New utilities
New libraries
  • libOrcaColourText (alexb)
    • Simple text colours on the Linux terminal, using escape-codes.
Updated component interfaces
  • PathPlanner
    • Added an error string (tobi)
  • Gps
    • Split into separate interfaces (alex b)
  • Power
    • Added a new variable: ChargingState (tobi)
  • Localise2d
    • Removed offset (alex b)
Updated components
  • Gps
    • Big overhaul (tobi)
  • OrcaView2d:
    • Redesign of factories and how elements are configured (tobi)
    • Fixed bug with uninitialised platform location (alex b)
    • Fixed bug with waypoint heading tolerances being normalised (alex b)
    • Changed range of entries for pathfollower parameters (tobi)
    • Added feature: connect to all interfaces on given component (tobi)
  • PathPlanner:
    • Big re-organisation (alex b, tobi)
  • GoalPlanner:
    • Big overhaul (alex b)
Updated utilities
  • orcaifaceimpl
    • servers catch AlreadySubscribed exceptions but don't pass them on to clients (tobi)
    • enables clients to try to resubscribe as often as they want
  • Probe:
    • Added PathFollower2d probe (alex b)
  • orcagpsutil
    • big cleanup (alex b)
Updated libraries
  • orcnavutil:
    • Changed order of parameters in covpredict (alex b)
  • orcapathplan:
    • Allowed for non-uniform costs in skeleton path planning (alex b)
  • libOrcaIce
    • direct connections work again (alex m)

Changes in Release 2.3.0

Project wide
  • Compile Options
    • Under Linux, build with debugging symbols by default (alex b)
    • Compatible with Ice v3.1 and Ice v3.2, but warnings are spewed out for Ice v3.2 (alex b)
New component interfaces
  • Replay
    • Remote interface to a log playing process.
New components
New utilities
  • mgaconversion (Tobi)
    • contains tools to convert from latitude/longitude to MGA
  • sysmon (alex b)
    • A tool to monitor info/warn/error messages for an entire system.
New libraries
  • orcagpsutil (Tobi)
    • split up orcanavutil
    • added nmea classes which were with the gps component before
Updated component interfaces
  • Tracer
    • Has functions to subscribe just for that componnent, or to all info/warn/errors on a platform. The orcaice::Tracer implementation is updated accordingly (alex b)
  • Status
    • small changes to improve system monitoring. OrcaIce has been updated accordingly. (alex b)
  • Position2d/3d and Platform2d
    • Removed these obsolete interfaces (alex b)
Updated components
  • SegwayRmp
    • Added hardware speed limits, set in hardware driver (alex m/b)
    • the RmpUsb driver now corrects for segway's built in speed scaling factor, so that segway will actually drive at the speed specified. (alex m/b)
    • Overhaul of component, error reporting greatly improved (alex b)
Updated utilities
  • Orcaview2d
    • supports wifi now (Tobi)
  • Probe
    • fixed bug with wrong max number of options (alex m)
    • added support for Gps, Localise2d interfaces (alex b/m)
  • Logger
    • optinally, tolerates unsupported interface types and formats. also allows disabling replay. (alex m)
  • LogPlayer
    • CameraReplayer: fixed mem leak and bug to do with skipping images (Alen Alempijevic)
  • IceGridMon
    • Compatible with Ice v3.2 (alex b)
Updated libraries
  • OrcaIce
    • fixed bug with Tracer not calculating total verbosity (alex m)
    • added ComponentThread to handle transient failures to register Home interface and manage Status (alex b)
  • OrcaNavUtil (Tobi)
    • added MGA/latitude/longitude functions
  • OrcaLogFactory (Tobi)
    • fixed GPS replay bug
    • added wifi for replaying
  • OrcaIfaceImpl
    • Interface lifetimes are now independent of the adapter. (This involved an API change). (alex b)
  • drunkrobot and robot2dtester
    • moved to sandbox as unmaintained, an no longer compile after removal of position2d (alexb)

Changes in Release 2.2.0

Project wide
  • Interfaces
    • Data objects in Orca interfaces no longer have to derive from orca::OrcaObject class. Most existing interfaces now use struct's. The following interfaces still use classes RangeScanner2d, LaserScanner2d, FeatureMap2d.
  • Build system
    • Support for QNX Neutrino real time OS
    • New CMake macro BUILD_COMPONENT_SOURCES to simplify building both stand-alone component and an IceBox service. Internally it builds a convenience library which cuts down compilation time in half.
    • Defined new CMake variables to establish the local OS: OS_LINUX, OS_QNX, OS_WIN.
  • Documentation
    • Expanded docco on how to add interfaces and souce code to the project ( )
    • Re-did latency tests on new hardware and using structures instead of classes ( )
  • Dependencies
    • libOpenCV can now be installed into an arbitrary location (alex m)
  • Global code changes
    • changed all IceStorm subscriptions to 'twoway' to reduce risk of keeping subscriptions after consumers go down.
New component interfaces
  • Tracer
    • Remote access to component's traces, e.g. errors, warning, etc. Separated from the existing Status interface.
  • DriveBicycle
  • DriveDifferential
  • Log
  • Odometry2d and Odometry3d
    • Replace Position2d and Position3d which are now obsolete.
  • VelocityControl2d
    • Replaces Platform2d which is now obsolete.
  • VehicleDescription
    • Describes physical geometry and dynamic constraints of vehicles (Alex B.)
  • Wifi
    • Access to wireless signal strength and other wireless network parameters (Tobi)
  • PixMap
    • Access to a pixmap representation of the world, e.g. background image (Tobi)
New components
  • TracerMon (alex m.)
    • Connects to Tracer interface of a component and displays all trace statements.
  • Wifi (Tobi)
    • Component that provides wifi information
  • PixMapLoader (Tobi)
    • Loads and provides a pixmap
New utilities
  • IceGridMon (alex m.)
    • Connects to the registry and installs itself as the Registry and Node Observer. Then all registry and node events are traced locally or re
New libraries
  • orcaifaceimpl
    • Optional convenience library providing default implementations of some Orca interfaces (Alex B.)
  • orcawifi
    • Library for getting wireless information in Linux (Tobi)
Updated component interfaces
  • Wifi, OgMap (Tobi)
    • enums instead of const int for types
  • PathFollower2d (Tobi)
    • Added get and set methods for activation time and enabled-state.
  • Platform2d
    • Obsolete. Use VelocityControl2d or DriveBicycle in new code.
  • Position2d
    • Obsolete. Use Odometry2d in new code.
  • Position3d
    • Obsolete. Use Odometry3d in new code.
Updated components
  • FeatureMapLoader
    • Added error tracing (alex m.)
  • Robot2d and SegwayRmp
    • Now using new interfaces Odometry2d and VelocityControl2d. (alex m.)
  • Teleop (alex m.)
    • Support for configurable display, input, and network drivers.
    • Added support for VelocityControl2d and DriveBicycle interfaces.
    • General source overhaul. Using orcaice::EventQueue's.
    • added a 'secret' feature to send step inputs 10%,20%...100% of max speed with one key stroke. it's disabled by default.
    • joystick driver applies a quadratic curve to the input
  • LocalNav
    • General cleanup, plus made to respect timings in paths. (Alex B.)
    • Uses new interfaces Odometry2d and VelocityControl2d. (Tobi)
    • Use vehicle details obtained using VehicleDescription (Alex B.)
  • ImageServer
    • Cleaned up code and documentation. Using standard interface implementation (alex m.)
  • Gps
    • FakeDriver can spit out configured coordinates, useful for debugging (Tobi)
Updated utilities
  • Probe (alex m.)
    • now using orcaice::EventQueue for cross-thread communication.
  • OrcaView2d (Tobi)
    • Interaction with pathfollower2d interface more sophisticated:
      • paths can be specified as missions with associcated waiting times and behaviours
      • timing is displayed online by an "olympic marker"
    • All interfaces on a given platform can be connected.
    • Prohibit connecting the identical interface twice.
    • Changed some guielements to be displayed in iconic view, ie independent on zoom configuration.
Updated libraries
  • libOrcaIce
    • an overhaul of tracing and status facilities. (alex m.)
    • added EventQueue class using events defined as Ice smart pointers. (alex m.)
    • implementation of Home interface now returns dynamic information about component's interfaces. Works for automatically when using std connect utilities, an option exist for custom Home data manipulation. (alex m.)
    • made 'component started' trace optional with Orca.PrintComponentStarted property. This is to be nice to nonstandard display drivers, e.g. those using ncurses.
  • libOrcaLogFactory
    • added support for Odometry2d/3d interfaces (alex m.)
    • added support for Wifi interface (Tobi)
    • added support for Imu interface (Tobi)
  • libOrcaProbeFactory (alex m.)
    • added support for Status and Tracer interfaces
  • libOrcaDef (alex m.)
    • removed Home object registration from XML descriptor. It's done programatically from libOrcaIce.
    • fixed bug in xml template generation which caused 60sec delay in component shutdown from within IceGrid.
  • libOrcaOgMapLoad (Tobi)
    • renamed to libOrcaMapLoad
    • added functionality to load pixmaps

Changes in Release 2.1.1

Project wide
  • Build system
    • split utils directory into libs and utils. components are not affected.
  • Documentation
    • added graphical UML symbol to documentation pages of all components.
    • added separate listing of libs and utils.
    • fixed broken doxygen references.
New components
  • InsGps (Ben Upcroft)
    • hardware component for Inertial navigation systems which include IMU and GPS units. It provides raw imu data, gps data, and position3d data. It is also planned that Localise3d interface will also be provided. At present, the Novatel Span INS system is supported.
New utilities
  • def2cfg, def2xml, def2xmltemplate, def2definverted, def2uml
    • the first 4 are renamed from generatecfg, etc. and moved into a separate dir.
    • new utility def2uml for creating images of UML symbols from component definition files.
New libraries
  • libOrcaDynamicLoad
    • factored out the dynamic loading stuff into a separate library (Alex B.)
  • libOrcaQUml (Alex M.)
    • port of old libQorcaUml from QCanvas to QGraphicView
  • libOrcaQt
    • factored out commonly used Qt elements. Currently contains the Orca icon and aboutOrca() function.
Updated component interfaces
  • PolarFeature2d
    • Added two fields to all features: pFalsePositive and pTruePositive, to characterise feature detection reliability (Alex B.)
    • Allowed different feature representations using inheritence (Alex B.)
  • FeatureMap2d
    • Added field to each feature: pExists. Quantifies the certainty that the feature is really there. (Alex B.)
    • Allowed different feature representations using inheritence (Alex B.)
  • OgMap interface
    • added a user-defined type, useful to determine the type of certainty grid map, e.g. hazard, ogmap, motion etc. (Tobi)
Updated components
  • LogPlayer component (Alex M.)
    • interface name is set properly on replay
    • interfaces are initialized before waiting for user input to start repla
    • execution dir of logplayer and the dir where logs are stored may be different
    • custom begin and end time of replay are working again
    • it's possible to step through data objects one at a time by settiing ReplayRate=0
  • LaserFeatureExtractor
    • Huge Overhaul, plus added line features (Alex B.)
  • PathPlanner
    • fixed potential problem with skeleton (zeromap is now a map of ints) (Tobi)
  • GoalPlanner
    • throws remote exception if there are more than one localisation hypotheses (Tobi)
Updated utilities
  • Probe utility (Alex M.)
    • using dynamically loaded factory libraries to allow use with satellite projects
    • added a gui driver using Qt
  • OrcaView2d
    • now supports guielements with multiple interfaces, see e.g. ogmapscombined (Tobi)
  • CleanRegistry (Alex M.)
    • now works with the Home interfaces registered as well-known-objects
Updated libraries
  • libOrcaIce
    • added basename() and dirname() similar to Unix equivalents (Alex M.)
    • added ctest for string utilities (Alex M.)
    • added pathDelimeter() function to sysutils (Alex M.)
    • added toString and "reverse" functions for several BROS-I structures. added tests. (Alex M.)
  • libOrcaQGui
    • renamed from libOrcaGui
    • Made the generic bits in libOrcaQGui unaware of any specific bits in libOrcaQGui2d (Alex B.)
    • Added support for dynamically-loaded plug-in GuiElementFactories, to allow satelite projects to extend the GUI (Alex B.)
    • Added support for line features (Alex B.)
    • Added a fix for multiple-subscriptions and increased re-subscribe timeout (Alex B.)
  • libOrcaCompModel
    • improved exception handling when contacting the Registry (Alex M.)

Changes in Release 2.1.0

  • Build system
    • Solaris compatability (Christopher Brooks, Alex Brooks)
    • Tested with Ice-3.1.1
    • CMake scripts are now installed and can be used by satellite projects without copying. (Alex M.)
  • New interface: BinarySwitch (Alex M.)
    • Represents a bank of hardware devices with binary states, e.g. lights.
  • New interface: Cpu (Alex M.)
    • Interface to info about the computer's CPU.
  • Gps interface
    • Now using orca::TimeOfDay and orca::Date structures for date/time. (Alex M.)
  • RangeScanner2d interface: renamed from RangeScanner (Alex M.)
    • removed operation for remote configuration setConfig()
    • combined Config and Geometry into Description
  • LaserScanner2d interface: renamed from Laser (Alex M.)
  • Camera interface (Alex M.)
    • removed operation for remote configuration setConfig()
    • combined Config and Geometry into Description
    • renamed enum parameters from all-caps to Orca standard notation
  • New component: OrcaView3d (Ben Upcroft, Waleed Kadous, Alex Brooks)
    • a 3-D visualisation component
  • OrcaGui Library
    • Broken into separate 2D, 3D, and general libraries
  • New utility: Probe (Alex M.)
    • a utility to browse and probe remote orca interfaces.
  • OrcaIce library
    • added docs for tracing functions and properties (Alex M.)
    • component config file may now be specified with Ice.Config in addition to Orca.Config parameter. This is done for compatibility with IceGrid (Alex M.)
    • renamed Orca.Tracer.DoTimestamp config paramter to Orca.Tracer.Timestamp, to be similar to Ice.Logger.Timestamp (Alex M.)
    • added a new config parameter Orca.RequireRegistry to allow start up components without registry (Alex M.)
    • in component config files, component name is no longer required. We use ComponentTag as default (converted to lower case). this is useful for some utilities which now don't need dummy config files. (Alex M.)
    • added functions for standardized warning about missing properties, see warnMissingProperty().
  • OrcaObject library
    • added functions for converting time to time-of-day and date. added ctest to test them. (Alex M.)
  • OrcaDef library
    • added orca version info to autogenerated files (.cfg and .xml) (Alex M.)
  • Laser2d component: renamed from SickLaser
    • Significant overhaul of internal structure to comply with changes in the interface and accomodate new drivers. (Alex M.)
    • PlayerClient driver
      • can now connect to multiple lasers on the same robot (Alex M.)
      • now works with Hokuyo URG laser
  • ImageServer and ImageViewer components
    • Significant overhaul of internal structure to comply with changes in the interface. (Alex M.)
  • Logger/LogPlayer components, and new libOrcaLog library
    • major code clean-up to simplify addition of new interfaces (Alex M.)
    • master file protocol has changed, logger writes metadata (Tobi)
    • new feature: logplayer can do endless loops (Tobi)
    • timestamp in log filenames is optional (Alex M.)
    • added support for Power interface (Alex M.)
    • Added support for plug-in loggers, via dynamic library loading (Alex B.)
    • CameraLogger/Replayer added explicit support for "ice" and "jpeg" formats (Alex M.)
    • added ctests to test that replayers can read logs.
  • Orca for Java
    • now works with Debian package of IceJ (Alex M.)

Changes in Release 2.0.2

  • Build system
    • User preference for installation directory are no longer overwritten.
    • Orca will now build with Ice intalled as Debian package.
    • Fixed Windows build error in 2.0.1.
  • Imu interface
    • accellerometer and gyro values are now stored using BROS-I structures.
    • Alex Makarenko
  • Position3d interface
    • removed 'stalled' flag from Position3dData object.
    • Alex Makarenko
  • Robot2d component
    • Split off Segway driver into a separate component.
    • Alex Makarenko
  • New component: SegwayRmp
    • compared to Robot2d, provides Position3d interface.
    • Alex Makarenko
  • OrcaDef library: new feature
    • generates IceGrid app descriptor (XML format) from .def file
    • Alex Makarenko
  • Documentation
    • new tutorial on using IceGrid for application deployment
    • Debian package for Ice is now the default install option.
    • Alex Makarenko
  • New interface: PointCloud
    • Waleed Kadous
  • ImageServer and ImageViewer
  • now rely on the latest release verisons of opencv-0.9.9.
  • builds of these individual components have been turned on by default.
  • user specified resolutions are now supported for both firewire and usb cameras.
    • Ben Upcroft

Changes in Release 2.0.1

  • New components: ognode & laser2og
    • For (cooperative) occupancy-grid mapping
    • Matt Ridely, George Mathews, Alexei Makarenko, Tobias Kaupp
  • New component: gps
    • Matt Ridley
  • New component: goalplanner
    • Tobias Kaupp
  • Component overhaul: pathplanner
    • Alex Brooks and Tobias Kaupp
  • Substantial improvements: orcaview
    • Tobias Kaupp
  • New interface: imu (inertial measurement unit)
    • Ben Upcroft
  • Support for integration with gazebo
    • Ben Upcroft
  • Support for logging in ascii and parsing from matlab
    • Ben Upcroft, Tobias Kaupp
  • Initial support for components as daemons
    • Alex Brooks
  • Fixed mem leak in SickLaser
    • Alex Brooks
  • Portability of common components (logger/logplayer/orcaview) to Orca-derived projects
    • Tobias Kaupp

Webmaster: Tobias Kaupp (tobasco at

Generated for Orca Robotics by  doxygen 1.4.5