基于 Meta Quest 3 + Dobot CR5A + 双路相机 的机器人数据采集、LeRobot 数据转换、策略训练与真机推理项目。
项目默认硬件:
640x480 @ 30 FPS[!CAUTION] 真机运行前请确认急停可用、工作空间内无人,并先使用模拟模式或关闭
EXECUTE检查相机画面和模型输出。
Dobot_CRtrainer/
├── Data_Collections/ # VR 遥操作与原始数据采集
├── Dobot_Init/ # 机械臂状态控制和初始位姿恢复
├── Dobot_Train/ # 数据检查、诊断和模型训练
├── config/ # 相机、机械臂和采集配置
├── scripts/ # 数据转换与模型推理
├── quest_unity_app/ # Quest APK
├── install_dobot_vr_teleop.sh # 遥操作环境安装脚本
├── install_dobot_lerobot.sh # 训练推理环境安装脚本
└── requirements.txt
/home/dobot/miniforge3进入项目目录:
cd /home/dobot/桌面/Dobot_CRtrainer
安装 VR 遥操作环境:
bash install_dobot_vr_teleop.sh
安装 LeRobot 训练推理环境:
bash install_dobot_lerobot.sh
安装脚本会创建:
/home/dobot/miniforge3/envs/dobot-vr-teleop
/home/dobot/miniforge3/envs/dobot-lerobot
只检查安装步骤、不实际安装:
bash install_dobot_vr_teleop.sh --dry-run
bash install_dobot_lerobot.sh --dry-run
激活遥操作环境:
conda activate dobot-vr-teleop
查看机械臂状态:
python Dobot_Init/robot_state_control.py status
使能机械臂:
python Dobot_Init/robot_state_control.py
先检查初始位姿恢复流程:
python Dobot_Init/restore_initial_pose.py --dry-run
确认安全后恢复初始位姿:
python Dobot_Init/restore_initial_pose.py
默认机械臂地址为 192.168.5.100,初始 TCP 位姿为:
[141, -473, 469, 180, 0, -90]
先使用模拟机械臂验证双路相机:
python Data_Collections/vr_teleop/collection/start_vr_teleop.py \
--robot-mode mock \
--dry-run \
--no-gripper \
--camera-preview
正常情况下会显示顶部相机和腕部相机两个画面。相机设备、序列号、分辨率和
帧率在 config/camera.yaml 中配置。
Quest 端安装包:
quest_unity_app/Builds/DobotVrTeleop.apk
默认 VR 网络端口:
5005/UDP5006/UDPconda activate dobot-vr-teleop
python Data_Collections/vr_teleop/collection/start_vr_teleop.py \
--record-data \
--dataset-dir datasets \
--task test123
Quest 控制器操作:
| 按键 | 功能 |
|---|---|
A | 校准 VR 控制器与机械臂 |
Grip | 按住后允许机械臂跟随 |
B | 开始或结束一个 episode |
Trigger | 控制夹爪开合 |
原始数据保存结构:
datasets/<task>/episodes/episode_<timestamp>/
├── metadata.json
├── frames.jsonl
├── data.npz
└── images/
├── top/rgb/
└── wrist/rgb/
检查原始数据:
python Dobot_Train/inspect_dataset.py \
--dataset-dir datasets \
--task test123 \
--validate-npz
激活训练环境:
conda activate dobot-lerobot
打开 scripts/convert_to_lerobot.py,修改文件顶部的用户配置:
DATASET_DIR = "datasets"
TASK_NAME = "test123"
OUTPUT_DIR = "datasets/test123/test123_lerobot"
REPO_ID = "local/dobot_cr5a_test123"
TASK_PROMPT = "Pick up the gear and place it at the target position."
OVERWRITE_EXISTING = True
然后直接运行:
python scripts/convert_to_lerobot.py
这些参数必须保持对应:
| 参数 | 含义 |
|---|---|
TASK_NAME | 原始数据所在的任务目录名 |
OUTPUT_DIR | 转换后的本地 LeRobot 数据集目录 |
REPO_ID | 写入数据集元数据的唯一标识 |
TASK_PROMPT | 每一帧保存的自然语言任务 |
OVERWRITE_EXISTING | 是否覆盖已有转换结果 |
转换后的主要字段:
observation.images.top
observation.images.wrist
observation.state
action
task
其中 observation.state 和 action 均为:
[x, y, z, rx, ry, rz, gripper]
夹爪约定:0 = 闭合,1 = 打开。
在 Dobot_Train/diagnose_training_data.py 顶部设置原始数据目录和 LeRobot
数据目录,然后运行:
python Dobot_Train/diagnose_training_data.py
正式训练前应确认:
640x480打开 Dobot_Train/train.py,修改顶部训练配置:
SELECTED_POLICY = "act" # 也可选择 pi0 或 pi05
EXPERIMENT_NAME = "test_act"
DATASET_REPO_ID = "local/dobot_cr5a_test123"
DATASET_ROOT = "datasets/test123/test123_lerobot"
DEVICE = "cuda"
STEPS = 5000
BATCH_SIZE = 8
NUM_WORKERS = 8
SAVE_FREQUENCY = 5000
检查最终训练命令:
python Dobot_Train/train.py --dry-run
开始训练:
python Dobot_Train/train.py
Pi0 和 Pi0.5 通常需要更大的显存,并可能需要提前登录 Hugging Face:
hf auth login
hf auth whoami
训练结果默认保存在:
outputs/train/<experiment_name>/
打开 scripts/Dobot_inference.py:
MODEL_REGISTRY 中登记 checkpoint、策略类型和相机映射。SELECTED_MODEL 设置为对应注册名称。TASK_PROMPT 与训练数据中的任务提示一致。第一次测试请关闭真机执行:
SELECTED_MODEL = "your_model_name"
EXECUTE = False
ENABLE_ROBOT = False
EXECUTE_GRIPPER = False
SHOW_CAMERA = True
RECORD_VIDEO = True
运行:
conda activate dobot-lerobot
python scripts/Dobot_inference.py
检查两路画面、模型输出和录制视频正常后,再启用真机:
EXECUTE = True
ENABLE_ROBOT = True
EXECUTE_GRIPPER = True
推理视频默认保存在:
outputs/inference_videos/
本机运行会直接显示相机窗口。通过 SSH 运行时,脚本可按
PREVIEW_TARGET = "host" 将窗口显示在机器人主机桌面;也可以使用 X11
转发并将 PREVIEW_TARGET 设置为 "session"。
| 现象 | 检查项 |
|---|---|
| 相机窗口无法显示 | OpenCV 是否带 GTK;DISPLAY 是否正确;可改用 ffplay |
| D435 无图像 | USB 3.0 连接、设备序列号、RealSense 占用情况 |
| VR 操作出现 timeout | Quest Wi-Fi、UDP 端口、防火墙、主机负载和采集写盘速度 |
| 训练 GPU 利用率低 | data_s、DataLoader worker 数、图像解码和磁盘速度 |
| 推理画面正常但机械臂不动 | EXECUTE、ENABLE_ROBOT、robot mode 和安全限制 |
| 腕部持续旋转 | 欧拉角分支、训练数据对齐和 ORIENTATION_LIMIT_DEG |
| 每次重新下载权重 | 检查 Hugging Face 缓存目录与离线配置 |
项目中的 LeRobot、Pi 系列模型、RealSense SDK、Dobot SDK 和其他第三方组件 分别遵循其原始许可证。发布或商用前请核对各依赖及模型权重的许可要求。
4 commits
Python
90.9%
MDX
8.8%
基于 Meta Quest 3 + Dobot CR5A + 双路相机 的机器人数据采集、LeRobot 数据转换、策略训练与真机推理项目。
项目默认硬件:
640x480 @ 30 FPS[!CAUTION] 真机运行前请确认急停可用、工作空间内无人,并先使用模拟模式或关闭
EXECUTE检查相机画面和模型输出。
Dobot_CRtrainer/
├── Data_Collections/ # VR 遥操作与原始数据采集
├── Dobot_Init/ # 机械臂状态控制和初始位姿恢复
├── Dobot_Train/ # 数据检查、诊断和模型训练
├── config/ # 相机、机械臂和采集配置
├── scripts/ # 数据转换与模型推理
├── quest_unity_app/ # Quest APK
├── install_dobot_vr_teleop.sh # 遥操作环境安装脚本
├── install_dobot_lerobot.sh # 训练推理环境安装脚本
└── requirements.txt
/home/dobot/miniforge3进入项目目录:
cd /home/dobot/桌面/Dobot_CRtrainer
安装 VR 遥操作环境:
bash install_dobot_vr_teleop.sh
安装 LeRobot 训练推理环境:
bash install_dobot_lerobot.sh
安装脚本会创建:
/home/dobot/miniforge3/envs/dobot-vr-teleop
/home/dobot/miniforge3/envs/dobot-lerobot
只检查安装步骤、不实际安装:
bash install_dobot_vr_teleop.sh --dry-run
bash install_dobot_lerobot.sh --dry-run
激活遥操作环境:
conda activate dobot-vr-teleop
查看机械臂状态:
python Dobot_Init/robot_state_control.py status
使能机械臂:
python Dobot_Init/robot_state_control.py
先检查初始位姿恢复流程:
python Dobot_Init/restore_initial_pose.py --dry-run
确认安全后恢复初始位姿:
python Dobot_Init/restore_initial_pose.py
默认机械臂地址为 192.168.5.100,初始 TCP 位姿为:
[141, -473, 469, 180, 0, -90]
先使用模拟机械臂验证双路相机:
python Data_Collections/vr_teleop/collection/start_vr_teleop.py \
--robot-mode mock \
--dry-run \
--no-gripper \
--camera-preview
正常情况下会显示顶部相机和腕部相机两个画面。相机设备、序列号、分辨率和
帧率在 config/camera.yaml 中配置。
Quest 端安装包:
quest_unity_app/Builds/DobotVrTeleop.apk
默认 VR 网络端口:
5005/UDP5006/UDPconda activate dobot-vr-teleop
python Data_Collections/vr_teleop/collection/start_vr_teleop.py \
--record-data \
--dataset-dir datasets \
--task test123
Quest 控制器操作:
| 按键 | 功能 |
|---|---|
A | 校准 VR 控制器与机械臂 |
Grip | 按住后允许机械臂跟随 |
B | 开始或结束一个 episode |
Trigger | 控制夹爪开合 |
原始数据保存结构:
datasets/<task>/episodes/episode_<timestamp>/
├── metadata.json
├── frames.jsonl
├── data.npz
└── images/
├── top/rgb/
└── wrist/rgb/
检查原始数据:
python Dobot_Train/inspect_dataset.py \
--dataset-dir datasets \
--task test123 \
--validate-npz
激活训练环境:
conda activate dobot-lerobot
打开 scripts/convert_to_lerobot.py,修改文件顶部的用户配置:
DATASET_DIR = "datasets"
TASK_NAME = "test123"
OUTPUT_DIR = "datasets/test123/test123_lerobot"
REPO_ID = "local/dobot_cr5a_test123"
TASK_PROMPT = "Pick up the gear and place it at the target position."
OVERWRITE_EXISTING = True
然后直接运行:
python scripts/convert_to_lerobot.py
这些参数必须保持对应:
| 参数 | 含义 |
|---|---|
TASK_NAME | 原始数据所在的任务目录名 |
OUTPUT_DIR | 转换后的本地 LeRobot 数据集目录 |
REPO_ID | 写入数据集元数据的唯一标识 |
TASK_PROMPT | 每一帧保存的自然语言任务 |
OVERWRITE_EXISTING | 是否覆盖已有转换结果 |
转换后的主要字段:
observation.images.top
observation.images.wrist
observation.state
action
task
其中 observation.state 和 action 均为:
[x, y, z, rx, ry, rz, gripper]
夹爪约定:0 = 闭合,1 = 打开。
在 Dobot_Train/diagnose_training_data.py 顶部设置原始数据目录和 LeRobot
数据目录,然后运行:
python Dobot_Train/diagnose_training_data.py
正式训练前应确认:
640x480打开 Dobot_Train/train.py,修改顶部训练配置:
SELECTED_POLICY = "act" # 也可选择 pi0 或 pi05
EXPERIMENT_NAME = "test_act"
DATASET_REPO_ID = "local/dobot_cr5a_test123"
DATASET_ROOT = "datasets/test123/test123_lerobot"
DEVICE = "cuda"
STEPS = 5000
BATCH_SIZE = 8
NUM_WORKERS = 8
SAVE_FREQUENCY = 5000
检查最终训练命令:
python Dobot_Train/train.py --dry-run
开始训练:
python Dobot_Train/train.py
Pi0 和 Pi0.5 通常需要更大的显存,并可能需要提前登录 Hugging Face:
hf auth login
hf auth whoami
训练结果默认保存在:
outputs/train/<experiment_name>/
打开 scripts/Dobot_inference.py:
MODEL_REGISTRY 中登记 checkpoint、策略类型和相机映射。SELECTED_MODEL 设置为对应注册名称。TASK_PROMPT 与训练数据中的任务提示一致。第一次测试请关闭真机执行:
SELECTED_MODEL = "your_model_name"
EXECUTE = False
ENABLE_ROBOT = False
EXECUTE_GRIPPER = False
SHOW_CAMERA = True
RECORD_VIDEO = True
运行:
conda activate dobot-lerobot
python scripts/Dobot_inference.py
检查两路画面、模型输出和录制视频正常后,再启用真机:
EXECUTE = True
ENABLE_ROBOT = True
EXECUTE_GRIPPER = True
推理视频默认保存在:
outputs/inference_videos/
本机运行会直接显示相机窗口。通过 SSH 运行时,脚本可按
PREVIEW_TARGET = "host" 将窗口显示在机器人主机桌面;也可以使用 X11
转发并将 PREVIEW_TARGET 设置为 "session"。
| 现象 | 检查项 |
|---|---|
| 相机窗口无法显示 | OpenCV 是否带 GTK;DISPLAY 是否正确;可改用 ffplay |
| D435 无图像 | USB 3.0 连接、设备序列号、RealSense 占用情况 |
| VR 操作出现 timeout | Quest Wi-Fi、UDP 端口、防火墙、主机负载和采集写盘速度 |
| 训练 GPU 利用率低 | data_s、DataLoader worker 数、图像解码和磁盘速度 |
| 推理画面正常但机械臂不动 | EXECUTE、ENABLE_ROBOT、robot mode 和安全限制 |
| 腕部持续旋转 | 欧拉角分支、训练数据对齐和 ORIENTATION_LIMIT_DEG |
| 每次重新下载权重 | 检查 Hugging Face 缓存目录与离线配置 |
项目中的 LeRobot、Pi 系列模型、RealSense SDK、Dobot SDK 和其他第三方组件 分别遵循其原始许可证。发布或商用前请核对各依赖及模型权重的许可要求。
4 commits
Python
90.9%
MDX
8.8%