机器人学习模拟框架 robosuite 支持强化学习和模仿学习 (1) 快速入门
RoboSuite 是一款基于MuJoCo物理引擎构建的机器人学习模拟框架。
在现有版本(v1.5)中,它涵盖了丰富多样的机器人实例支持,诸如人形机器人、自定义机器人组合,还包含复合控制器(像全身控制器等)、更多遥控设备选项,以及能够呈现出照片级逼真效果的渲染功能。
支持不同的机械臂:
支持机器狗SpotWithArmFloating:
支持人形机器人GR1ArmOnly:
一、认识robosuite机器人学习模拟框架
该框架最初由斯坦福视觉与学习实验室(SVL)的研究人员于 2017 年底开发,作为机器人学习研究的内部工具。
现在,它得到积极维护,并用于 SVL、UT 机器人感知与学习实验室(RPL) 和 NVIDIA通用体现代理研究组(GEAR) 的机器人研究项目。
数据驱动算法(例如强化学习和模仿学习)为机器人技术提供了强大且通用的工具。
在深度学习最新进展的推动下,这些学习范式在各类机器人控制问题中取得了令人振奋的成果。
Robosuite 的总体目标是为研究人员提供以下支持:
- 一套标准化的基准测试任务,用于严格评估和算法开发;
- 模块化设计,为创建新的机器人模拟环境提供了极大的灵活性;
- 高质量实现的机器人控制器和现成的学习算法,以降低入门门槛。
官方文档:https://robosuite.ai/docs/overview.html
开源地址:https://github.com/ARISE-Initiative/robosuite
二、安装robosuite
robosuite支持 Python3上的macOS 和 Linux系统,安装需要依赖 MuJoCo物理引擎和numpy的支持。
有两种安装方式:通过pip直接安装,或者源码安装(方便开发,支持修改代码)
方式1:通过pip直接安装(简单应用)
首先创建一个conda环境:conda create -n robosuite python=3.10
进入robosuite环境:conda activate robosuite
进行安装:pip install robosuite -i https://pypi.tuna.tsinghua.edu.cn/simple
测试demo示例:python -m robosuite.demos.demo_random_action
然后选择不同的示例任务,比如输入0(开门操作),来到下面界面
在选择机器人的型号,比如选择1,然后看到机器人GR1ArmOnly在尝试开门的操作
在窗口中输入"]"切换不同的视角
在选择机器人的型号,比如选择9,然后看到机械臂UR5e在尝试开门的操作
方式2:源码安装(方便开发,支持修改代码)
首先创建一个conda环境:conda create -n robosuite python=3.10
进入robosuite环境:conda activate robosuite
然后下载源码,进入目录,安装相关的依赖
$ git clone https://github.com/ARISE-Initiative/robosuite.git
$ cd robosuite
$ pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
安装顺利的,robosuite就安装好啦~
最后设置当前目录为环境变量:
export PYTHONPATH=$PYTHONPATH:$(pwd)
(可选)作者还提供附加功能,例如OpenAI Gym 接口、由PyBullet提供支持的逆运动学控制器以及使用SpaceMouse设备的远程操作。
要启用这些附加功能,请通过运行安装额外的依赖项
$ pip install -r requirements-extra.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
测试demo示例:python robosuite/demos/demo_random_action.py
然后选择不同的示例任务,比如输入17(双臂运输任务)
选择了多臂环境,以下是多臂环境配置列表,我们选择0
- [0] 对置
- [1] 平行
- [2] 单机器人
第一个机器人选择1(GR1ArmOnly)
第二个机器人选择7(SpotWithArmFloating)
三、机器人任务小结
总结一下,在demo_random_action.py示例中,包含19种任务:
- [0] 门
- [1] 升降机
- [2] 螺母组装
- [3] 螺母组装圆形
- [4] 螺母组装单
- [5] 螺母组装方形
- [6] 拾取位置
- [7] 拾取位置面包
- [8] 拾取位置罐
- [9] 拾取位置谷物
- [10] 拾取位置牛奶
- [11] 拾取位置单
- [12] 堆叠
- [13] 工具悬挂
- [14] 双臂移交
- [15] 双臂升降机
- [16] 双臂钉入孔
- [17] 双臂运输
- [18] 擦拭
机器人的型号有10种:
- [0] Baxter
- [1] GR1ArmsOnly
- [2] IIWA
- [3] Jaco
- [4] Kinova3
- [5] Panda
- [6] Sawyer
- [7] SpotWithArmFloating
- [8] Tiago
- [9] UR5e
大家可以组合测试~
四、基本使用方式
robosuite提供了一组标准化的操作任务,用于基准测试。
提供的与环境交互的 API 很简单,类似于OpenAI Gym使用的 API 。下面是如何与环境交互的简单示例。
import numpy as np
import robosuite as suite
# 创建环境实例
env = suite.make(
env_name="Lift", # 任务名称,可以尝试其他任务,例如 "Stack" 或 "Door"
robots="Panda", # 使用的机器人类型,可以尝试其他机器人,例如 "Sawyer" 或 "Jaco"
has_renderer=True, # 是否启用屏幕渲染器(在屏幕上显示环境)
has_offscreen_renderer=False, # 是否启用离屏渲染器(用于生成图像等)
use_camera_obs=False, # 是否使用摄像头观察
)
# 重置环境(初始化环境状态)
obs = env.reset()
# 循环运行1000步
for i in range(1000):
action = np.random.randn(*env.action_spec[0].shape) * 0.1 # 生成随机动作,动作幅度乘以0.1限制动作大小
obs, reward, done, info = env.step(action) # 在环境中执行动作,获取观察值、奖励、是否完成等信息
env.render() # 在屏幕上渲染当前环境状态
# 检查是否需要重置环境
if done:
print(f"Episode ended at step {i}. Resetting environment.")
obs = env.reset()
这段代码通过 robosuite
库创建了一个机器人操作环境,并在其中执行随机动作,同时可视化环境状态。
运行代码后,能看到下面效果:
分享完成~