Record ROS 2 data in more performant and configurable bag file format
We’re excited to announce that ROS 2 users can now record their data directly to MCAP files, for easy analysis with third-party integrations and developer tools.
rosbag2
now sets the rosbag2_storage_mcap
plugin as the default storage format. Starting from the ROS 2 Iron Irwini release (coming in May 2023), you can record ROS 2 data to MCAP (.mcap
) files by default, or opt to still use the fully supported SQLite3 (.db3
) format.
This work is the culmination of a large community-led effort to improve existing tools for the next generation of ROS 2 users, and we’ve prioritized making this change as seamless as possible for the community.
We had the privilege of collaborating with ROS 2 maintainers at Open Robotics and Apex AI to add this out-of-the-box support for MCAP. As members of the ROS 2 Technical Steering Committee, we’re committed to continually improving ROS and making open source robotics development easier for all.
Check out our comparison of rosbag2
storage plugins for our extensive profiling of MCAP and SQLite3 performance.
SQLite3, the current ROS 2 recording format default, has a few limitations around recording efficiency and playback, which are addressed by MCAP. When recording, the SQLite3 storage plugin typically uses a “write optimized” mode – this achieves high write throughput at the risk of data corruption if recording is interrupted. This can be changed to a “resilient mode”, which removes the risk of corruption at the cost of write throughput. With MCAP, you can enjoy the data safety of SQLite3’s “resilient” mode, while also achieving the write throughput of its “write optimized” mode.
The MCAP storage plugin provides ROS 2 users with several configuration options for tuning the recorder. For example, you can choose between zstd
and lz4
compression options, depending on your compute and compression needs.
Finally, MCAP files are fully self-contained, making it possible to use with third-party tools outside of the ROS environment. By including all necessary message definitions, MCAP files can easily be integrated with tools like Foxglove or PlotJuggler, as they have the message definitions and information needed to decode the file.
When you now run $ ros2 bag play <PATH_TO_FILE>
to play back ROS 2 data files, it will automatically detect whether the file was recorded in MCAP or SQLite3 and decode as needed:
$ ros2 bag play <PATH_TO_FILE>
language-bash
It’s important to note that rqt_bag
can also now handle both rosbag2
storage backends equally well.
While there are no plans to deprecate SQLite3 support in ROS 2, we hope that the inclusion of MCAP as the default recording format going forward will simplify development and solve pain points for many robotics teams. And because MCAP is flexible enough to record heterogeneous data (e.g. ROS 1, ROS 2, Protobuf, JSON, FlatBuffers, etc.) in a single file, it can adapt to your team's framework choices and evolving data stack.
As you get started with this new recording format, we’d love to hear your feedback! Join the conversation in our Discord community or on Twitter, or check out the MCAP GitHub repo to file feature requests.