Skip to content
The project aims to provide a framework for ROS2 benchmarking. ROS2 communication characteristics can be evaluated on several axes, quickly and in an automated way. The project also serves to compare ROS2 to ROS1 and to pure implementations of DDS such as OpenSplice and others (for measuring ROS2 overhead). It is easy to setup and run thanks to …
C++ Python CMake Shell Gnuplot C
Branch: master
Clone or download
Rafał Kozik
Latest commit c2f0b4f May 7, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
comm changed to kinetic May 6, 2018
docker changed to kinetic May 6, 2018
python Generating eps instead of png Aug 4, 2016
screenshots Updated screenshots Aug 4, 2016
data Graphs improvements: Jun 23, 2016
logs Graphs improvements: Jun 23, 2016
tcpdump Graphs improvements: Jun 23, 2016

ROS2 Evaluation


The project provides a benchmarking environment and nodes implementation for testing and evaluation of ROS2, also with comparison to ROS1 and OpenSplice DDS implementation.

The ROS2 evaluation is a part of PIAP tasks in R5-Cop project ( We aim to create an independent assessment of the current ROS2 state in terms of whether it looks promising, shows some gains on ROS1 already, whether it will be worth migrating to anytime soon, etc.

The project has additional value of providing an example implementation of a simple communication layer based on ROS2 (there is some architecture to it that might fit into some applications, not just a simple main.cpp stuff). The ros2node library might be an useful tool to anyone wanting to implement ROS2 for their robotic applications.


Install dependencies:

    # Ubuntu 16.04
    sudo apt-get install python3-docker tcpdump gnuplot

    # Ubuntu 14.04
    sudo sh -c "wget -qO- | apt-key add -"
    sudo sh -c "echo deb docker main > /etc/apt/sources.list.d/docker.list"
    sudo apt-get update
    sudo apt-get install python3-pip lxc-docker tcpdump gnuplot
    sudo pip3 install docker-py==1.7.2

    # Arch
    pacman -S python-docker-py docker tcpdump gnuplot

Add your user to the docker group (you need to log out and log in)

   sudo usermod -a -G docker $USER

Install RTI Connext DDS (optional)

You need to obtain a license from RTI and get libraries from After installation copy the license file to the home directory (e.g. ~/rti_connext_dds-5.2.3) and then copy the home directory to the comm/rti_connext_dds directory, e.g.:

    cp rti_license.dat ~/rti_connext_dds-5.2.3
    cp -R ~/rti_connext_dds-5.2.3 ~/ros2_benchmarking/comm/rti_connext_dds

Build containers:

    # If you have RTI Connext DDS
    ./python/ --build-all

    # Otherwise
    ./python/ --build ros1:base ros1:node ros2:base ros2:opensplice ros2:fastrtps opensplice:base opensplice:node

Get more help on running tests:

    ./python/ --help

Sample output

Lost packets for RobotAlarm message

Lost packets for RobotControl message

Lost packets for RobotSensor message

Latency for RobotAlarm message

Latency for RobotControl message

Latency for RobotSensor message


The authors of the project are @adamdbrw, @haueck and @ursereg.


  • Standardize and generate messages between node implementations.
  • Add node for FastRTPS
  • For higher packet drop rates, manipulate hearbeat parameter and make sure connection is negotiated before measuring
You can’t perform that action at this time.