Task Components

较为繁琐的说法
  1. Setting up the Task Class
  2. Loading (Robots, Assets, Sensors, etc.) (run once)
  3. Episode initialization / Randomization (run every env.reset)
  4. Success/Failure Condition (run every env.step)
  5. Extra Observations (run every env.step)
  6. (Optional) Dense Reward Function (run every env.step)
  7. (Optional) Setting up cameras/sensors for observations and rendering/recording (run once)

最简工作流示例

env init
env init

env.step 负责根据 Action,然后在物理仿真,模拟无理式解的变化,并计算 Reward。

env.step
env.step

简单来说,一个类包含这些元素:

  1. @register_env() 方便外部调用
  2. class CustomEnv(BaseEnv) 使用继承,快速开发新 Testcase
  3. (成员变量)SUPPORTED_ROBOTS = [] 定义该 Testcase 里使用的 Robot
  4. (成员变量)agent: Union[...] Robot,也即 Agent

Environment Class

首先,我们定义一个类继承 BaseEnv,这个类是我们初始化 Environment 的入口。同时需要调用 mani_skill.utils.registeration.register_env() 函数进行“注册”(主要是定义名称和限定最大迭代步数)

1
2
@register_env("CustomEnv-v1", max_episode_steps=200)
class CustomEnv(BaseEnv):

然后我们在这个环境里定义我们需要的 Agent


定义物体

位置与朝向

建议在 _load_scene() 的时候就设置一次位置与朝向,然后在 _initialize_episode()