第一次接触Mobile Aloha项目时,我被它强大的模仿学习能力吸引,但环境配置过程确实踩了不少坑。这里分享我在Windows和Ubuntu双系统下的实战经验,帮你避开那些让人头疼的依赖问题。
创建conda环境是第一步,但要注意python版本必须锁定3.8.10。我试过用3.9和3.10都会导致后续Robomimic安装失败。建议直接使用以下命令建立纯净环境:
bash复制conda create -n aloha python=3.8.10
conda activate aloha
安装基础依赖时有个细节容易被忽略:pyquaternion必须最先安装,否则后续mujoco导入会报错。正确的安装顺序应该是:
bash复制pip install pyquaternion
pip install mujoco==2.3.7 dm_control==1.0.14
pip install pyyaml rospkg pexpect
官方文档只说需要GPU版本,但没提CUDA版本兼容性问题。经过多次测试,我发现:
实测有效的安装命令:
bash复制conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
验证安装是否成功时,别只用torch.cuda.is_available(),还要实际跑个矩阵运算:
python复制import torch
x = torch.rand(5,3).cuda()
print(x@x.T) # 应该输出GPU上的计算结果
这个依赖项堪称最大拦路虎,直接pip install十有八九会失败。正确的编译姿势是:
bash复制pip install CMake
sudo apt-get install cmake # Linux系统需要
python复制# 原代码会并行编译导致失败
subprocess.check_call("cmake ..", cwd=build_dir, shell=True)
subprocess.check_call("make", cwd=build_dir, shell=True) # 添加这行
bash复制sudo apt-get install libegl1-mesa-dev # Ubuntu
brew install mesa # MacOS
官方推荐的pip install robomimic根本不能用!因为Mobile Aloha需要的是带diffusion_policy的分支版本。经过多次尝试,正确的安装流程应该是:
bash复制pip uninstall robomimic
bash复制git clone https://github.com/ARISE-Initiative/robomimic.git -b diffusion-policy-mg
bash复制cd robomimic
pip install -v -e . # -v参数能看到详细安装过程
安装完成后务必验证:
python复制import robomimic
print(robomimic.__version__) # 应该显示1.3.0+
官方提供的record_sim_episodes.py脚本有几个隐藏参数很实用:
bash复制python record_sim_episodes.py \
--task_name sim_transfer_cube_scripted \
--dataset_dir ./data \
--num_episodes 50 \
--episode_length 200 \ # 控制每个episode长度
--camera_names front top # 多视角采集
如果想让渲染窗口显示更流畅,可以加上:
bash复制--onscreen_render --render_frame_sleep 10
新手最容易犯的错误是目录结构不对,正确的格式应该是:
code复制data/
├── sim_transfer_cube_scripted
│ ├── episode_0.hdf5
│ └── ...
└── sim_insertion_scripted
├── episode_0.hdf5
└── ...
每个hdf5文件都包含以下关键数据:
imitate_episodes.py有十几个参数,这几个对效果影响最大:
bash复制--kl_weight 10 # KL散度权重,值越大动作越平滑
--chunk_size 100 # 时序上下文长度
--hidden_dim 512 # Transformer隐藏层维度
--dim_feedforward 3200 # 前馈网络维度
实测发现batch_size不宜过大,8-16之间效果最好。学习率建议从1e-5开始,每隔2000步衰减10%。
虽然没有wandb也能训练,但建议配置可视化监控:
python复制# 在imitate_episodes.py中添加
import wandb
wandb.init(project="mobile-aloha")
wandb.config.update(args) # 记录所有参数
关键指标要看这三个:
评估时一定要加--eval参数,否则会用训练集测试:
bash复制python imitate_episodes.py --eval \
--ckpt_dir ./trainings \
--onscreen_render \
--num_eval_episodes 20 # 默认只有5次
如果发现机械臂动作卡顿,可以:
遇到显存不足时,可以:
python复制if batch_idx % 4 == 0:
optimizer.step()
optimizer.zero_grad()
hdf5文件读取有性能瓶颈,建议:
python复制import h5py
with h5py.File('data.hdf5', 'r', libver='latest') as f:
data = f['observations'][:]
这是模仿学习的通病,解决方法包括:
python复制actions = 0.5*actions[:-1] + 0.5*actions[1:]
经过三天的反复调试,我的Mobile Aloha终于能稳定完成方块搬运任务了。最大的体会是:一定要耐心等训练充分收敛,前期看到的抖动现象在训练后期往往会自然消失。建议至少准备24小时以上的连续训练时间,这对获得好结果至关重要。