强化学习框环境 - robogym - 学习 - 4

news2024/11/27 17:49:42

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

文章目录

  • 强化学习环境 - robogym - 学习 - 4
    • 项目地址
    • 为什么选择 robogym
    • 如何消去目标位置的阴影?
    • 如何让物体颜色变得正确?

项目地址

https://github.com/openai/robogym

为什么选择 robogym

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

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

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

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

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

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

如何消去目标位置的阴影?

robogym 原本是做复杂 goal-condition 强化学习以及课程学习做的 benchmark ,因此在 benchmark 专门渲染了目标位置/旋转角。

但是对于我的项目,不需要这样的目标信息,因为目标是我自己设置的,不是 benchmark 设置的。

因此在 mujoco 仿真环境中,需要消除/不显示这样的目标阴影信息。

111

解决办法如下:

打开源文件:~/robogym/robogym/envs/rearrange/simulation/base.py ,转到第 750 行左右。

if colors is not None:
	color = list(colors[i])

    self.mj_sim.model.geom_rgba[object_geom_ids, :] = color
    self.mj_sim.model.geom_rgba[target_geom_ids, :] = color

self.mj_sim.model.geom_rgba[target_geom_ids, -1] = 0.2

这里的 if 块说明的是,如果没有颜色变量,就从默认的 colors 列表中选取颜色,分别对 object_geom_idstarget_geom_ids 进行上色。但是在最后,又进行了 self.mj_sim.model.geom_rgba[target_geom_ids, -1] = 0.2 这个代码,这其实是让目标物体的颜色变淡。

因此只要在这里把 0.2 设置成更小的数,0.02 或者 0.0 都可以,就可以让目标物体在渲染中消失。

【注意】:只是在 mujoco 的 render() 渲染消失了,但是目标位置还是存在的,可以通过 reset() 读取得到!

self.mj_sim.model.geom_rgba[target_geom_ids, -1] = 0.0 效果如下:

111

可见,阴影消失了。

如何让物体颜色变得正确?

robogym 这个 benchmark 是由 YCB 格式的数据集的,选择使用 YCB 物体进行仿真,可以得到一个模型的实体,但是 robogym 的代码是:先随机选择模型、再随机选择颜色,然后再一一匹配相当于上色。这样的结果是:渲染后 YCB 模型具有 非常不真实 的颜色。

333

解决方法是:正则表达式提取从路径名中提取水果名字,设置一个字典记录每个水果的颜色,然后匹配到水果名字就做颜色的替换;没有匹配到,也就是其他物体,就用缺省随机颜色。

打开源文件:~/robogym/robogym/envs/rearrange/common/mesh.py ,进入到 MeshRearrangeEnv_sample_group_attributes 文件下,在源码基础上添加一些代码:

def _sample_group_attributes(self, num_groups: int):
        attrs_dict = super()._sample_group_attributes(num_groups)
        attrs_dict["mesh_files"] = self._sample_object_meshes(num_groups)


        # #################### add code here ! ####################
        # 设置一个字典记录每个水果的颜色
        fruit_colors = {
            "banana": [1.0, 1.0, 0.6, 1.0],  # yellow
            "strawberry": [1.0, 0.0, 0.4, 1.0],  # red
            "apple": [0.8, 0.0, 0.0, 1.0],  # red
            "lemon": [1.0, 1.0, 0.4, 1.0],  # yellow
            "peach": [1.0, 0.8, 0.6, 1.0],  # orange
            "pear": [0.8, 1.0, 0.8, 1.0],  # green
            "orange": [1.0, 0.5, 0.0, 1.0],  # orange
            "plum": [0.6, 0.0, 0.4, 1.0]  # purple
        }
        
        # 正则表达式提取从路径名中提取水果名字
        import re
        # attrs_dict["mesh_name"] = []
        for i in range(len(attrs_dict["mesh_files"])):
            match = re.search(r'/\d+_(\w+)/\d+_\w+.stl', attrs_dict["mesh_files"][i][0])
            if match:
                name_string = match.group(1)
                # attrs_dict["mesh_name"].append(name_string)
                if name_string in fruit_colors.keys():
                    # 然后匹配到水果名字就做颜色的替换
                    attrs_dict["color"][i, :] = np.asarray(fruit_colors[name_string])
            # else:
            #     没有匹配到,也就是其他物体,就用缺省随机颜色
            #     attrs_dict["mesh_name"].append('default')
        # ##########################################################

        return attrs_dict

