)
ROS 数据采集利器rosbag 与 rosbag→parquet→LeRobot 实战十通用基础优先 · 第十篇数采核心章ROS 通识系列Docker 实战一图读懂本文录制 → 回放 → 过滤查看 → bag→parquet→LeRobot 转换 → 数采闭环。本篇是数采核心章。前面九篇都是地基这一篇直接落到数采平台的命根子rosbag 把 Topic 流录下来就是我们的训练数据来源。再顺手把bag → parquet → LeRobot 数据集这条转换链路跑通——正是项目 adapter 层的核心。一、rosbag 是什么rosbag 是 ROS 的录制/回放工具把指定话题的消息含时间戳、类型按序存成文件事后可原样回放。对具身智能而言它就是机器人演示数据的容器。新手视角 · rosbag 像行车记录仪机器人看到的相机、感觉到关节角/力、做过的指令全部带时间戳录下来。事后你能在电脑上重演这一趟——回放时所有数据像录制时一样重新发出训练、标注、排查全都靠它。数据集质量的上限在按下录制键那一刻就决定了。二、Docker 实战录制与回放# 录制全部话题容器内需先 source且话题已在发布 ros2 bag record -a -o /data/session1ros2 bag record -o /data/session1/joint_states /camera/color/image_raw /tf /tf_staticros2 bag info /data/session1ros2 bag play /data/session1 --clock数采要点① 务必连同/tf/tf_static一起录否则位姿链断裂② 用--compression压图像zstdbag 体积能小几倍③ 录制频率要满足亚毫秒级时间同步的硬要求见第 12 篇。老手温故 · 录制决策的四个权衡①格式——ROS 2 新版默认 mcap自描述、查询快老环境 sqlite3对外交付建议 mcap②压缩——图像 zstd 压缩比约 3-5 倍但录制端吃 CPU机载设备要留余量折中方案是录原始、落盘后离线压缩③分片——--max-bag-size控制单文件大小避免断点续传困难④回放确定性——回放不等于实时磁盘抖动会让节奏失真严格复现要按时间戳驱动--clockuse_sim_time而不是按墙钟。三、rosbag → parquet把数据变成表格bag 是 ROS 私有格式训练框架LeRobot、PyTorch读不了。我们要转成通用的 parquet 列存。用rosbag2_py读、pandas写import rosbag2_py from rclpy.serialization import deserialize_message from sensor_msgs.msg import JointState import pandas as pdreader rosbag2_py.SequentialReader()reader.open(rosbag2_py.StorageOptions(uri‘/data/session1’, storage_id‘sqlite3’),rosbag2_py.ConverterOptions(‘cdr’, ‘cdr’))rows []while reader.has_next():topic, data, ts reader.read_next()if topic ‘/joint_states’:m deserialize_message(data, JointState)rows.append({‘ts_ns’: ts, ‘name’: m.name,‘pos’: m.position, ‘eff’: m.effort})df pd.DataFrame(rows)df.to_parquet(‘/data/session1_joints.parquet’) # 列存训练友好这一段就是 adapter 层的采集→转换原型ROS 私有 → 通用表格。四、parquet → LeRobot 数据集LeRobot 数据集规范我们项目已对齐把一次演示建成一个 episode每个 episode 是一个 parquet列大致为列含义timestamp帧时间戳与 bag 对齐observation.images.cam图像帧observation.state本体状态关节角/力矩action动作关节指令把上一步的 parquet 按 episode 切分、对齐图像时序、补上 action 列即得到 LeRobot 可直接LeRobotDataset加载的数据集——这也是傅利叶 GR-3、乐聚 OpenLET 都已对齐的标准。五、接回数采平台闭环整条链路本体驱动发 Topic → rosbag 录 → adapter 转 parquet → 归位成 LeRobot episode → 训练 VLA/IL。rosbag 是入口统一接口第 05 篇是跨品牌前提TF第 07 篇是坐标还原保证。这一篇把前面所有地基串成了数采闭环。六、小结与下篇rosbag 录 Topic 流 数采数据来源务必连 TF 一起录、按需压缩ros2 bag record / info / play是录制三件套用rosbag2_pypandas把 bag 转 parquetadapter 层核心parquet 按 episode 归位成 LeRobot 数据集对接训练下一篇可视化与调试工具rviz / rqt采前自检、采后回放排查。参考资料ROS 2 官方 rosbag2 文档LeRobot Dataset 格式 github.com/huggingface/lerobot项目已对齐CC-BY-NC-SA 注意商用授权rclpy.serialization API。示例基于 ros:jazzy。