GymFetch-插孔-开抽屉任务介绍

2024-01-27 08:10

本文主要是介绍GymFetch-插孔-开抽屉任务介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GymFetch-插孔开抽屉任务介绍

文章目录

  • GymFetch-插孔开抽屉任务介绍
    • 前言:
    • 插孔任务介绍:
    • 插孔任务observation的设置:
    • 最终效果:
    • 抽屉任务:
      • 横版:
      • 竖版:
    • 联系方式:

前言:

最近做HER相关对比实验,需要几个验证仿真环境,所以仿照原版gym-fetch的封装格式,借用了metaworld的素材,为了和push,pick有所区别,所以重新搭建了两个环境,一个是随机插孔任务,一个是开抽屉任务。前者目前看来是符合需要的。后者面临着穿模的问题,后面会有所讨论。

开源链接:https://github.com/kaixindelele/GymFetch

插孔任务介绍:

总所周知,mujoco是不能仿真凹形体的,所以如果导入一个3D建模好的插孔盒子,是无法正常模拟的,插入孔中都会出现碰撞的问题。

而插孔任务其实很多论文中都提到了,比如朱玉可的19年那篇best paper, 比如GUAPO算法:
在这里插入图片描述
在这里插入图片描述

但好用的,开源的插孔仿真环境,我还真的没怎么找到过,就连robosuite里面都没搭建一个好的插孔任务,我是没想到的,待会儿发个邮件问问他们。目前能找到的都是四个长方形拼成的一个带孔盒子:
在这里插入图片描述

现在有另一个问题,这里的四个box都是没有自由度的,mujoco的box 几何体如果加了joint自由度的话,那么被夹爪接触了之后,会发生偏移,哪怕是将关节阻尼damping='10000000000'都会从缝隙中插进去。

所以这四个box必须得是无自由度的。

这样的话,带孔盒子和孔就是固定的,不利于任务难度的提高。

我必须要随机初始化孔的中心位置,然后根据孔的中心位置,安排box的位置,这样的话,就需要一个坐标生成函数,一个每次reset时,设置box位置的函数。

box坐标生成函数:输入孔的中心坐标xy,和孔的大小,整个盒子的长度一半。
输出四个box的坐标和大小。

    def reset_hole(self, hole_center, half_hole_size=0.02, hsw1y=0.1):cx, cy = hole_centerhsw1x = (hsw1y - half_hole_size) / 2.0w1x = cx - hsw1x - half_hole_sizew1y = cyhsw2x = (2*hsw1y-2*hsw1x)/2.0hsw2y = (hsw1y-half_hole_size)/2.0w2x = w1x + hsw1x + (2*hsw1y-2*hsw1x)/2.0w2y = w1y - hsw1y + (hsw1y-half_hole_size)/2.0hsw3x = hsw2xhsw3y = hsw2yw3x = w2xw3y = w1y + hsw1y - (hsw1y-half_hole_size)/2.0hsw4x = (hsw1y-half_hole_size)/2hsw4y = half_hole_sizew4x = cx + half_hole_size + (hsw1y - half_hole_size) / 2.0w4y = cyreturn (w1x, w1y), (w2x, w2y), (w3x, w3y), (w4x, w4y)

设定body的pos,mujoco中除了set_joint_pos函数外,还能直接给body_pos设定值:

self.sim.model.body_pos[self.sim.model.body_name2id('w4')] = np.array([w4x, w4y, self.sim.model.body_pos[self.sim.model.body_name2id('w4')][2]])

这样就可以随机初始化孔的位置了。

插孔任务observation的设置:

关于环境观察值的输出格式,分为
‘observation’: obs.copy(), 除了desired_goal之外的都在里面
‘grip_goal’: grip_pos.copy(), 夹爪的末端坐标xyz
‘achieved_goal’: achieved_goal.copy(), desired_goal if grip2desire > 2cm else grip_goal,即离得远时,是目标点的坐标(加上移偏置),离的近了,直接变为夹爪坐标。即假设有一个虚拟物块在目标上方,到了之后,贴着夹爪随着夹爪移动。
‘desired_goal’: self.goal.copy(),

上面基本上说清楚了观察值。

关于奖励函数的设置,仍然是稀疏奖励,但是将距离阈值变成了1cm(如果难度过高,回头再调)。

最终效果:

在这里插入图片描述

抽屉任务:

横版:

在这里插入图片描述

竖版:

在这里插入图片描述
我想的是将整个抽屉设置成刚体,夹爪穿不过去的那种,但是现在出现各种奇怪的问题,如果将里面的抽屉joint damp设置的低,那么就会自己抖动,如果设置damp大了,那么夹爪会想着直接穿过外壳,直接拉着里面的抽屉往外动。

关节limited属性也不起作用,有点迷惑。回头再调调。

