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

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

文章目录

项目地址

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 仿真环境中,需要消除/不显示这样的目标阴影信息。

解决办法如下:

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

python 复制代码
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 效果如下:

可见,阴影消失了。

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

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

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

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

python 复制代码
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

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

相关推荐
硬水果糖17 分钟前
神经网络之损失函数
人工智能·深度学习·神经网络
1111Alisa41 分钟前
数据分析-Excel-学习笔记Day1
学习·数据分析·excel
ConardLi1 小时前
MCP + 数据库,一种比 RAG 检索效果更好的新方式!
javascript·数据库·人工智能
火车叼位1 小时前
初中生也能懂的贝叶斯定理:拆解一个改变世界的公式
人工智能·数学·算法
小白的高手之路1 小时前
torch.nn中的非线性激活介绍合集——Pytorch中的非线性激活
人工智能·pytorch·python·深度学习·神经网络·机器学习·cnn
视觉语言导航1 小时前
华东师范地面机器人融合空中无人机视角的具身导航!KiteRunner:语言驱动的户外环境合作式局部-全局导航策略
人工智能·深度学习·机器人·无人机·具身智能
是娜个二叉树!1 小时前
听课笔记-nlp
人工智能·笔记·自然语言处理
落笔太慌张~1 小时前
【FPGA基础学习】状态机思想实现流水灯
学习·fpga开发
galileo20161 小时前
多智能体优秀开发框架
人工智能