强化学习环境 - robogym - 学习 - 2

强化学习环境 - robogym - 学习 - 2

文章目录

  • 强化学习环境 - robogym - 学习 - 2
    • 项目地址
    • 为什么选择 robogym
    • Rearrange - 环境部分介绍
    • Robot Control Interface - 机器人控制接口
    • Environment - list
    • Environment Randomization - 接口设置

项目地址

https://github.com/openai/robogym

为什么选择 robogym

  1. 自己的项目需要做一些机械臂 table-top 级的多任务操作

  2. robogym 基于 mujoco 搭建,构建了一个仿真机械臂桌面物体操作(pick-place、stack、rearrange)场景

  3. robogym 的例程效果看,支持多个相机示教,包括眼在手上和眼在手外,可以获取多视角视觉信息

  4. robogym 的物体支持 YCB 数据集格式

主要是这些原因,当然,看官方 readme.md 文档,它还有其他不错的功能。

国内主流社区对 robogym 的介绍比较少,所以选择写一些文档记录一下,作为参考。

Rearrange - 环境部分介绍

All the environment classes are subclasses of robogym.robot_env.RobotEnv. The classmethod RobotEnv.build is the main entry point for constructing an environment object, pointed by make_env in each environment.

所有的 具体环境类 都是 RobotEnv 的子类,RobotEnv 的类方法 .build 会通过类继承的方式继承到每个具体环境类中,每个 具体环境类 文件内有变量名 make_env 指代 .build 方法。

The environments extend OpenAI gym and support the reinforcement learning interface offered by gym, including step, reset, render and observe methods.

与 OpenAI gym 提供的强化学习接口类似,这里面的每个环境都有 step, reset, renderobserve 方法

All environment implementations are under the robogym.envs module and can be instantiated by calling the make_env function. For example, the following code snippet creates a default locked cube environment:

from robogym.envs.dactyl.locked import make_env
# from robogym.envs.rearrange.blocks import make_env
# from robogym.envs.什么主题(dactyl/rearrange).什么任务(locked/blocks) import make_env
env = make_env()

仿真环境中的机器人配置:a UR16e robot equipped with a RobotIQ 2f-85 gripper


提供了各种目标生成器,以便 在给定的物体分布上 抽取一些物体特例于各种任务,例如堆叠(stack)、拾放(pick-and-place)、接触(reach)和重新排列(rearrange)。目标生成器的是从一系列给定的分布中,抽样一些物体放置于仿真环境上,要这样理解。

除了这些简单的任务,还有一些“保留(hold-out)任务”用于评估,是比较难的任务。堆叠积木、餐具重新排列,都是很挑战性的任务。


Robogym提供了一种在训练过程中干预环境参数的方法,以支持领域随机化和课程学习。

下面是一个介入对象数量的示例(重新排列)环境的例子。

使用此接口来定义对象数量。也就是之前一篇文章中用于演示的代码:

from robogym.envs.rearrange.blocks import make_env# Create an environment with the default number of objects: 5
# By setting num_objects: 5, and max_num_objects: 8, 
# this environment will sample 5 blocks on by default, 
# while allowing to use the range [1, 8] for num_objects.
env = make_env(parameters={'simulation_params': {'num_objects': 5,'max_num_objects': 8,}}
)# Acquire number of objects parameter interface
param = env.unwrapped.randomization.get_parameter("parameters:num_objects")# Set num_objects: 3 for the next episode
param.set_value(3)# Reset to randomly generate an environment with `num_objects: 3`
obs = env.reset()

大多数机器人环境都支持通过向 make_env 提供附加参数、常量来进行自定义。

您可以通过查看 <EnvName>Constants 类的定义来查找每个环境支持哪些常量参数,该类通常位于与 make_env 相同的文件下。还有 Parameter 参数,可以与常量参数一起自定义。您可以通过查看 <EnvName>Parameters 的定义来找到每个环境支持哪些参数。(在 from ... import ... 里面由类似的)

