Skip to content

ika-rwth-aachen/ros2_unbag

Repository files navigation

ros2 unbag - fast ROS 2 bag export for any format

GitHub Repo stars

ros2 unbag is a powerful ROS 2 tool featuring an intuitive GUI and flexible CLI for extracting topics from .db3 or .mcap bag files into formats like CSV, JSON, PCD, images, and more.

  • 🎨 Intuitive GUI interface for interactive bag exploration and export configuration
  • ⚙️ Full-featured ROS 2 CLI plugin: ros2 unbag <args> for automation and scripting
  • 🔌 Pluggable export routines enable export of any message to any type
  • 🔧 Custom processors to filter, transform or enrich messages
  • ⏱️ Time‐aligned resampling (last | nearest)
  • 🚀 Multi‐process export with adjustable CPU usage
  • 💾 JSON config saving/loading for repeatable workflows

Table of Contents

Introduction

ros2 unbag GUI

The integrated GUI makes it easy to visualize your bag structure, select topics, configure export formats, set up processor chains, and manage resampling—all through an interactive interface. For automation and scripting workflows, the full-featured CLI provides the same capabilities with command-line arguments or JSON configuration files.

It comes with export routines for all message types (sensor data, point clouds, images). You need a special file format or message type? Add your own export plugin for any ROS 2 message or format, and chain custom processors to filter, transform or enrich messages (e.g. drop fields, compute derived values, remap frames).

Optional resampling synchronizes your data streams around a chosen master topic—aligning each other topic either to its last‑known sample (“last”) or to the temporally closest sample (“nearest”)—so you get a consistent sample count in your exports.

For high‑throughput workflows, ros2 unbag can spawn multiple worker processes and lets you tune CPU usage. Your topic selections, processor chains, export parameters and resampling mode (last or nearest) can be saved to and loaded from a JSON configuration, ensuring reproducibility across runs.

Whether you prefer the GUI for interactive exploration or ros2 unbag <args> for automated pipelines, you have a flexible, extensible way to turn bag files into the data you need.

Installation

Prerequisites

Make sure you have a working ROS 2 installation (e.g., Humble, Iron, Jazzy, or newer) and that your environment is sourced:

source /opt/ros/<distro>/setup.bash

Replace <distro> with your ROS 2 distribution.

Install the required apt dependencies:

sudo apt update
sudo apt install libxcb-cursor0 libxcb-shape0 libxcb-icccm4 libxcb-keysyms1 libxkbcommon-x11-0

From PyPI (via pip)

pip install ros2-unbag

From source

git clone https://github.com/ika-rwth-aachen/ros2_unbag.git
cd ros2_unbag
pip install .

Docker

You can skip local installs by running our ready‑to‑go Docker image:

docker pull ghcr.io/ika-rwth-aachen/ros2_unbag:latest

This image comes with ROS 2 Jazzy and ros2 unbag preinstalled. To launch it:

  1. Clone or download the docker/docker-compose.yml in this repo.

  2. Run:

    docker-compose -f docker/docker-compose.yml up
  3. If you need the GUI, first enable X11 forwarding on your host (at your own risk!):

    xhost +local:

    Then start the container as above—the GUI will appear on your desktop.

Quick Start

ros2 unbag offers both an intuitive GUI for interactive workflows and a powerful CLI for automation and scripting.

GUI Mode (Recommended for First-Time Users)

Launch the interactive graphical interface:

ros2 unbag

CLI Mode (For Automation & Scripting)

Run the CLI tool by calling ros2 unbag with a path to a rosbag and an export config, consisting of one or more topic:format:[subdirectory] combinations:

ros2 unbag <path_to_rosbag> --export </topic:format[:subdir]>

Alternatively you can load a config file. In this case you do not need any --export flag:

ros2 unbag <path_to_rosbag> --config <config.json>

the structure of config files is described in here.

In addition to these required flags, there are some optional flags. See the table below, for all possible flags:

Flag Value/Format Description Usage Default
bag <path> Path to ROS 2 bag file (.db3 / .mcap) or split bag folder. CLI mode (required)
-e, --export /topic:format[:subdir] Topic → format export spec. Repeatable. CLI mode (required or --config)
-o, --output-dir <directory> Base directory for all exports. Optional .
--naming <pattern> Filename pattern. Supports %name, %index, %timestamp, %master_timestamp (when resampling), and strftime (e.g. %Y-%m-%d_%H-%M-%S) using ROS timestamps Optional %name_%index
--resample /master:association[,discard_eps]. Time‑align to master topic. association = last or nearest; nearest needs a numeric discard_eps. Optional
-p, --processing /topic:processor[:arg=value,…] Pre‑export processor spec; repeat to build ordered chains (executed in the order provided). Optional
--cpu-percentage <float> % of cores for parallel export (0–100). Use 0 for single‑threaded. Optional 80.0
--config <config.json> JSON config file path. Overrides all other args (except bag). Optional
--gui (flag) Launch Qt GUI. If no bag/--export/--config, GUI is auto‑started. Optional false
--use-routine <file.py> Load a routine for this run only (no install). Optional
--use-processor <file.py> Load a processor for this run only (no install). Optional
--install-routine <file.py> Copy & register custom export routine. Standalone
--install-processor <file.py> Copy & register custom processor. Standalone
--uninstall-routine (flag) Interactive removal of an installed routine. Standalone -
--uninstall-processor (flag) Interactive removal of an installed processor. Standalone -
--help (flag) Show usage information and exit. Standalone -

Example:

ros2 unbag rosbag/rosbag.mcap 
    --output-dir /docker-ros/ws/example/ --export /lidar/point_cloud:pointcloud/pcd:lidar --export /radar/point_cloud:pointcloud/pcd:radar --resample /lidar/point_cloud:last,0.2

⚠️ If you specify the --config option (e.g., --config configs/my_config.json), the tool will load all export settings from the given JSON configuration file. In this case, all other command-line options except <path_to_rosbag> are ignored, and the export process is fully controlled by the config file. The <path_to_rosbag> is always required in CLI use.

Documentation

For detailed information on advanced features, see the following guides:

  • Export Routines - Complete guide to built-in export formats (images, point clouds, CSV, JSON, etc.) and creating custom export routines
  • Processors - Message transformation and filtering, including processor chains and custom processors
  • Advanced Usage - Configuration files, resampling strategies, and CPU utilization tuning

Acknowledgements

This research is accomplished within the following research projects:

Project Funding Source
4-CAD Funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) DFG Proj. Nr. 503852364

iEXXODUS Funded by the European Union’s Horizon Europe Research and Innovation Programme under Grant Agreement No 101146091

SYNERGIES Funded by the European Union’s Horizon Europe Research and Innovation Programme under Grant Agreement No 101146542

Notice

Important

This repository is open-sourced and maintained by the Institute for Automotive Engineering (ika) at RWTH Aachen University.
We cover a wide variety of research topics within our Vehicle Intelligence & Automated Driving domain.
If you would like to learn more about how we can support your automated driving or robotics efforts, feel free to reach out to us!
📧 opensource@ika.rwth-aachen.de

About

A ROS 2 tool for exporting bags to human readable files. Supports pluggable export routines to handle any message type.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages