Dagger 是一个用于机器人数据采集和控制的工具,支持:
- 四臂机械臂的主从控制和数据采集
- 模型推理模式和人工接管模式切换
- 同步和异步两种数据采集模式
cd /home/agilex/work_space_hqr/dagger
python dagger.py --ckpt_dir /path/to/checkpoint必需参数:
--ckpt_dir: checkpoint 目录路径(用于数据保存路径组织)
常用可选参数:
--task_id: 任务ID/权重名称(例如:policy_epoch_2000_seed_0),如果不指定则使用 ckpt_dir 的文件夹名--scene_dir: 场景名称(默认:fold_towels)--collection_mode: 数据采集模式,sync(默认)或async--save_data_base_dir: 数据保存基础目录(默认:/home/agilex/Limx-Benchmark-RL/buffer)--debug: 开启调试日志
完整示例:
python dagger.py \
--ckpt_dir /home/agilex/checkpoint/act/model_name \
--task_id policy_epoch_2000_seed_0 \
--scene_dir fold_towels \
--collection_mode async \
--debug程序运行后,可以通过键盘快捷键控制:
| 按键 | 功能 | 说明 |
|---|---|---|
| s | 开始采集 | 启动数据采集,所有机械臂切换为从臂模式 |
| h | 人工接管 | 切换到人工控制模式,后臂作为主臂 |
| i | 模型推理 | 切换回模型推理模式,所有臂从模型接收指令 |
| r | 结束采集 | 停止采集,询问成功/失败,然后归位 |
| q | 退出程序 | 退出程序并归位 |
-
启动程序
python dagger.py --ckpt_dir /path/to/checkpoint
-
开始采集 - 按
s键- 所有机械臂切换为从臂模式
- 开始接收模型指令并采集数据
-
切换模式(可选)
- 按
h键:切换到人工接管模式(后臂作为主臂) - 按
i键:切换回模型推理模式
- 按
-
结束采集 - 按
r键- 停止数据采集
- 输入
1(成功)或0(失败) - 如果成功,输入分数(0-5)
- 机械臂自动归位
-
退出程序 - 按
q键- 退出程序
- 机械臂自动归位
- 特点:先同步所有传感器数据,再保存
- 优点:数据时间戳完全对齐
- 缺点:如果某个传感器数据缺失,整帧数据可能丢失
- 适用场景:需要严格时间对齐的数据
python dagger.py --ckpt_dir /path/to/checkpoint --collection_mode sync- 特点:每个传感器独立保存,先在线采集,再离线同步
- 优点:不会因为单个传感器缺失而丢失整帧数据
- 缺点:时间戳可能不完全对齐(需要后续同步)
- 适用场景:传感器采集频率不一致或可能缺失数据
python dagger.py --ckpt_dir /path/to/checkpoint --collection_mode async数据保存路径结构:
{save_data_base_dir}/{scene_dir}/{YYYYMMDD}/{checkpoint_folder_name}/{task_id}/
└── episode_XXX/
├── sensor_index.json # 传感器索引文件
├── images/ # 图像数据
│ ├── cam_high_high/
│ ├── cam_left_wrist/
│ └── cam_right_wrist/
└── actions/ # 动作数据
├── action_raw_left_*.npy
├── action_raw_right_*.npy
├── puppet_arm_left_*.npy
└── puppet_arm_right_*.npy
示例路径:
/home/agilex/Limx-Benchmark-RL/buffer/fold_towels/20251222/RealRobot_AgileX_xxx/policy_epoch_2000_seed_0/episode_000/
使用 --debug 参数启动,会打印详细的保存信息:
python dagger.py --ckpt_dir /path/to/checkpoint --debug默认保存在 /home/agilex/Limx-Benchmark-RL/buffer/,可以通过 --save_data_base_dir 参数修改。
在按 r 键结束采集时,程序会询问:
- 输入
1表示成功 - 输入
0表示失败 - 如果成功,还会询问分数(0-5)
- 同步模式:所有传感器数据必须同时到达才保存,时间戳完全对齐
- 异步模式:每个传感器独立保存,时间戳可能不完全对齐,需要后续使用
sync_timestamps.py工具同步
数据保存在 episode 目录下,每个 episode 包含:
sensor_index.json: 所有传感器数据的时间戳索引images/: 图像文件actions/: 动作数据文件
可以使用 tools/visualize_actions_new.py 工具可视化数据。
Dagger 提供了多个工具脚本,位于 tools/ 目录:
visualize_actions_new.py: 可视化动作数据sync_timestamps.py: 同步异步模式下的时间戳(待测试!!!)convert_data_format.py: 转换数据格式(废弃)
- 启动前确保 ROS 环境正常:确保所有必要的 ROS topic 都在发布
- 检查机械臂状态:确保机械臂已正确初始化
- 数据保存空间:确保有足够的磁盘空间保存数据
- 时间戳同步:如果使用异步模式,建议采集后使用
sync_timestamps.py同步时间戳