基于 Gymnasium + Stable-Baselines3 + MuJoCo 的 Fetch 机器人**抓取-放置(Pick and Place)**任务强化学习实验,用于算法工程方向实习作品展示。
针对 Fetch 机械臂在稀疏奖励环境下难以收敛的问题,系统对比了主流离线策略(off-policy)连续控制算法与**HER(Hindsight Experience Replay)**的交互效果,验证 HER 在解决稀疏奖励冷启动中的作用,并对比不同目标采样策略(final / episodic / future)的影响。
- Fetch 机械臂仿真(MuJoCo):
FetchPickAndPlaceDense-v4 - 观察空间:dict —
observation(机器人状态)、achieved_goal、desired_goal、agent_position - 动作空间:7 维连续(6 DOF 关节 + 1 夹爪)
- 奖励:稠密负距离奖励
reward = -||achieved_goal - desired_goal||
| 算法 | 说明 |
|---|---|
| SAC (Soft Actor-Critic) | 最大熵 off-policy,连续控制 SOTA 基线 |
| TD3 (Twin Delayed DDPG) | 双 Q + 延迟更新的 off-policy 方法 |
| HER (Hindsight Experience Replay) | 通过"事后替换目标"将失败轨迹转为正样本,解决稀疏奖励冷启动 |
| 脚本 | 算法 | HER | 目标采样策略 |
|---|---|---|---|
train_sac_her.py |
SAC | ✅ | episodic(默认基线) |
train_sac_no_her.py |
SAC | ❌ | — |
train_td3_her.py |
TD3 | ✅ | episodic |
train_sac_final_goal.py |
SAC | ✅ | final |
train_sac_future_goal.py |
SAC | ✅ | future |
fetch_rl_project/
├── Gymnasium-Robotics/ # gymnasium-robotics 本地依赖(vendored)
├── scripts/
│ ├── train/
│ │ └── pick_place/ # 5 个训练脚本
│ └── eval/
│ ├── _recorder.py # 评估用视频录制 wrapper
│ └── pick_place/ # 5 个评估脚本
├── models/ # 训练好的模型(.zip)
├── logs/ # TensorBoard 训练日志
├── outputs/
│ ├── plots/ # 训练曲线截图
│ └── videos/ # 评估录像 .mp4
├── requirements.txt
└── README.md
conda create -n fetch_rl python=3.10 -y
conda activate fetch_rl
pip install -r requirements.txt
pip install -e Gymnasium-Robotics/cd fetch_rl_project
python scripts/train/pick_place/train_sac_her.pytensorboard --logdir logs/pick_place/python scripts/eval/pick_place/eval_sac_her.py- HER 是稀疏奖励环境的关键:不加 HER 的 SAC 几乎无法收敛,成功率为 0。
- SAC + HER 优于 TD3 + HER:在相同时钟步数下,SAC 收敛更快、成功率更高,得益于最大熵探索。
- 目标采样策略影响收敛速度:
future采样多样性最高、收敛最快;episodic为平衡选择;final仅复用最终状态,探索较弱。
- gymnasium >= 1.3.0
- stable-baselines3 >= 2.9.0
- mujoco >= 3.10.0
- tensorboard, imageio, matplotlib
训练/评估代码需在 Linux(WSL) 环境下运行,Windows 原生不支持 MuJoCo 渲染。
⚠️ 训练需较长时间(约 100 万步),建议在非工作时间运行。