一些常见的支持常量包括:

  1. randomize:如果为真,则会对物理属性、动作和观察进行随机化。
  2. mujoco_substeps:在仿真器中每个步骤实施后进行的子步数,用于平衡模拟精度和训练速度。
  3. max_timesteps_per_goal:在超时之前允许实现每个目标的最大时间步数。

Robot Control Interface - 机器人控制接口

提供了一个通用的机器人控制框架,针对的是带夹爪的机器人臂的位置控制。

该库实现了针对UR16e机器人臂的控制类,该机器臂具有6个驱动关节和一个1-DOF RobotIQ 2f-85夹爪。

Robogym重新排列环境可以通过 RobotControlParameter 类进行自定义,如本节所述。

Control ModeDescriptionAction Dimensions
JointJoint position control mode, where joints are actuated via PID or Cascaded PI controllers based on the arm_joint_calibration_path specification. See mujoco-py for more details on the low-level controller implementation.【关键:关节角控制、采用PID比例-积分-微分控制器,或者级联比例积分控制器。6个关节代表6个自由度,动作空间的维度就是6维】6
tcp+roll+yaw (default)Tool center point (TCP) relative position control in local coordinates and 2-DOF rotation control via wrist rotation and wrist tilt.【关键:通过手腕旋转和手腕倾斜实现本地坐标下的工具中心点(TCP)相对位置控制和2自由度旋转控制。】5
tcp+wristTCP relative position control in local coordinates and 1-DOF rotation control via wrist rotation.【关键:通过手腕旋转实现本地坐标下的工具中心点(TCP)相对位置控制和1自由度旋转控制。】4

采用两种方法进行动力学计算:

TCP Solver ModeDescription
mocapControl is achieved via the MuJoCo mocap mechanism, which is used as a simulation based Inverse Kinematics (IK) solver. In this mode, robot joint dynamics cannot be enforced and motion is dictated by the solver parameters of the MuJoCo sim, which may result in high contact forces and simulation instabilities.【关键:控制是通过MuJoCo mocap机制实现的,该机制被用作基于仿真的逆运动学(IK)求解器。在此模式下,无法强制执行机器人关节动力学,运动由MuJoCo sim的求解器参数决定,这可能导致高接触力和仿真不稳定性。】
mocap_ik (default)This mode is provided for applications that use joint actuated robots that are controllable in the TCP domain. 该模式适用于使用关节驱动机器人的应用程序,这些机器人在TCP域中是可控的。One example of such application would be when a policy is trained to output relative position and rotation actions in the tooltip space, that are physically realized by servoing in the joint space by the robot. 这种应用的一个例子是,当策略被训练为在工具提示空间中输出相对位置和旋转动作时,由机器人在关节空间内伺服实现的物理动作。In this mode, we use a solver simulation that uses the mocap mechanism as described above as an IK solver. The abstract solver interface can also be used to develop an analytical IK solver, however, stability of such solver has been poor in our experience. 在此模式下,使用一个求解器仿真,该仿真使用上述“mocap”机制作为IK求解器。抽象求解器接口也可用于开发分析IK求解器,但是,在经验中,此类求解器的稳定性较差。The positions achieved by this solver simulation are then used as targets to a joint-controlled robot simulation, whose dynamics will be determined by the specific controller.【关键:将此求解器仿真实现的位置,用作关节控制机器人仿真的目标,该仿真的动力学将由特定控制器确定。】

每个环境都包含一个可通过 env.robot 访问的机器人对象,该对象实现了 RobotInterface 。对于需要多个机器人的环境,例如机械臂和夹爪,env.robot 是一个 CompositeRobot ,它可以适当地将动作空间分配到不同的机器人实现中。

