🧠 ROS2 MCAP --> LeRobot 数据集完整转换指南(星海图 Galaxea R1Lite 实战)

很多人在第一次把机器人实采数据接入 LeRobot 时,都会被卡在:

  • ROS msg 找不到
  • pandas / numpy 地狱
  • converter 能跑但接口不匹配
  • 同样的命令,别人能跑我不能

本文基于 R1Lite + ROS2 Humble + Galaxea Toolkit 的真实环境,给出一套从零到成功的完整流程。


一、最终目标

把:xxx_RAW.mcap
转换为:lerobot dataset 格式

用于:

  • policy 训练
  • replay
  • 统计

二、系统整体依赖关系(理解这张图非常重要)

MCAP 数据

dataset_converter.py
↓ 需要
├── ROS2 python (rclpy)
├── 自定义消息 hdas_msg
└── Galaxea 版本的 LeRobot(支持 task 参数)

生成 LeRobot dataset

(只要缺一个,就会报错。)

三、环境准备

必须满足

Ubuntu 22.04

ROS2 Humble

Python 3.10

一个干净的 conda 环境

创建环境

conda create -n mcap_convert python=3.10 -y
conda activate mcap_convert

四、安装 正确版本 的 LeRobot(最关键)

⚠️⚠️⚠️
官方 HuggingFace 的 LeRobot 不能用。
Galaxea 的 converter 依赖的是:

LeRobotDataset.add_frame(..., task=...)

只有他们 fork 的版本才支持。

安装方式(推荐 zip,避免 git 网络问题)

wget https://codeload.github.com/OpenGalaxea/GalaxeaLeRobot/zip/refs/heads/main -O galaxea_lerobot.zip
unzip galaxea_lerobot.zip

python -m pip uninstall -y lerobot
python -m pip install -e ~/GalaxeaLeRobot-main

验证(必须成功)

python -c "import inspect; from lerobot.datasets.lerobot_dataset import LeRobotDataset; print(inspect.signature(LeRobotDataset.add_frame))"


应该看到

(self, frame: dict, task: str, timestamp: ...)


五、编译 hdas_msg(第二大雷点)

mcap 里的 topic 使用了厂商自定义消息。

如果不编译 → 必然报错:

No module named 'hdas_msg'


建 workspace

mkdir -p ~/hdas_msg_ws/src
ln -s ~/projects/lerobot/GalaxeaLeRobotToolkit/src/msg/hdas ~/hdas_msg_ws/src/hdas_msg


编译

cd ~/hdas_msg_ws
source /opt/ros/humble/setup.bash
colcon build --symlink-install


验证

source ~/hdas_msg_ws/install/setup.bash
python -c "import hdas_msg; print(hdas_msg.__file__)"



六、开始转换

每次运行前都要:

source /opt/ros/humble/setup.bash
source ~/hdas_msg_ws/install/setup.bash



单个raw

python -m dataset_converter \
  --input_dir "..._RAW" \
  --output_dir "~/lerobot_out" \
  --robot_type "R1Lite" \
  --dataset_name "demo"



批量转换

只要把 input_dir 指向父目录即可。

python -m dataset_converter \
  --input_dir "/mnt/e/.../20260205" \
  --output_dir "~/lerobot_out" \
  --robot_type "R1Lite" \
  --dataset_name "all"



七、成功标志

你会看到类似于

Processed xx episodes
Merged xx episodes with xxxx frames



数据在

lerobot_out/xxx/



八、踩坑总结(最重要)

坑 1:装了官方 lerobot

表现:

unexpected keyword argument 'task'



解决:→ 换 Galaxea 版本。

坑 2:没 build hdas_msg

表现:

No module named hdas_msg



解决:→ colcon build。

坑 3:只 source humble,没 source overlay

表现:
明明 build 了,还是 import 不到。

解决:

source ~/hdas_msg_ws/install/setup.bash



坑 4:git clone 很慢

解决:
→ 用 zip 下载。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