效果显著,水果成功变成了它们应有的颜色。

444

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

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

相关文章

小白自学笔记—网络安全(黑客笔记)

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高; 二、则是发展相对成熟入…

29 WEB漏洞-CSRF及SSRF漏洞案例讲解

目录 CSRF漏洞解释,原理等CSRF漏洞检测,案例,防御等防御方案2、设置随机Token3、检验referer来源 SSRF漏洞会比csrf漏洞重要一些SSRF_PHP,JAVA漏洞代码协议运用演示案例:SSRF_漏洞代码结合某漏洞利用测试 如何查找ssrf漏洞 SSRF漏…

测量温度的优选模块:新型设备M-THERMO3 16

| 具有16个自由选择通道的新型温度测量设备M-THERMO3 16 IPETRONIK推出的温度测量设备——M-THERMO3 16作为新一代设备的首个模块,它为模块化测量技术确立了标准。该模块具有16个通道,各通道不仅分辨率高达24位ADC,而且能够自由选择热电偶类…

2023Q3数据安全政策、法规、标准及报告汇总(附下载)

数据安全处罚事件逐年升高,2023年呈爆发式增长。 截至2023年8月31日,南都大数据研究院通过各地行政执法公示平台、媒体报道等公开渠道收集到146起依据《数据安全法》作出行政处罚决定的案例。2021年公示5起,2022年公示11起,2023年…

如何通过设备维护管理系统实现全员生产维护TPM