Environment Name(*表示文件下面的全部文件)Robot Control ParametersRobot ClassAction Dimension
dactyl/*N/AMuJoCoShadowHand20
rearrange/*{'control_mode': 'joint'}MujocoURJointGripperCompositeRobot7
rearrange/*{'control_mode': 'tcp+roll+yaw', 'tcp_solver_mode':'mocap_ik'}MujocoURTcpJointGripperCompositeRobot6
rearrange/*{'control_mode': 'tcp+wrist', 'tcp_solver_mode':'mocap_ik'}MujocoURTcpJointGripperCompositeRobot5
rearrange/*{'control_mode': 'tcp+roll+yaw', 'tcp_solver_mode':'mocap'}MujocoIdealURGripperCompositeRobot6
rearrange/*{'control_mode': 'tcp+wrist', 'tcp_solver_mode':'mocap'}MujocoIdealURGripperCompositeRobot5

这里并没有说如何设置这些控制模式,在 make_envparameters 里面设置失败。

Environment - list

训练环境是根据 对象集合目标分布 进行分类的。默认情况下,每个训练环境都设计为生成固定数量的对象。

如果想训练一个具有可变数量对象的策略,则应使用随机化接口参数 num_objects

constants: {# For the reward, we do the following:#  - for every object that gets placed correctly, immediately provide +1#  - once all objects are properly placed, the policy needs to hold the goal#    state for 2 seconds (in simulation time) until it gets `success_reward` reward#  - the next goal is generated# 奖励评定如下:当智能体正确放置物体,获得+1即时奖励;# 当所有物体正确放置,智能体需要维持在仿真环境中的2秒的状态,才能拿到成功的奖励。# 计算完之后,随机生成下一个目标。success_reward: 5.0,success_pause_range_s: [0.0, 0.5],max_timesteps_per_goal_per_obj: 600,vision: True,  # use False if you don't want to use vision observationsvision_args: {image_size: 200,camera_names: ['vision_cam_front'],mobile_camera_names: ['vision_cam_wrist']},# 这个goal_args没看懂goal_args: {rot_dist_type: 'full',randomize_goal_rot: true,p_goal_hide_robot:: 1.0,},# 'obj_pos': l2 distance in meter; 'obj_rot' eular angle distance.# 'obj_pos'用欧氏距离计算,单位是米;'obj_rot'用欧拉角。success_threshold: {'obj_pos': 0.04, 'obj_rot': 0.2},
},
parameters: {simulation_params: {num_objects: 1,max_num_objects: 32,object_size: 0.0254,# 这个参数没看懂,应该是物体和桌面是一比一大小used_table_portion: 1.0,goal_distance_ratio: 1.0,# 这个参数没看懂,是要把光照产生的阴影计算进去是吗...cast_shadows:: false,penalty: {# Penalty for collisions (wrist camera, table)wrist_collision:: 0.0,table_collision:: 0.0,# Penalty for safety stopssafety_stop_penalty:: 0.0,}}
}

训练环境列表。

NameFileConfig (overwrite)Description
blocks reachblocks_reach.py-Place end-of-effector of a robot to the target position. This training environment is not compatible with holdout environments.将机器人的末端执行器放置到目标位置。此训练环境与保留环境不兼容。
blocksblocks_train.py-Pushing blocks to targets on the surface of a table将方块推向桌子表面上的目标。
blocks (push + pick-and-place)blocks_train.pyconstants.goal_args.pickup_proba: 0.4 采用拾取动作的概率是0.4Pushing or pick-and-placing blocks to targets on the surface of a table or in the air将方块推向或拾取并放置到桌面或空中的目标位置。
k-composercomposer.pyparameters.simulation_params.num_max_geoms: k 最大的网面数量是 kPushing objects to targets on the surface of a table. Each objects are created by randomly composing [1, k] meshes.将物体推向桌子表面上的目标点位。每个物体都是通过随机组合[1, k]个网面而创建的。
ycbycb.pyparameters.simulation_params.mesh_scale: 0.6Pushing ycb objects to targets on the surface of a table将ycb格式的方块推向桌子表面上的目标。
mixturemixture.pyconstants: {normalize_mesh: True, normalized_mesh_size: 0.05}
parameters.simulation_params.mesh_scale: 1.0
Pushing objects to targets on the surface of a table, objects are randomly sample from ycb or simple geom shapes.将物体推向桌子表面上的目标,物体是从ycb或简单几何形状中随机抽样的。

设计了一组保留环境,以评估学习策略的泛化性能。

为了使保留环境与推荐的训练环境兼容,建议从训练环境继承相同的默认配置。

下表描述了一系列保留环境及其配置。https://github.com/openai/robogym/blob/master/docs/list_rearrange_env.md

作为所有保留环境的通用配置,n 个物体的保留环境会覆盖原有的物体。 parameters.simulation_params.num_objects: n

Environment Randomization - 接口设置

Robogym提供了一种干预训练过程中环境参数的方式,以支持领域随机化和课程学习。这个接口称为随机化。随机化用于随机化环境的各个方面,如初始状态分布、目标分布和转移动力学。本文档描述了使用随机化修改在blocks_train 环境中采样的对象数量的示例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148627.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode做题笔记160. 相交链表

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…

计算机视觉——飞桨深度学习实战-深度学习网络模型

深度学习网络模型的整体架构主要数据集、模型组网以及学习优化过程三部分&#xff0c;本章主要围绕着深度学习网络模型的算法架构、常见模型展开了详细介绍&#xff0c;从经典的深度学习网络模型以CNN、RNN为代表&#xff0c;到为了解决显存不足、实时性不够等问题的轻量化网络…

Day-05 CentOS7.5 安装docker

参考 &#xff1a; Install Docker Engine on CentOS | Docker DocsLearn how to install Docker Engine on CentOS. These instructions cover the different installation methods, how to uninstall, and next steps.https://docs.docker.com/engine/install/centos/ Doc…

计算机网络 第二章物理层

计算机网络第二章知识点速刷 其中重要的是信源和信宿&#xff0c;以及调制解调器在通信模型当中起到的作用。 单工、半双工和全双工。

【Java 进阶篇】JDBC 数据库连接池详解

数据库连接池是数据库连接的管理和复用工具&#xff0c;它可以有效地降低数据库连接和断开连接的开销&#xff0c;提高了数据库访问的性能和效率。在 Java 中&#xff0c;JDBC 数据库连接池是一个常见的实现方式&#xff0c;本文将详细介绍 JDBC 数据库连接池的使用和原理。 1…

计组——I/O方式

一、程序查询方式 CPU不断轮询检查I/O控制器中“状态寄存器”&#xff0c;检测到状态为“已完成”之后&#xff0c;再从数据寄存器取出输入数据。 过程&#xff1a; 1.CPU执行初始化程序&#xff0c;并预置传送参数&#xff1b;设置计数器、设置数据首地址。 2. 向I/O接口发…

腾讯云服务器选购指南:如何选择一台合适的云服务器配置?

腾讯云服务器配置如何选择&#xff1f;CPU内存、带宽和系统盘怎么选择合适&#xff1f;个人用户可以选择轻量应用服务器&#xff0c;企业用户可以选择云服务器CVM&#xff0c;2核2G3M带宽轻量服务器95元一年、2核4G5M服务器168元一年&#xff0c;企业用户可以选择标准型S5云服务…

1300*C. Rumor(并查集贪心)

解析&#xff1a; 并查集&#xff0c;求每个集合的最小费用。 每次合并集合的时候&#xff0c;根节点保存当前集合最小的费用。 #include<bits/stdc.h> using namespace std; #define int long long const int N1e55; int n,m,a[N],p[N],cnt[N]; int find(int x){retur…

分布式锁:四种方案解决商品超卖的方案

一 分布式锁 1.1 分布式锁的作用 在多线程高并发场景下&#xff0c;为了保证资源的线程安全问题&#xff0c;jdk为我们提供了synchronized关键字和ReentrantLock可重入锁&#xff0c;但是它们只能保证一个工程内的线程安全。在分布式集群、微服务、云原生横行的当下&#xff…

深度学习笔记_4、CNN卷积神经网络+全连接神经网络解决MNIST数据

1、首先&#xff0c;导入所需的库和模块&#xff0c;包括NumPy、PyTorch、MNIST数据集、数据处理工具、模型层、优化器、损失函数、混淆矩阵、绘图工具以及数据处理工具。 import numpy as np import torch from torchvision.datasets import mnist import torchvision.transf…

uniapp 实现下拉筛选框 二次开发定制

前言 最近又收到了一个需求&#xff0c;需要在uniapp 小程序上做一个下拉筛选框&#xff0c;然后找了一下插件市场&#xff0c;确实有找到&#xff0c;但不过他不支持搜索&#xff0c;于是乎&#xff0c;我就自动动手&#xff0c;进行了二开定制&#xff0c;站在巨人的肩膀上&…

归并排序及其非递归实现

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 归并排序递归实现 归并排序非递归实现 归并排序递归实现 图示&#xff1a; 代码&#xff1a; 先分再归并&#xff0c;像是后序一般。 //归并排序 void MergeSort(int* arr, int left, int right) {int* temp (int…

tcp滑动窗口原理

18.1 滑动窗口 我们再来看这个比喻&#xff1a; 网络仅仅是保证了整个网络的连通性&#xff0c;我们我们基于整个网络去传输&#xff0c;那么是不是我想发送多少数据就发送多少数据呢&#xff1f;如果是这样的话&#xff0c;是不是就会像我们的从一个池塘抽水去灌到另外一个…

速看:免费领取4台阿里云服务器_申请入口及领取流程

注册阿里云账号&#xff0c;免费领云服务器&#xff0c;最高领取4台云服务器&#xff0c;每月750小时&#xff0c;3个月免费试用时长&#xff0c;可快速搭建网站/小程序&#xff0c;部署开发环境&#xff0c;开发多种企业应用。阿里云服务器网分享阿里云服务器免费领取入口、免…

openGauss学习笔记-89 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用查询原生编译

文章目录 openGauss学习笔记-89 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用查询原生编译89.1 查询编译&#xff1a;PREPARE语句89.2 运行命令89.3 轻量执行支持的查询89.4 轻量执行不支持的查询89.5 JIT存储过程89.6 MOT JIT诊断89.6.1 mot_jit_detai…

Pygame中监控鼠标动作的方法

在Pygame中监控键盘按键的方法_pygame获取键盘输入-CSDN博客中提到&#xff0c;通过在while True循环中获取队列中事件的方法监控键盘动作。监控鼠标动作的方法与监控键盘动作的方法相同。 相关连接1 队列与事件的相关知识&#xff0c;请参考 Pygame中监控键盘按键的方法_pyg…

网络爬虫--伪装浏览器

从用户请求的Headers反反爬 在访问某些网站的时候&#xff0c;网站通常会用判断访问是否带有头文件来鉴别该访问是否为爬虫&#xff0c;用来作为反爬取的一种策略。很多网站都会对Headers的User-Agent进行检测&#xff0c;还有一部分网站会对Referer进行检测&#xff08;一些资…

电脑通过串口助手和51单片机串口通讯

今天有时间把电脑和51单片机之间的串口通讯搞定了&#xff0c;电脑发送的串口数据&#xff0c;单片机能够正常接收并显示到oled屏幕上&#xff0c;特此记录一下&#xff0c;防止后面自己忘记了怎么搞得了。 先来两个图片看看结果吧&#xff01; 下面是串口3.c的文件全部内容&a…

Eureka

大家好我是苏麟今天带来Eureka的使用 . 提供者和消费者 在服务调用关系中&#xff0c;会有两个不同的角色&#xff1a; 服务提供者&#xff1a;一次业务中&#xff0c;被其它微服务调用的服务。&#xff08;提供接口给其它微服务&#xff09; 服务消费者&#xff1a;一次业务…

微信小程序点单左右联动的效果实现

微信小程序点单左右联动的效果实现 原理解析&#xff1a;   点击左边标签会跳到右边相应位置&#xff1a;点击改变rightCur值&#xff0c;转跳相应位置滑动右边&#xff0c;左边标签会跳到相应的位置&#xff1a;监听并且设置每个右边元素的top和bottom&#xff0c;再判断当…