Environment Generation
使用LLM生成RL environment
EnvGen: Generating and Adapting Environments via LLMs for Training Embodied Agents
- publish: COLM 2024
动机
- 使用LLM生成和调整多种不同的训练环境, 以增强对原始环境(不是LLM生成的环境)的表现能力
- 少量LLM的调用, 减少计算开销
环境生成
输入:
- 环境的简要描述以及LLM需要执行的操作
- 目标, LLM可以操控的环境参数, 生成中的规则约束
- 一个JSON模板, 让LLM将环境参数填到相应位置
- Agent的feedback
输出: 包含环境参数的JSON, 用于生成完整的Environment
transition和reward由原始的环境提供, LLM不参与生成
训练
进行正常的训练.
评估在原始环境中的表现情况, 计算每个目标的成功率, 并将此反馈给LLM, 用以调整下一次的生成
防止overfit到LLM生成的Environment中, 隔一定间隔对原始环境进行一次训练
RoboVerse
- 安装: 配置项比较多, 数据量大, 下载困难
- 部分代码有问题, 无法正常启动, 依赖冲突
Robocasa
robot的environment位于RoboSuite, 封装了自己的Environment
代码
def reset_to(env, state): env.set_ep_meta(json.loads(state["ep_meta"])) env.reset() xml = env.edit_model_xml(state["model"]) env.reset_from_xml_string(xml) env.sim.reset() env.sim.set_state_from_flattened(state["states"]) env.sim.forward() env.update_state() def main(): f = h5py.File(os.path.join(os.getcwd(), "datasets/v0.1/single_stage/kitchen_pnp/PnPCounterToCab/2024-04-24/demo.hdf5")) env_meta = json.loads(f["data"].attrs["env_args"]) states = dict(states=f["data/demo_1/states"][()][0]) states["model"] = f["data/demo_1"].attrs["model_file"] ep_meta = f["data/demo_1"].attrs.get("ep_meta", None) states["ep_meta"] = ep_meta f.close() env_kwargs = env_meta["env_kwargs"] env_kwargs["env_name"] = env_meta["env_name"] env_kwargs["has_renderer"] = False env_kwargs["renderer"] = "mjviewer" env_kwargs["has_offscreen_renderer"] = True env_kwargs["use_camera_obs"] = False print(json.dumps(env_kwargs, indent=4)) path = f"./video_result/video_{len(os.listdir('./video_result'))}.mp4" video_writer = imageio.get_writer(path, fps=50) # initial env env = robosuite.make(**env_kwargs) reset_to(env, states) steps = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ...] for step in steps: _ret = env.step(step) video_image = [] for cam in ["robot0_agentview_center"]: im = env.sim.render(camera_name=cam, width=512, height=768)[::-1] video_image.append(im) video_image = np.concatenate(video_image, axis=1) video_writer.append_data(video_image) video_writer.close() env.close()
实际调用: robosuite的make方法创建一个环境, 配置参数由dataset定义
- env_name: 创建的环境名字
- robots: 包含的robot, robosuite支持多机器人, 但是robocasa的kitchen只支持一个机器人
- controller_configs: 包含mujoco的controller的配置(kp, limits等等)
当前进度:
- 已完成panda mobile robot的操控
- 即将完成G1 robot的集成
未来计划:
- 添加G1 robot的controller config, 完成G1 robot的集成
- 测试G1 robot
- 尝试进行RL的训练