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

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

相关推荐
l1t42 分钟前
利用DeepSeek实现服务器客户端模式的DuckDB原型
服务器·c语言·数据库·人工智能·postgresql·协议·duckdb
寒月霜华2 小时前
机器学习-数据标注
人工智能·机器学习
九章云极AladdinEdu3 小时前
超参数自动化调优指南:Optuna vs. Ray Tune 对比评测
运维·人工智能·深度学习·ai·自动化·gpu算力
Hello_Embed3 小时前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件
咸甜适中4 小时前
rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
笔记·学习·rust
人工智能训练师4 小时前
Ubuntu22.04如何安装新版本的Node.js和npm
linux·运维·前端·人工智能·ubuntu·npm·node.js
Magnetic_h5 小时前
【iOS】设计模式复习
笔记·学习·ios·设计模式·objective-c·cocoa
Chandler_Song5 小时前
【读书笔记】《有限与无限的游戏》
论文阅读
cxr8285 小时前
SPARC方法论在Claude Code基于规则驱动开发中的应用
人工智能·驱动开发·claude·智能体
研梦非凡5 小时前
ICCV 2025|从粗到细:用于高效3D高斯溅射的可学习离散小波变换
人工智能·深度学习·学习·3d