Reacher¶

此環境是 Mujoco 環境的一部分,其中包含關於環境的一般資訊。
Action Space |
|
Observation Space |
|
import |
|
描述¶
“Reacher” 是一個雙關節機械手臂。目標是將機械手臂的末端執行器(稱為指尖)移動到隨機位置產生的目標附近。
Action Space¶

Action space 是一個 Box(-1, 1, (2,), float32)
。一個 action (a, b)
代表施加在鉸鏈關節上的扭矩。
Num |
Action |
Control Min |
Control Max |
Name (在對應的 XML 檔案中) |
Joint |
Type (Unit) |
---|---|---|---|---|---|---|
0 |
施加在第一個鉸鏈(連接連桿到固定點)的扭矩 |
-1 |
1 |
joint0 |
hinge |
torque (N m) |
1 |
施加在第二個鉸鏈(連接兩個連桿)的扭矩 |
-1 |
1 |
joint1 |
hinge |
torque (N m) |
Observation Space¶
Observation space 由以下部分組成(依序)
cos(qpos) (2 個元素): 兩個手臂的角度的餘弦值。
sin(qpos) (2 個元素): 兩個手臂的角度的正弦值。
qpos (2 個元素): 目標的座標。
qvel (2 個元素): 手臂的角速度(它們的導數)。
xpos (2 個元素): 目標與 Reacher 的向量。
Observation space 是一個 Box(-Inf, Inf, (10,), float64)
,其中元素如下
Num |
Observation |
Min |
Max |
Name (在對應的 XML 檔案中) |
Joint |
Type (Unit) |
---|---|---|---|---|---|---|
0 |
第一個手臂的角度的餘弦值 |
-Inf |
Inf |
cos(joint0) |
hinge |
unitless |
1 |
第二個手臂的角度的餘弦值 |
-Inf |
Inf |
cos(joint1) |
hinge |
unitless |
2 |
第一個手臂的角度的正弦值 |
-Inf |
Inf |
sin(joint0) |
hinge |
unitless |
3 |
第二個手臂的角度的正弦值 |
-Inf |
Inf |
sin(joint1) |
hinge |
unitless |
4 |
目標的 x 座標 |
-Inf |
Inf |
target_x |
slide |
position (m) |
5 |
目標的 y 座標 |
-Inf |
Inf |
target_y |
slide |
position (m) |
6 |
第一個手臂的角速度 |
-Inf |
Inf |
joint0 |
hinge |
angular velocity (rad/s) |
7 |
第二個手臂的角速度 |
-Inf |
Inf |
joint1 |
hinge |
angular velocity (rad/s) |
8 |
position_fingertip - position_target 的 x 值 |
-Inf |
Inf |
NA |
slide |
position (m) |
9 |
position_fingertip - position_target 的 y 值 |
-Inf |
Inf |
NA |
slide |
position (m) |
excluded |
position_fingertip - position_target 的 z 值 (由於 reacher 是 2d,因此恆為 0) |
-Inf |
Inf |
NA |
slide |
position (m) |
大多數 Gymnasium 環境僅返回 .xml
檔案中關節的位置和速度作為環境的狀態。然而,在 reacher 中,狀態是透過僅組合位置和速度的某些元素並對它們執行一些函數轉換而建立的。reacher.xml
包含這 4 個關節
Num |
Observation |
Min |
Max |
Name (在對應的 XML 檔案中) |
Joint |
Unit |
---|---|---|---|---|---|---|
0 |
第一個手臂的角度 |
-Inf |
Inf |
joint0 |
hinge |
angle (rad) |
1 |
第二個手臂的角度 |
-Inf |
Inf |
joint1 |
hinge |
angle (rad) |
2 |
目標的 x 座標 |
-Inf |
Inf |
target_x |
slide |
position (m) |
3 |
目標的 y 座標 |
-Inf |
Inf |
target_y |
slide |
position (m) |
Rewards¶
總獎勵為:reward = reward_distance + reward_control。
reward_distance:此獎勵衡量 reacher 的指尖(未連接的末端)距離目標有多遠,如果 reacher 的指尖離目標更遠,則分配更負的值。它是 \(-w_{near} \|(P_{fingertip} - P_{target})\|_2\)。其中 \(w_{near}\) 是
reward_near_weight
(預設為 \(1\))。reward_control:懲罰 walker 採取過大動作的負獎勵。它被衡量為 action 的負平方歐幾里得範數,即 \(-w_{control} \|action\|_2^2\)。其中 \(w_{control}\) 是
reward_control_weight
。(預設為 \(0.1\))
info
包含個別的獎勵項。
Starting State¶
reacher 手臂的初始位置狀態為 \(\mathcal{U}_{[-0.1 \times I_{2}, 0.1 \times I_{2}]}\)。目標的位置狀態(永久地)為 \(\mathcal{S}(0.2)\)。Reacher 手臂的初始速度狀態為 \(\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。
Episode End¶
Termination¶
Reacher 永遠不會終止。
Truncation¶
一個 episode 的預設持續時間為 50 個時間步。
Arguments¶
Reacher 提供一系列參數來修改 observation space、reward function、初始狀態和終止條件。這些參數可以在 gymnasium.make
中以以下方式應用
import gymnasium as gym
env = gym.make('Reacher-v5', xml_file=...)
Parameter |
Type |
Default |
Description |
---|---|---|---|
|
str |
|
MuJoCo 模型的路徑 |
|
float |
|
reward_dist 項的權重(請參閱 |
|
float |
|
reward_control 項的權重(請參閱 |
Version History¶
v5
現在最低
mujoco
版本為 2.3.3。新增
default_camera_config
參數,一個用於設定mj_camera
屬性的字典,主要用於自訂環境。新增
frame_skip
參數,用於配置dt
(step()
的持續時間),預設值因環境而異,請查看環境文件頁面。修正錯誤:
reward_distance
基於物理步驟之前的狀態,現在它基於物理步驟之後的狀態(相關的 GitHub issue)。從 observation space 中移除
"z - position_fingertip"
,因為它始終為 0,因此沒有為 agent 提供有用的資訊,這應該會導致訓練速度稍微加快(相關的 GitHub issue)。新增
xml_file
參數。新增
reward_dist_weight
、reward_control_weight
參數來配置 reward function(預設值與v4
中的預設值大致相同)。修正
info["reward_ctrl"]
未乘以 reward weight 的問題。
v4:所有 MuJoCo 環境現在都使用 mujoco >= 2.1.3 中的 MuJoCo bindings
v3:此環境沒有 v3 版本。
v2:所有連續控制環境現在都使用 mujoco-py >= 1.50
v1:機器人基礎任務的最大時間步數提高到 1000(不包括 reacher,其最大時間步數為 50)。為環境新增 reward_threshold。
v0:初始版本發佈