在 ROS 2 中,录制数据集(bag)的工具是 rosbag2。它允许你记录和回放 ROS 2 中的话题数据。


1. 安装 rosbag2

如果你已经安装了 ROS 2,rosbag2 通常已经包含在默认安装中。如果没有,可以通过以下命令安装:

sudo apt install ros-<ros2-distro>-ros2bag ros-<ros2-distro>-rosbag2-storage-default-plugins

<ros2-distro> 替换为你的 ROS 2 发行版名称(如 humblefoxy)。


2. 录制数据集

基本命令

使用以下命令录制指定话题的数据:

ros2 bag record <topic1> <topic2> ...

例如,录制 /camera/image_raw/odom 话题:

ros2 bag record /camera/image_raw /odom
指定存储目录

默认情况下,录制的数据会存储在当前目录下的一个以时间戳命名的文件夹中。你可以通过 -o 参数指定输出目录:

ros2 bag record -o my_bag /camera/image_raw /odom
录制所有话题

如果你想录制所有活跃的话题,可以使用 -a 参数:

ros2 bag record -a
设置录制格式

rosbag2 支持多种存储格式(如 SQLite3、MCAP)。默认格式是 SQLite3。你可以通过 --storage 参数指定格式:

ros2 bag record -o my_bag --storage mcap /camera/image_raw

3. 查看录制信息

录制完成后,可以使用以下命令查看录制的 bag 文件信息:

ros2 bag info my_bag

这将显示 bag 文件的话题列表、消息数量、持续时间等信息。


4. 回放数据集

使用以下命令回放录制的 bag 文件:

ros2 bag play my_bag

默认情况下,bag 文件会以录制时的速度回放。你可以通过 -r 参数调整回放速度:

ros2 bag play -r 2 my_bag  # 以 2 倍速回放

5. 高级功能

分割 bag 文件

如果录制时间较长,bag 文件可能会变得非常大。你可以通过 --max-bag-size 参数设置单个 bag 文件的最大大小(单位:MB):

ros2 bag record -o my_bag --max-bag-size 100 /camera/image_raw
录制特定时间段

你可以通过 --duration 参数设置录制的持续时间(单位:秒):

ros2 bag record -o my_bag --duration 60 /camera/image_raw
录制 QoS 配置

ROS 2 支持多种 QoS(服务质量)配置。你可以通过 --qos-profile-overrides-path 参数指定 QoS 配置文件:

ros2 bag record -o my_bag --qos-profile-overrides-path qos_overrides.yaml /camera/image_raw

qos_overrides.yaml 文件的内容示例:

/camera/image_raw:
  reliability: reliable
  durability: transient_local

6. 示例:录制相机和 IMU 数据

假设你需要录制 /camera/image_raw/imu/data 话题的数据:

ros2 bag record -o my_dataset /camera/image_raw /imu/data

录制完成后,回放数据:

ros2 bag play my_dataset

7. 注意事项

  • 存储空间:录制 bag 文件会占用大量磁盘空间,尤其是高频率的话题(如图像、点云)。确保有足够的存储空间。
  • 性能影响:录制大量数据可能会影响系统性能,尤其是在资源有限的设备上。
  • 兼容性:确保录制的 bag 文件与回放时的 ROS 2 版本兼容。

如果有更多需求(如录制特定时间段或调整 QoS),可以参考 ros2 bag 的官方文档:ROS 2 rosbag2 文档

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