Files
roboimi/README.md
2026-02-07 09:57:59 +08:00

209 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RoboIMI
基于 MuJoCo 的机器人仿真与模仿学习框架,实现了使用扩散策略的视觉-语言-动作VLA模型用于机器人操作任务。
## 主要特性
- **多机器人平台支持**:支持 Diana 和 vx300s 机械臂,可扩展至其他机器人
- **扩散策略**采用最先进的扩散模型DDPM/DDIM进行动作序列预测
- **视觉-语言-动作模型**:使用 ResNet-18 视觉骨干网络和空间 softmax 进行视觉特征提取
- **灵活的控制模式**:支持关节空间和末端执行器(笛卡尔)控制
- **Hydra 配置系统**:模块化配置系统,便于实验
- **HDF5 数据集格式**:高效存储和加载演示数据
- **单臂和双臂任务**:支持单臂和双臂操作任务
## 安装
### 环境要求
- Python 3.8+
- 支持 CUDA 的 GPU训练时推荐
- Conda 或 Miniconda
### 安装步骤
```bash
# 克隆仓库
git clone <repository-url>
cd robo-imi-act
# 创建并激活 conda 环境
conda env create -f environment.yml
conda activate roboimi
# 以开发模式安装包
pip install -e .
```
## 快速开始
### 1. 数据采集
在仿真环境中记录演示轨迹:
```bash
# 为 vx300s 机器人记录轨迹
python roboimi/demos/record_sim_episodes.py
# 为 Diana 机器人记录轨迹
python roboimi/demos/diana_record_sim_episodes.py
```
轨迹数据以 HDF5 文件格式保存,包含机器人状态、动作和相机观测。
### 2. 计算数据集统计信息
训练前需要计算归一化统计数据:
```bash
python roboimi/vla/scripts/calculate_stats.py
```
该命令会生成 `data_stats.pkl` 文件,包含动作和观测的均值/标准差或最小值/最大值。
### 3. 训练 VLA 模型
使用采集的数据训练视觉-语言-动作模型:
```bash
# 使用默认配置训练
python roboimi/demos/vla_scripts/train_vla.py
# 覆盖特定参数
python roboimi/demos/vla_scripts/train_vla.py train.batch_size=32 train.lr=5e-5 train.max_steps=50000
# 使用不同的模型架构
python roboimi/demos/vla_scripts/train_vla.py agent=resnet_diffusion data=resnet_dataset
```
训练输出保存至 `outputs/<日期>/<时间>/`,模型检查点保存至 `checkpoints/`
### 4. 评估模型
在仿真环境中评估训练好的模型:
```bash
# 使用默认配置评估(使用最佳检查点)
python roboimi/demos/vla_scripts/eval_vla.py
# 指定检查点和评估轮数
python roboimi/demos/vla_scripts/eval_vla.py eval.ckpt_path=checkpoints/vla_model_step_8000.pt eval.num_episodes=5
# 启用动作平滑以获得更流畅的执行
python roboimi/demos/vla_scripts/eval_vla.py eval.use_smoothing=true eval.smooth_alpha=0.5
```
## 项目结构
```
robo-imi-act/
├── roboimi/
│ ├── assets/ # 机器人模型和资源
│ │ ├── models/manipulators/ # URDF 和 MuJoCo XML 文件
│ │ └── robots/ # 机器人抽象类
│ ├── envs/ # 仿真环境
│ │ ├── mujoco_base.py # MuJoCo 环境基类
│ │ ├── single_base.py # 单臂任务基类
│ │ └── double_base.py # 双臂任务基类
│ ├── vla/ # 视觉-语言-动作模型
│ │ ├── agent.py # VLAAgent训练与推理
│ │ ├── models/
│ │ │ ├── backbones/ # 视觉编码器ResNet 等)
│ │ │ └── heads/ # 策略头(扩散 UNet1D
│ │ ├── conf/ # Hydra 配置文件
│ │ └── scripts/ # 训练和工具脚本
│ └── demos/ # 演示脚本和示例
├── checkpoints/ # 保存的模型检查点
├── outputs/ # 训练输出Hydra
├── environment.yml # Conda 环境配置
└── CLAUDE.md # Claude Code 开发指南
```
## 架构设计
### VLA 训练流程
```
HDF5 轨迹数据 → Dataset → DataLoader → VLAAgent → 模型检查点
```
**模型组件**
- **视觉骨干网络**ResNet-18 + 空间 softmax用于从相机图像中提取视觉特征
- **扩散头**:条件 UNet1D使用 DDPM/DDIM 预测动作序列
- **VLAAgent**:组合视觉编码器和扩散策略,处理训练和推理
### 配置系统
基于 Hydra 的配置文件位于 `roboimi/vla/conf/`
- `config.yaml`:主要训练配置(批次大小、学习率、设备)
- `agent/resnet_diffusion.yaml`:模型架构(动作维度、观测维度、时间窗口)
- `data/resnet_dataset.yaml`:数据集路径、相机名称、归一化类型
- `eval/eval.yaml`:评估设置(检查点路径、轮数、平滑参数)
使用配置插值保持一致性:`${agent.obs_horizon}`
### 数据集格式
HDF5 轨迹文件(`episode_*.hdf5`)包含:
- `action`:机器人动作 `[T, action_dim]`
- `observations/qpos`:关节位置 `[T, obs_dim]`
- `observations/images/<cam_name>`:相机图像 `[T, H, W, C]`
统计文件(`data_stats.pkl`)存储归一化参数(最小值/最大值/均值/标准差)。
## 开发指南
### 添加新机器人
1.`roboimi/assets/models/manipulators/<robot_name>/` 创建 URDF/XML 文件
2.`roboimi/assets/robots/<robot_name>.py` 定义机器人类(继承自 `arm_base.py`
3.`roboimi/envs/<robot_name>_*.py` 创建环境类
4. 如需要,在常量中注册机器人
### 修改 VLA 架构
1. **自定义骨干网络**:在 `roboimi/vla/models/backbones/` 创建新类,继承 `VLABackbone`
2. **自定义头部**:在 `roboimi/vla/models/heads/` 创建新类,继承 `VLAHead`
3. **更新配置**:在 `roboimi/vla/conf/agent/` 添加新的 YAML 文件
4. **接口定义**:参考 `roboimi/vla/core/interfaces.py` 的抽象基类
### 训练最佳实践
- 采集新数据后务必运行 `calculate_stats.py`
- 训练时会归一化输入/输出;推理时使用检查点中保存的统计信息进行反归一化
- 模型预测 `pred_horizon` 步,但只执行前 `action_horizon`
- 推理使用 DDIM10 步)快速采样;训练使用 DDPM100 步)
- 监控验证损失以防止过拟合
## 技术细节
- **坐标系**关节空间qpos或末端执行器空间xyz + rpy + 夹爪)
- **动作时间窗口**`obs_horizon` 为观测窗口,`pred_horizon` 为预测窗口,`action_horizon` 为执行窗口
- **归一化**:对稳定训练至关重要 - 训练前务必计算统计信息
- **推理加速**:使用 DDIM 调度器,比训练时的 DDPM 快 10 倍
- **设备配置**:通过 `train.device` 配置cuda/cpu
## 许可证
[在此添加许可证信息]
## 引用
如果您在研究中使用了本代码库,请引用:
```bibtex
[在此添加引用信息]
```
## 贡献
欢迎贡献!请随时提交 Pull Request 或开启 Issue。
## 致谢
本项目基于以下开源项目构建:
- [MuJoCo](https://mujoco.org/) - 物理仿真引擎
- [PyTorch](https://pytorch.org/) - 深度学习框架
- [Hydra](https://hydra.cc/) - 配置管理系统
- [Diffusers](https://github.com/huggingface/diffusers) - 扩散模型库