联系方式:

ps: 欢迎做强化的同学加群一起学习:

深度强化学习-DRL:799378128

Mujoco建模:818977608

欢迎玩其他物理引擎的同学一起玩耍~

欢迎关注知乎帐号:未入门的炼丹学徒

CSDN帐号:https://blog.csdn.net/hehedadaq

我的个人博客:

未入门的炼丹学徒

网址非常好记:metair.top

极简spinup+HER+PER代码实现:https://github.com/kaixindelele/DRLib

这篇关于GymFetch-插孔-开抽屉任务介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/649607

相关文章

揭秘未来艺术:AI绘画工具全面介绍

📑前言 随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们生活的方方面面。在艺术创作领域,AI技术同样展现出了其独特的魅力。今天,我们就来一起探索这个神秘而引人入胜的领域,深入了解AI绘画工具的奥秘及其为艺术创作带来的革命性变革。 一、AI绘画工具的崛起 1.1 颠覆传统绘画模式 在过去,绘画是艺术家们通过手中的画笔,蘸取颜料,在画布上自由挥洒的创造性过程。然而,随着AI绘画工

20.Spring5注解介绍

1.配置组件 Configure Components 注解名称说明@Configuration把一个类作为一个loC容 器 ,它的某个方法头上如果注册7@Bean , 就会作为这个Spring容器中的Bean@ComponentScan在配置类上添加@ComponentScan注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 <context:component-scan>@Sc

如何设置windows计划任务

如何设置windows计划任务 前言:在工作过程中写了一个python脚本,用于调用jira接口查询bug单数量,想要在本地定时任务执行,每天发送到钉钉群提醒,写下操作步骤用于记录。 1. 准备 Python 脚本 确保你的 Python 脚本已经保存到一个文件,比如 jira_reminder.py。 2. 创建批处理文件 为了方便任务计划程序运行 Python 脚本,创建一个批处理文

XMG 抽屉效果

1.比如说我创建了3个View -(void)viewDidLoad{  [ super viewDidLoad]; [self setUpChild] ;         UIPanGestureRecognizer *pan=[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(pan:)];

C++标准模板库STL介绍

STL的六大组成部分 STL(Standard Template Library)是 C++ 标准库中的一个重要组成部分,提供了丰富的通用数据结构和算法,使得 C++ 编程变得更加高效和方便。STL 包括了 6 大类组件,分别是算法(Algorithm)、容器(Container)、空间分配器(Allocator)、迭代器(Iterator)、函数对象(Functor)、适配器(Adapter)

一二三应用开发平台应用开发示例(4)——视图类型介绍以及新增、修改、查看视图配置

调整上级属性类型 前面为了快速展示平台的低代码配置功能,将实体文件夹的数据模型上级属性的数据类型暂时配置为文本类型,现在我们调整下,将其数据类型调整为实体,如下图所示: 数据类型需要选择实体,并在实体选择框中选择自身“文件夹” 这时候,再点击生成代码,平台会报错,提示“实体【文件夹】未设置主参照视图”。这是因为文件夹选择的功能页面,同样是基于配置产生的,因为视图我们还没有配置,所以会报错。

49-1 内网渗透 - Bypass UAC介绍

一、Bypass UAC         用户账户控制(UAC)是Windows操作系统的一种安全机制,旨在防止未经授权的应用程序自动安装并防止非授权修改系统设置。它确保应用程序和任务通常在非管理员账户的安全上下文中运行,除非明确需要管理员权限,用户才会被提示确认。         对于非RID 500的管理员用户(除了内置的Administrator账户),当他们登录时,系统会为其分配两个访

okhttp3的详细介绍

这篇文章说下OkHttp的基本用法,是最新的3哦,如果你曾经在网上搜索OkHttp怎么使用发现有些类没有了可能是因为人家说的是2。首先说下OkHttp3是Java和Android都能用,Android还有一个著名网络库叫Volley,那个只有Android能用。导入自己到入jar包,别漏了okio:okhttp-3.3.0.jarokio-1.8.0.jarmaven方式:<dependen

Retrofit详细介绍

转载请标明出处:http://blog.csdn.net/xx326664162/article/details/51910837 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的收货! 一、Retrofit 是什么? Retrofit is a type-safe HTTP client for Android and java. Retrofit 是与 Web 服务器提

Retrofit介绍案例

Retrofit这东西我就不多做解释了,反正最近应用很广,基本都快和OkHttp一起成为安卓的事实网络访问标准框架了。   这么好的一个东西,官网文档实在是不算太好,说的不太清晰。按官网的经常会有“Could not locate ResponseBody converter for”问题。 反正折腾了一番,终于跑出来了一个例子。这里把正确的例子写出来,方便大家参考。 首先要注意