前面我们介绍了《什么是全员生产维护TPM?》,接下来我们探讨如何结合PreMaint的设备维护管理系统来实现全员生产维护TPM。 在现代制造业中,设备的可靠性和生产效率对企业的竞争力至关重要。为了实现全员生产维护(Total Productive …

记录vue开发实例

封装的表格组件 <template><div><div style"width: 100%" v-if"showList"><el-table v-loading.lock"loading" :data"dataList":header-cell-style"{background: #F2FCFE,fontSize: 14px,color: #50606D}&…

8.2 JUC - 6.CyclicBarrier

目录 一、是什么&#xff1f;二、使用demo三、注意 一、是什么&#xff1f; CyclicBarrier &#xff1a; 循环栅栏&#xff0c;用来进行线程协作&#xff0c;等待线程满足某个计数。构造时设置计数个数&#xff0c;每个线程执行到某个需要“同步”的时刻调用 await() 方法进行…

【数据结构】栈和队列-- OJ

目录 一 用队列实现栈 二 用栈实现队列 三 设计循环队列 四 有效的括号 一 用队列实现栈 225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; typedef int QDataType; typedef struct QueueNode {struct QueueNode* next;QDataType data; }QNode;typedef struct …

数据结构 | (三) Stack

栈 &#xff1a;一种特殊的线性表&#xff0c;其 只允许在固定的一端进行插入和删除元素操作 。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO &#xff08; Last In First Out &#xff09;的原则。 压栈&#xff1a;栈…

c#学习系列相关之多线程(三)----invoke和begininvoke

一、invoke和BeginInvoke的作用 invoke和begininvoke方法的初衷是为了解决在某个非某个控件创建的线程中刷新该控件可能会引发异常的问题。说的可能比较拗口&#xff0c;举个例子&#xff1a;主线程中存在一个文本控件&#xff0c;在一个子线程中要改变该文本的值&#xff0c;此…

(四)列表、元组、字典和集合

Python列表&#xff08;list&#xff09;、元组&#xff08;tuple&#xff09;、字典&#xff08;dict&#xff09;和集合&#xff08;set&#xff09;详解 Python 序列&#xff08;Sequence&#xff09;是指按特定顺序依次排列的一组数据&#xff0c;它们可以占用一块连续的内…

【C/C++】关于vector迭代器失效问题

​&#x1f47b;内容专栏&#xff1a; C/C编程 &#x1f428;本文概括&#xff1a; vector迭代器失效问题 &#x1f43c;本文作者&#xff1a; 阿四啊 &#x1f438;发布时间&#xff1a;2023.10.8 迭代器的主要作用就是让算法能够不用关心底层数据结构&#xff0c;其底层实际就…

C++变量默认初始化

初始化不是赋值&#xff0c;初始化是指创建变量时赋予一个初始值&#xff0c;赋值是指将变量的当前值擦除&#xff0c;赋予新值。 如果定义变量时没有初始化&#xff0c;则变量会被系统默认初始化。“默认值”取决于变量的&#xff1a;类型位置 startmindmap * C变量默认初始…

邮件群发工具哪个好

邮件群发是一种通过电子邮件向多个收件人发送邮件的方式。同时&#xff0c;邮件群发也是一种低成本、高回报的营销手段。因此邮件群发被广泛应用于各种营销活动中&#xff0c;例如活动邀请、新品上线、产品促销等等。而群发邮件最有效的方式就是借助邮件群发工具&#xff0c;而…

常用排序算法详解

1.冒泡排序原理示例代码实现 2.快速排序原理示例代码实现 3.插入排序原理示例代码实现 4.希尔排序原理示例代码实现 5.选择排序原理示例代码实现 6.堆排序原理示例代码实现 7.归并排序原理示例代码实现 本文讲述了常见的排序算法的执行过程&#xff0c;有详细实现过程举例 1.冒…

arm 点灯实验代码以及现象

.text .global _start _start: 1.设置GPIOE寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28 LDR R0,0x50000A28 LDR R1,[R0] ORR R1,R1,#(0x1<<4) 第4位置1 STR R1,[R0] 1.设置GPIOF寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28 LDR R…

自动定时删除磁盘文件的脚本(从文件日期最早的开始删)

#!/bin/bash# 指定的挂载点 MOUNTPOINT"/media/vm/MyDisk512GB"# 设置磁盘大小的限制 (例如&#xff1a;800G) LIMIT$((800 * 1024 * 1024)) # 单位是KB# 获取挂载点的已使用空间 USED_SPACE$(df -kP "$MOUNTPOINT" | tail -1 | awk {print $3})echo &quo…

强化学习------Qlearning算法

简介 Q learning 算法是一种value-based的强化学习算法&#xff0c;Q是quality的缩写&#xff0c;Q函数 Q(state&#xff0c;action)表示在状态state下执行动作action的quality&#xff0c; 也就是能获得的Q value是多少。算法的目标是最大化Q值&#xff0c;通过在状态state下…

day58:ARMday5,GPIO流水灯实验

汇编指令&#xff1a; .text .global _start _start: 1.设置GPIOE GPIOF寄存器的时钟使能 RCC_MP_AHB4ENSETR[5:4]->1 0x50000a28 LDR R0,0x50000a28 LDR R1,[R0] ORR R1,R1,#(0x3<<4) STR R1,[R0]2.设置PE10、PF10、PE8管脚为输出模式&#xff0c;GPIOE_MODER[21…

【gcc】RtpTransportControllerSend学习笔记 1

本文是woder大神 的文章的学习笔记。主要是大神文章: webrtc源码分析(8)-拥塞控制(上)-码率预估 的学习笔记。大神的webrtc源码分析(8)-拥塞控制(上)-码率预估 详尽而具体,堪称神作。因为直接看大神的文章,自己啥也没记住,所以同时跟着看代码。跟着大神走一遍,不求甚解,…