Reacher¶
此環境是 MuJoCo 環境的一部分,其中包含有關該環境的通用資訊。
動作空間 |
|
觀測空間 |
|
匯入 |
|
描述¶
“Reacher”是一個雙關節機器人手臂。目標是將機器人的末端執行器(稱為*指尖*)移動到隨機位置生成的目標附近。
動作空間¶
動作空間是一個 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個元素): 目標與 Reacher 之間的向量。
觀測空間是一個 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 |
slide |
位置 (m) |
5 |
目標y座標 |
-Inf |
Inf |
target_y |
slide |
位置 (m) |
6 |
第一個手臂的角速度 |
-Inf |
Inf |
joint0 |
鉸鏈 |
角速度 (rad/s) |
7 |
第二個手臂的角速度 |
-Inf |
Inf |
joint1 |
鉸鏈 |
角速度 (rad/s) |
8 |
指尖位置 - 目標位置 的 x 值 |
-Inf |
Inf |
不適用 |
slide |
位置 (m) |
9 |
指尖位置 - 目標位置 的 y 值 |
-Inf |
Inf |
不適用 |
slide |
位置 (m) |
排除 |
指尖位置 - 目標位置 的 z 值(Reacher 是2D的,所以始終為0) |
-Inf |
Inf |
不適用 |
slide |
位置 (m) |
大多數 Gymnasium 環境僅返回 .xml 檔案中關節的位置和速度作為環境狀態。然而,在 Reacher 中,狀態是透過組合位置和速度的某些元素並對其執行一些函式變換而建立的。reacher.xml 包含這4個關節
序號 |
觀測 |
最小值 |
最大值 |
名稱 (在對應的XML檔案中) |
關節 |
單位 |
|---|---|---|---|---|---|---|
0 |
第一個手臂的角度 |
-Inf |
Inf |
joint0 |
鉸鏈 |
角度 (rad) |
1 |
第二個手臂的角度 |
-Inf |
Inf |
joint1 |
鉸鏈 |
角度 (rad) |
2 |
目標x座標 |
-Inf |
Inf |
target_x |
slide |
位置 (m) |
3 |
目標y座標 |
-Inf |
Inf |
target_y |
slide |
位置 (m) |
獎勵¶
總獎勵為:*獎勵* = *距離獎勵 + 控制獎勵*。
距離獎勵: 此獎勵衡量 Reacher 的*指尖*(未連線端)與目標的距離,如果 Reacher 的*指尖*離目標越遠,則分配一個更負的值。它是 \(-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 包含各個獎勵項。
初始狀態¶
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*。
回合結束¶
終止¶
Reacher 永遠不會終止。
截斷¶
一個回合的預設持續時間為 50 個時間步。
引數¶
Reacher 提供了一系列引數來修改觀測空間、獎勵函式、初始狀態和終止條件。這些引數可以在 gymnasium.make 期間按以下方式應用
import gymnasium as gym
env = gym.make('Reacher-v5', xml_file=...)
引數 |
型別 |
預設值 |
描述 |
|---|---|---|---|
|
str |
|
MuJoCo 模型的路徑 |
|
float |
|
*距離獎勵* 項的權重 (參見 |
|
float |
|
*控制獎勵* 項的權重 (參見 |
版本歷史¶
v5
最低
mujoco版本現在是 2.3.3。增加了
default_camera_config引數,這是一個用於設定mj_camera屬性的字典,主要用於自定義環境。增加了
frame_skip引數,用於配置dt(step()的持續時間),預設值因環境而異,請查閱環境文件頁面。修復了錯誤:
距離獎勵之前基於物理步之前的狀態,現在基於物理步之後的狀態(相關 GitHub issue)。從觀測空間中移除了
"z - position_fingertip",因為它始終為 0,無法為智慧體提供有用資訊,這應會使訓練略微加快(相關 GitHub issue)。增加了
xml_file引數。增加了
reward_dist_weight、reward_control_weight引數以配置獎勵函式(預設值與v4中的基本相同)。修復了
info["reward_ctrl"]未乘以獎勵權重的問題。
v4: 所有 MuJoCo 環境現在使用 mujoco >= 2.1.3 中的 MuJoCo 繫結
v3: 此環境沒有 v3 版本釋出。已移至 gymnasium-robotics 倉庫。
v2: 所有連續控制環境現在使用 mujoco-py >= 1.50。已移至 gymnasium-robotics 倉庫。
v1: 基於機器人的任務(不包括 Reacher,其最大時間步為 50)的最大時間步提高到 1000。向環境中添加了 reward_threshold。
v0: 初始版本釋出