机器人学习模拟框架 robosuite 支持强化学习和模仿学习 (1) 快速入门

embedded/2025/2/28 9:58:22/

RoboSuite 是一款基于MuJoCo物理引擎构建的机器人学习模拟框架

在现有版本(v1.5)中,它涵盖了丰富多样的机器人实例支持,诸如人形机器人、自定义机器人组合,还包含复合控制器(像全身控制器等)、更多遥控设备选项,以及能够呈现出照片级逼真效果的渲染功能。

支持不同的机械臂:

支持机器狗SpotWithArmFloating:

 

支持人形机器人GR1ArmOnly:

一、认识robosuite机器人学习模拟框架

该框架最初由斯坦福视觉与学习实验室(SVL)的研究人员于 2017 年底开发,作为机器人学习研究的内部工具。

现在,它得到积极维护,并用于 SVL、UT 机器人感知与学习实验室(RPL) 和 NVIDIA通用体现代理研究组(GEAR) 的机器人研究项目。 

数据驱动算法(例如强化学习模仿学习机器人技术提供了强大且通用的工具。

在深度学习最新进展的推动下,这些学习范式在各类机器人控制问题中取得了令人振奋的成果。

Robosuite 的总体目标是为研究人员提供以下支持:

  1. 一套标准化的基准测试任务,用于严格评估和算法开发;
  2. 模块化设计,为创建新的机器人模拟环境提供了极大的灵活性;
  3. 高质量实现的机器人控制器和现成的学习算法,以降低入门门槛。

官方文档: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

第一个机器人选择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 库创建了一个机器人操作环境,并在其中执行随机动作,同时可视化环境状态。

运行代码后,能看到下面效果:

分享完成~


http://www.ppmy.cn/embedded/167776.html

相关文章

大语言加持的闭环端到端自动驾驶模型 学习笔记纯干货

LMDrive:大语言模型辅助闭环端到端 LMDrive:大语言模型辅助闭环端到端 背景框架输入部分:导航指令:视觉数据:提示指令(可选):处理部分:输出部分: 视觉编码器…

leetcode 169. 多数元素

题目如下 显然当多数元素存在时我们可以先排序此时多数元素就组成了一个长度超过一半的"滑动窗口"。 那么无论我们怎么样滑动这个窗口显然数组的中心点必然落在这个窗口内,即排序后的中间元素就是多数元素。法一代码 class Solution { public:int majo…

基于多层感知机(MLP)实现MNIST手写体识别

实现步骤 下载数据集处理好数据集确定好模型(初始化模型参数等等)确定优化函数(损失函数也称为目标函数)和优化方法(一般选用随机梯度下降 SDG )进行模型的训练进行模型的评估 import torch import torch…

钉钉小程序(企业内部应用)开发下载预览文件

先转存钉盘,在下载 转存钉盘相关API为dd.saveFileToDingTalk调用钉盘预览文件的接口来预览:相关API为dd.previewFileInDingTalk在预览界面有下载的方式,可以直接下载 goPDF() {dd.saveFileToDingTalk({url: http://elinkshop.oss-cn-shanghai.ali…

学习Flask:[特殊字符] Day 4:REST API开发

学习目标:构建规范的API接口 from flask_restful import Api, Resourceapi Api(app)class PostAPI(Resource):def get(self, post_id):post Post.query.get_or_404(post_id)return {title: post.title,author: post.author.username}api.add_resource(PostAPI, /…

Spark技术系列(三):Spark算子全解析——从基础使用到高阶优化

Spark技术系列(三):Spark算子全解析——从基础使用到高阶优化 1. 算子核心概念与分类体系 1.1 算子本质解析 延迟执行机制:转换算子构建DAG,行动算子触发Job执行任务并行度:由RDD分区数决定(可通过spark.default.parallelism全局配置)执行位置优化:基于数据本地性的…

电脑显示屏亮度怎么调?电脑屏幕亮度调节步骤介绍

电脑屏幕亮度是指电脑显示器发出的光线的强度,它会影响我们的视觉效果和舒适度。电脑屏幕亮度过高或过低,都可能会对我们的眼睛造成伤害,所以我们需要根据不同的环境和需求,适时地调节电脑屏幕亮度。电脑屏幕亮度的调节方法有以下…

玩转 Netty : 如何设计高性能RPC通信组件

1、概述 前面我们学习了 Netty 的基本用法,以及内部涉及到的一些组件的概念,最后还开发了一款 HTTP 应用服务器,相信你已经知道了 Netty 是什么,可以用来做什么了。今天我们就重新回到 Cheese 中,我们今天的学习目标是…