The CU-MULTI Dataset: A dataset aimed to support multi-robot map-merging, inter-robot place recognition and loop-closure detection.
If you would like to download the dataset, you can do so here. A Globus account is required, which you can create using either your institutional or personal email address.
If you find CU-Multi and/or the provided tools useful in your research, please cite our paper:
@misc{albin2025cumultidatasetmultirobotcollaborative,
title={CU-Multi: A Dataset for Multi-Robot Collaborative Perception},
author={Doncey Albin and Daniel McGann and Miles Mena and Annika Thomas and Harel Biggie and Xuefei Sun and Steve McGuire and Jonathan P. How and Christoffer Heckman},
year={2025},
eprint={2509.19463},
archivePrefix={arXiv},
primaryClass={cs.RO},
url={https://arxiv.org/abs/2509.19463},
}
CU-Multi/
├── calib/
│ └── description/
│ ├── meshes/
│ │ ├── cu_hunter_body.dae
│ │ └── cu_hunter_wheel.dae
│ └── robot.urdf
├── <environment>/
│ ├── <env>.osm.xml
│ └── <robot>/
│ ├── <robot>_gt_utm_poses.csv
│ ├── <robot>-<env>_cam_rgb/...
│ ├── <robot>-<env>_cam_depth/...
│ ├── <robot>-<env>_imu_gps/...
│ ├── <robot>-<env>_poses/...
│ └── <robot>-<env>_lidar/
│ ├── metadata.yaml
│ └── <robot>-<env>_lidar_0.db3
Topic Name | Message Type | Sensor | Publish Rate | Description |
---|---|---|---|---|
<robot>_<env>_ground_truth.db3 | ||||
<robot>/ground_truth/path |
nav_msgs/msg/Path | - | - | . |
<robot>/ground_truth/odometry |
nav_msgs/msg/Odometry | - | 20 Hz | . |
/tf |
tf2_msgs/msg/TFMessage | - | 20 Hz | Publishes tf from 'world' frame to robot lidar frame 'base_link' at each lidar timestamp. |
<robot>_<env>_lidar.db3 | ||||
<robot>/ouster/metadata |
std_msgs/msg/String | LiDAR | - | . |
<robot>/ouster/points |
sensor_msgs/msg/PointCloud2 | LiDAR | 20 Hz | . |
<robot>/ouster/imu |
sensor_msgs/msg/Imu | LiDAR | 100 Hz | . |
<robot>_<env>_imu_gps.db3 | ||||
<robot>/imu/mag |
sensor_msgs/msg/MagneticField | IMU | 500 Hz | . |
<robot>/imu/data |
sensor_msgs/msg/Imu | IMU | 500 Hz | Raw IMU measurements. |
<robot>/imu/pressure |
sensor_msgs/msg/FluidPressure | IMU | 500 Hz | Air pressure measurements. |
<robot>/gnss_1/llh_position |
sensor_msgs/msg/NavSatFix | GPS | 2 Hz | Rear left RTK GPS measurements. |
<robot>/gnss_2/llh_position |
sensor_msgs/msg/NavSatFix | GPS | 2 Hz | Rear right RTK GPS measurements. |
<robot>_<env>_camera_rgb.db3 | ||||
<robot>/camera/color/camera_info |
sensor_msgs/msg/CameraInfo RGB-D | 10 Hz | Camera intrinsic/distortion parameters. | |
<robot>/camera/color/image_raw |
sensor_msgs/msg/Image | RGB-D | 10 Hz | Images captured by front camera. |
<robot>/camera/color/metadata |
realsense2_camera/msg/Metadata | RGB-D | 10 Hz | ._ |
<robot>_<env>_camera_depth.db3 | ||||
<robot>/camera/depth/camera_info |
sensor_msgs/msg/CameraInfo | RGB-D | 10 Hz | Camera intrinsic/distortion parameters. |
<robot>/camera/depth/image_raw |
sensor_msgs/msg/Image | RGB-D | 10 Hz | Images captured by front camera. |
<robot>/camera/depth/metadata |
realsense2_camera/msg/Metadata | RGB-D | 10 Hz | ._ |
We’ll keep this section updated as the dataset evolves. Feel free to open an issue if anything seems unclear or incomplete.
Please Note: The order of this is likely to change with a cleaner layout, but this will quickly get you started.
To convert the dataset to ROS1 bag files, you can use the provided Docker containers in the dataset_tools directory following the steps below. Before proceeding further, please make sure you have Docker installed. You can install Docker following the instructions at this link.
Update the SCRIPTS_DIR and DATASETS_DIR variables run_and_enter_container.sh bash script with the path of the conversion_scripts directory (there's one in the ros1 and ros2 folders) you will be using and where you have saved the CU-Multi dataset, respectively.
Install and enter the Docker container
-
cd dataset_tools
-
cd ros1
-
sudo bash docker/build_docker.sh
-
sudo bash run_and_enter_container.bash
-
source /opt/ros/noetic/setup.bash
While you are in the container, run ros_core. If you want to do this in a tmux session, even better. Open a new window and repeat entering the container like above if not using a tmux session. Now enter /root/conversion_scripts directory. In this directory is the Python file for converting the unstructured CU-Multi dataset into a ROS1 rosbag file.
First, edit the Python file with the environment and corresponding robot you would like to convert.
Now run the Python file with:
python3 make_ros1_bag.py.
Install and enter the Docker container
-
cd dataset_tools
-
cd ros2
-
sudo bash docker/build_docker.sh
-
sudo bash run_and_enter_container.bash
Enter the /root/conversion_scripts directory. In this directory is the Python file for converting the unstructured CU-Multi dataset into a ROS2 db3 file.
First, edit the Python file with the environment and corresponding robot you would like to convert.
Now run the Python file with:
python3 make_ros2_bag.py.