机械臂强化学习抓取系统
项目概述
本项目实现了一个基于Rainbow-DDPG算法的机械臂抓取系统,旨在训练UR机械臂配合Epick吸盘式夹爪进行物体抓取任务。通过强化学习,机械臂能够自主学习如何抓取不同类型的物体(如玻璃杯、橡胶物体或堆叠物体)。
主要特性
- 基于PyBullet的物理模拟环境
- 改进版Rainbow-DDPG算法实现
- 双Q网络架构
- 优先级经验回放
- n步TD学习
- 目标策略平滑
- 可视化Web界面实时监控训练过程
- 支持不同类型物体的抓取训练
- 模型训练与评估模块
- CPU/GPU训练支持
环境配置
依赖项
项目依赖以下主要库:
- TensorFlow >= 2.19.0
- PyBullet
- NumPy
- Matplotlib
- Flask (用于Web可视化)
完整依赖列表见RL_grasp_training/requirements.txt
文件。
安装
# 安装依赖
pip install -r RL_grasp_training/requirements.txt
代码结构
RL_grasp_training/
: 主项目目录train.py
: 训练入口脚本rainbow_ddpg.py
: Rainbow-DDPG算法实现urenv.py
: UR机械臂环境封装web_visualizer.py
: Web可视化界面nmpc.py
: 模型预测控制器(用于演示数据生成)demo.py
: 演示脚本robot_description/
: 机械臂URDF描述文件templates/
: Web界面模板
使用指南
训练模型
cd RL_grasp_training
python3 train.py --object_type glass --render --episodes 100 --max_steps 150 --noise_std 0.3 --model_dir trained_models_name --log_dir training_logs_name
主要参数说明:
--object_type
: 目标物体类型(glass/rubber/stack)--render
: 是否渲染环境(无GUI)--episodes
: 训练回合数--max_steps
: 每回合最大步数--noise_std
: 探索噪声标准差--model_dir
: 模型保存目录--log_dir
: 日志保存目录
更多参数详见train.py
中的parse_args
函数。
使用Web可视化工具
cd RL_grasp_training
python3 web_visualizer.py
然后在浏览器中访问http://localhost:5000
查看训练过程的实时可视化。
使用预训练模型
cd RL_grasp_training
python3 train.py --object_type glass --render --load_model --model_dir trained_models/latest --episodes 10
模型会从指定目录加载,并进行评估或继续训练。
性能调优
- 增加
noise_std
参数可以提高探索能力,有助于找到更好的策略 - 调整
actor_lr
和critic_lr
参数可以改变学习速率 - 增加
max_steps
参数可以让每回合有更多时间完成抓取动作 - GPU训练比CPU训练速度快很多,建议在有GPU的环境中运行
实验结果
在默认参数下,算法在约100回合后可以达到一定的成功率。调整参数后,我们观察到:
- 增加噪声标准差到0.3-0.4有助于提高成功率
- 使用密集奖励(dense reward)比稀疏奖励(sparse reward)效果更好
- 训练时的抓取成功率有一定波动,这是强化学习探索过程的正常现象
注意事项
- 训练过程中可能会遇到模型崩溃的情况,这通常是由于物理模拟中的碰撞处理导致
- 建议使用较新版本的TensorFlow以获得更好的性能
- 在Docker环境中运行时,GPU配置可能需要额外设置