Reacher

../../../_images/reacher.gif

此环境是 Mujoco 环境的一部分,其中包含有关环境的一般信息。

动作空间

Box(-1.0, 1.0, (2,), float32)

观察空间

Box(-inf, inf, (10,), float64)

导入

gymnasium.make("Reacher-v5")

描述

“Reacher” 是一款双关节机器人手臂。目标是将机器人的末端执行器(称为“指尖”)移动到随机位置生成的靶点附近。

动作空间

../../../_images/reacher.png

动作空间是一个 Box(-1, 1, (2,), float32)。一个动作 (a, b) 代表应用在铰链关节上的扭矩。

编号

动作

控制最小值

控制最大值

名称(在对应的 XML 文件中)

关节

类型(单位)

0

应用在第一个铰链上的扭矩(连接链接到固定点)

-1

1

joint0

铰链

扭矩(N m)

1

应用在第二个铰链上的扭矩(连接两个链接)

-1

1

joint1

铰链

扭矩(N m)

观察空间

观察空间包含以下部分(按顺序):

  • cos(qpos) (2 个元素):两条手臂角度的余弦。

  • sin(qpos) (2 个元素):两条手臂角度的正弦。

  • qpos (2 个元素):靶点的坐标。

  • qvel (2 个元素):手臂的角速度(它们的导数)。

  • xpos (2 个元素):靶点和抓取器之间的向量。

观察空间是一个 Box(-Inf, Inf, (10,), float64),其中元素如下:

编号

观察

最小值

最大值

名称(在对应的 XML 文件中)

关节

类型(单位)

0

第一条手臂角度的余弦

-Inf

Inf

cos(joint0)

铰链

无量纲

1

第二条手臂角度的余弦

-Inf

Inf

cos(joint1)

铰链

无量纲

2

第一条手臂角度的正弦

-Inf

Inf

sin(joint0)

铰链

无量纲

3

第二条手臂角度的正弦

-Inf

Inf

sin(joint1)

铰链

无量纲

4

靶点的 x 坐标

-Inf

Inf

target_x

滑动

位置(m)

5

靶点的 y 坐标

-Inf

Inf

target_y

滑动

位置(m)

6

第一条手臂的角速度

-Inf

Inf

joint0

铰链

角速度(rad/s)

7

第二条手臂的角速度

-Inf

Inf

joint1

铰链

角速度(rad/s)

8

position_fingertip - position_target 的 x 值

-Inf

Inf

NA

滑动

位置(m)

9

position_fingertip - position_target 的 y 值

-Inf

Inf

NA

滑动

位置(m)

排除

position_fingertip - position_target 的 z 值(始终为 0,因为抓取器是二维的)

-Inf

Inf

NA

滑动

位置(m)

大多数体操馆环境只返回 .xml 文件中关节的位置和速度作为环境的状态。然而,在抓取器中,状态是通过组合位置和速度的某些元素并对它们进行一些函数变换来创建的。 reacher.xml 包含以下 4 个关节:

编号

观察

最小值

最大值

名称(在对应的 XML 文件中)

关节

单位

0

第一条手臂的角度

-Inf

Inf

joint0

铰链

角度(rad)

1

第二条手臂的角度

-Inf

Inf

joint1

铰链

角度(rad)

2

靶点的 x 坐标

-Inf

Inf

target_x

滑动

位置(m)

3

靶点的 y 坐标

-Inf

Inf

target_y

滑动

位置(m)

奖励

总奖励为:奖励 = 奖励距离 + 奖励控制

  • 奖励距离:此奖励衡量抓取器(未连接的末端)的“指尖”距离靶点多远,如果抓取器的“指尖”距离靶点更远,则会分配更负的值。它是 \(-w_{near} \|(P_{fingertip} - P_{target})\|_2\)。其中 \(w_{near}\)reward_near_weight(默认值为 \(1\))。

  • 奖励控制:对步行者采取过大动作进行惩罚的负面奖励。它被测量为动作的负平方欧几里德范数,即 \(-w_{control} \|action\|_2^2\)。其中 \(w_{control}\)reward_control_weight。(默认值为 \(0.1\)

info 包含各个奖励项。

起始状态

抓取器手臂的初始位置状态为 \(\mathcal{U}_{[-0.1 \times I_{2}, 0.1 \times I_{2}]}\)。目标的位置状态为(永久)\(\mathcal{S}(0.2)\)。抓取器手臂的初始速度状态为 \(\mathcal{U}_{[-0.005 \times 1_{2}, 0.005 \times 1_{2}]}\)。物体的速度状态为(永久)\(0_2\)

其中 \(\mathcal{U}\) 是多元均匀连续分布,而 \(\mathcal{S}\) 是均匀连续球形分布。

默认帧速率为 \(2\),每帧持续 \(0.01\),因此 dt = 5 * 0.01 = 0.02

回合结束

终止

抓取器永远不会终止。

截断

回合的默认持续时间为 50 个时间步。

参数

Reacher 提供了一系列参数来修改观察空间、奖励函数、初始状态和终止条件。这些参数可以在 gymnasium.make 中以以下方式应用:

import gymnasium as gym
env = gym.make('Reacher-v5', xml_file=...)

参数

类型

默认值

描述

xml_file

str

"reacher.xml"

MuJoCo 模型的路径

reward_dist_weight

float

1

奖励距离 项的权重(参见 奖励 部分)

reward_control_weight

float

0.1

float

奖励控制 项的权重(参见 奖励 部分)

  • 版本历史

    • v5

    • 最小 mujoco 版本现在是 2.3.3。

    • 添加了 default_camera_config 参数,这是一个用于设置 mj_camera 属性的字典,主要用于自定义环境。

    • 添加了 frame_skip 参数,用于配置 dtstep() 的持续时间),默认值因环境而异,请查看环境文档页面。

    • 修复了错误:reward_distance 基于物理步长之前的状态,现在它基于物理步长之后的状态(相关 GitHub 问题)。

    • 从观察空间中删除了 "z - position_fingertip",因为它始终为 0,因此没有提供任何有用的信息给代理,这应该会使训练速度略有提高(相关 GitHub 问题)。

    • 添加了 xml_file 参数。

    • 添加了 reward_dist_weightreward_control_weight 参数来配置奖励函数(默认值与 v4 中的值几乎相同)。

  • 修复了 info["reward_ctrl"] 未乘以奖励权重的问题。

  • v4:所有 MuJoCo 环境现在都使用 mujoco >= 2.1.3 中的 MuJoCo 绑定

  • v3:此环境没有 v3 版本。

  • v2:所有连续控制环境现在都使用 mujoco-py >= 1.50

  • v1:基于机器人的任务(不包括抓取器,其 max_time_steps 为 50)的 max_time_steps 提高到 1000。向环境添加了 reward_threshold。