(Deprecated) Prototype system using DDS as the middleware for a ROS like API.
C++ C CMake Python EmberScript Shell Other
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



This was an early prototype and is no longer in development. Current work is being done at https://github.com/ros2/ros2


Prototype system using DDS as the middleware for a ROS like API.

System requirements

You need to install OpenSplice. For now, we're only concerned with the C++ bindings (both API and message generation); the other languages supported by OpenSplice are excluded by these installation instructions.

Ubuntu Linux

At the time of writing, we have packaged OpenSplice 6.3 for 64-bit Ubuntu Precise, Quantal, and Raring. To install on one of those systems, you need to add the OSRF apt repo to your system then install libopensplice63:

# Add the appropriate apt repo (substitute `precise` for the right value):
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu precise main" >  /etc/apt/sources.list.d/gazebo-latest.list'
# Add the osrfoundation.org package repository key
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
# Update your list of packages
sudo apt-get update
# Install opensplice
sudo apt-get install libopensplice63



Assuming you have Homebrew installed already, you can do this to get opensplice:

brew tap osrf/ros2
brew install opensplice

The above should download and "pour" a binary bottle on OS X 10.8 and 10.9. You can, however, build it with debug symbols like this:

brew install --with-debug opensplice

Generic build from source

Clone our fork of opensplice, then use our CMake wrapper around their oddball build system:

# Install build-time prerequisites, which on Linux are:
# (see http://www.prismtech.com/opensplice/opensplice-dds-community/building for the full list)
sudo apt-get install gawk flex bison perl
git clone https://github.com/osrf/opensplice.git
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/tmp/opensplice
make install
# Tell CMake to look there for CMake configuration files

Talker / listener example

In the cpp subdirectory, there's a first version of a simplified DDS API, along with example publisher and subscriber applications. It builds like vanilla CMake (assuming that you've already followed one of the installation paths described above):

cd cpp
mkdir build
cd build
cmake ..

To run the subscriber:

cd cpp/build
. setup.sh
./subscriber mytopic

To run the publisher:

cd cpp/build
. setup.sh
./publisher mytopic mystring 1000

You should expect to see output like this from the subscriber:

mytopic: mystring
mytopic: mystring
mytopic: mystring
mytopic: mystring

Known limitations

  • We're only dealing with string messages (see the definition in cpp/idl/StringMsg.idl).
  • The publisher publishes a finite number of messages at a fixed frequency, then stops.
  • The subscriber can only subscribe to one topic and it takes several seconds to shut down on Ctrl-C because OpenSplice's internal tear-down handlers are running.
  • Before running an OpenSplice program, you need to source the generated cpp/build/setup.sh file (if you don't, you'll get an error like Error in DDS::DomainParticipantFactory::create_participant: Creation failed: invalid handle). The setup.sh is simple, in that it just sets the OSPL_URI environment variable to point to the default XML configuration file. But we need to think about to handle configuration in general.

Releasing a new Ubuntu package

To release a new version of the libopensplice63 debian (rough sketch; we should really use bloom for this step):

  • Clone the opensplice-release repo. Update opensplice-release/*/debian/changelog to list the new version.
  • Clone the opensplice repo. In there, git submodule init; git submodule update to pull in the submodule content that's required.
  • Clone the release-tools repo.
  • In the opensplice directory, run: ../release-tools/release.py -r <releasenumber> -a libopensplice63 opensplice <major.minor.patch> <buildpassword>