强化学习框环境 - 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

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

相关推荐
盼小辉丶7 分钟前
Transoformer实战——Transformer模型性能评估
人工智能·深度学习·transformer
极限实验室19 分钟前
Coco AI 实战(二):摄入MongoDB 数据
人工智能·mongodb
AIGC包拥它33 分钟前
AI教学设计助手:生成好教案的Prompt技术实战(一)
人工智能·prompt
棱镜研途44 分钟前
学习笔记丨卷积神经网络(CNN):原理剖析与多领域Github应用
图像处理·笔记·学习·计算机视觉·cnn·卷积神经网络·信号处理
SoFlu软件机器人1 小时前
Cursor、飞算JavaAI、GitHub Copilot、Gemini CLI 等热门 AI 开发工具合集
人工智能·github·copilot
皮蛋sol周1 小时前
嵌入式学习C语言(八)二维数组及排序算法
c语言·学习·算法·排序算法
isNotNullX2 小时前
实时数仓和离线数仓还分不清楚?看完就懂了
大数据·数据库·数据仓库·人工智能·数据分析
人生游戏牛马NPC1号2 小时前
学习 Flutter (一)
android·学习·flutter
Liudef062 小时前
大语言模型的极限:知识、推理与创造力的边界探析
人工智能·语言模型·自然语言处理
潮湿的心情2 小时前
亚洲牧原:活跃行业交流,延伸公益版图,市场拓展再结硕果
大数据·人工智能