Working with ROS 1/2 Bags

This page serves as a guide to work with ROS Bags on ROS2 Humble.

There are some differences between ROS1 and ROS2 messages:

Understanding Bag Formats

ROS1:

  • Extension: .bag

  • Storage: Custom binary format

  • Tools: rosbag, rqt_bag

  • Compression: Supported (e.g., BZ2)

  • Metadata: Topic names, types, timestamps

ROS2:

  • Extension: .db3

  • Storage: SQLite3 database

  • Tools: ros2 bag

  • Compression: Supported

  • Metadata: More flexible and complex metadata

MCAP

MCAP (Message Capture)

  • A proposed standard for a unified file format to store serialized messages for robotic systems.

  • Designed to be flexible, efficient, and language-agnostic.

  • Aims to standardize message storage across different middleware systems, improving interoperability and performance.


How to play ROS2 Bags (.db3)?

What should a rosbag file contain?

<bagfolder_name>
    |_ metadata.yaml
    |_ <bagfolder_name>.db3

Playing rosbags that are .db3 files

Install plugins
sudo apt install ros-humble-rqt*
sudo apt install \ ros-humble-image-transport-plugins

Play Bag using any of the two commands:

ros2 bag play /path/to/bagfolder/bag.db3
ros2 bag play /path/to/bagfolder

Use rqt to view topics,

rqt

How to use ROS1 Bags in ROS2?

You can use rosbags-convert tool to unpack ROS1 .bag file to .db3 files that can be played using

ros2 bag play </path/to/bag.db3>

If you want to obtain a .mcap file, we can use rosbag2 to convert .db3 to .mcap.

Extracting .db3 and metadata.yaml from .bag files

1.1) Install rosbags library

pip install rosbags

1.2) Navigate to directory containing .bag and extract .db3 and metadata

cd /path/to/bags
rosbags-convert --src /path/to/filename.bag --dst /path/to/output

If your terminal says "rosbags-convert command not found". It could be that your rosbags library is installed in a directory that is not included in PATH variable.

Go to your home directory and add the following line into ~/.bashrc. (Replace {user} with your device username)

export PATH=$PATH:/home/{user}/.local/bin

Convert .db3 to .mcap

2.1) Ensure that you have rosbag2 installed

sudo apt-get install ros-humble-rosbag2

2.2) Write config file for conversion (name of file can differ)

vim convert.yaml

If you want your mcap file to contain all topics and services, write convert.yaml as such:

output_bags:
- uri: <NAME_OF_OUTPUT_DIR>
	storage_id: mcap
	all: true

2.3) Run command to convert

ros2 bag convert --input /path/to/bag --output-options /path/to/convert.yaml

Last updated