Ant (螞蟻)

../../../_images/ant.gif

此環境是 Mujoco 環境的一部分,其中包含關於環境的通用資訊。

Action Space (動作空間)

Box(-1.0, 1.0, (8,), float32)

Observation Space (觀測空間)

Box(-inf, inf, (105,), float64)

import (導入)

gymnasium.make("Ant-v5")

Description (描述)

此環境基於 Schulman、Moritz、Levine、Jordan 和 Abbeel 在“使用廣義優勢估計進行高維連續控制”中介紹的環境。 螞蟻是一個 3D 四足機器人,由一個軀幹(自由旋轉體)和附在其上的四條腿組成,每條腿有兩個身體部件。 目標是通過將扭矩應用於連接每條腿的兩個身體部件和軀幹的八個鉸鏈(九個身體部件和八個鉸鏈)來協調四條腿以向前(向右)方向移動。

注意:雖然機器人被稱為“螞蟻”,但實際上它高 75 厘米,重 910.88 克,其中軀幹重 327.25 克,每條腿重 145.91 克。

Action Space (動作空間)

../../../_images/ant.png

動作空間是 Box(-1, 1, (8,), float32)。 動作表示在鉸鏈關節處施加的扭矩。

Num (編號)

Action (動作)

Control Min (控制最小值)

Control Max (控制最大值)

Name (in corresponding XML file) (名稱(在對應的 XML 檔案中))

Joint (關節)

Type (Unit) (類型(單位))

0

施加在軀幹和後右髖部之間的轉子上的扭矩

-1

1

hip_4 (right_back_leg) (髖部 4(右後腿))

hinge (鉸鏈)

torque (N m) (扭矩 (N m))

1

施加在後右腿兩個連桿之間的轉子上的扭矩

-1

1

angle_4 (right_back_leg) (角度 4(右後腿))

hinge (鉸鏈)

torque (N m) (扭矩 (N m))

2

施加在軀幹和前左髖部之間的轉子上的扭矩

-1

1

hip_1 (front_left_leg) (髖部 1(前左腿))

hinge (鉸鏈)

torque (N m) (扭矩 (N m))

3

施加在前左腿兩個連桿之間的轉子上的扭矩

-1

1

angle_1 (front_left_leg) (角度 1(前左腿))

hinge (鉸鏈)

torque (N m) (扭矩 (N m))

4

施加在軀幹和前右髖部之間的轉子上的扭矩

-1

1

hip_2 (front_right_leg) (髖部 2(前右腿))

hinge (鉸鏈)

torque (N m) (扭矩 (N m))

5

施加在前右腿兩個連桿之間的轉子上的扭矩

-1

1

angle_2 (front_right_leg) (角度 2(前右腿))

hinge (鉸鏈)

torque (N m) (扭矩 (N m))

6

施加在軀幹和後左髖部之間的轉子上的扭矩

-1

1

hip_3 (back_leg) (髖部 3(後腿))

hinge (鉸鏈)

torque (N m) (扭矩 (N m))

7

施加在後左腿兩個連桿之間的轉子上的扭矩

-1

1

angle_3 (back_leg) (角度 3(後腿))

hinge (鉸鏈)

torque (N m) (扭矩 (N m))

Observation Space (觀測空間)

觀測空間由以下部分組成(依序)

  • qpos (預設為 13 個元素): 機器人身體部位的位置值。

  • qvel (14 個元素): 這些個別身體部位的速度(它們的導數)。

  • cfrc_ext (78 個元素): 這是基於質心的身體部位上的外力。 它的形狀為 13 * 6 (nbody * 6),因此在狀態空間中增加了另外 78 個元素。 (外力 - 力 x、y、z 和扭矩 x、y、z)

預設情況下,觀測不包括軀幹的 x 和 y 坐標。 這些可以通過在建構期間傳遞 exclude_current_positions_from_observation=False 來包含在內。 在這種情況下,觀測空間將是一個 Box(-Inf, Inf, (107,), float64),其中前兩個觀測是軀幹的 x 和 y 坐標。 無論 exclude_current_positions_from_observation 設定為 True 還是 False,x 和 y 坐標都會在 info 中返回,鍵分別為 "x_position""y_position"

但是,預設情況下,觀測空間是一個 Box(-Inf, Inf, (105,), float64),其中位置和速度元素如下

Num (編號)

Observation (觀測)

Min (最小值)

Max (最大值)

Name (in corresponding XML file) (名稱(在對應的 XML 檔案中))

Joint (關節)

Type (Unit) (類型(單位))

0

軀幹(中心)的 z 坐標

-Inf

Inf

root (根)

free (自由)

position (m) (位置 (m))

1

軀幹(中心)的 w 方向

-Inf

Inf

root (根)

free (自由)

angle (rad) (角度 (rad))

2

軀幹(中心)的 x 方向

-Inf

Inf

root (根)

free (自由)

angle (rad) (角度 (rad))

3

軀幹(中心)的 y 方向

-Inf

Inf

root (根)

free (自由)

angle (rad) (角度 (rad))

4

軀幹(中心)的 z 方向

-Inf

Inf

root (根)

free (自由)

angle (rad) (角度 (rad))

5

軀幹與前左側第一個連桿之間的角度

-Inf

Inf

hip_1 (front_left_leg) (髖部 1(前左腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

6

前左側兩個連桿之間的角度

-Inf

Inf

ankle_1 (front_left_leg) (腳踝 1(前左腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

7

軀幹與前右側第一個連桿之間的角度

-Inf

Inf

hip_2 (front_right_leg) (髖部 2(前右腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

8

前右側兩個連桿之間的角度

-Inf

Inf

ankle_2 (front_right_leg) (腳踝 2(前右腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

9

軀幹與後左側第一個連桿之間的角度

-Inf

Inf

hip_3 (back_leg) (髖部 3(後腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

10

後左側兩個連桿之間的角度

-Inf

Inf

ankle_3 (back_leg) (腳踝 3(後腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

11

軀幹與後右側第一個連桿之間的角度

-Inf

Inf

hip_4 (right_back_leg) (髖部 4(右後腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

12

後右側兩個連桿之間的角度

-Inf

Inf

ankle_4 (right_back_leg) (腳踝 4(右後腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

13

軀幹的 x 坐標速度

-Inf

Inf

root (根)

free (自由)

velocity (m/s) (速度 (m/s))

14

軀幹的 y 坐標速度

-Inf

Inf

root (根)

free (自由)

velocity (m/s) (速度 (m/s))

15

軀幹的 z 坐標速度

-Inf

Inf

root (根)

free (自由)

velocity (m/s) (速度 (m/s))

16

軀幹的 x 坐標角速度

-Inf

Inf

root (根)

free (自由)

angular velocity (rad/s) (角速度 (rad/s))

17

軀幹的 y 坐標角速度

-Inf

Inf

root (根)

free (自由)

angular velocity (rad/s) (角速度 (rad/s))

18

軀幹的 z 坐標角速度

-Inf

Inf

root (根)

free (自由)

angular velocity (rad/s) (角速度 (rad/s))

19

軀幹與前左連桿之間的角度的角速度

-Inf

Inf

hip_1 (front_left_leg) (髖部 1(前左腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

20

前左連桿之間角度的角速度

-Inf

Inf

ankle_1 (front_left_leg) (腳踝 1(前左腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

21

軀幹與前右連桿之間的角度的角速度

-Inf

Inf

hip_2 (front_right_leg) (髖部 2(前右腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

22

前右連桿之間角度的角速度

-Inf

Inf

ankle_2 (front_right_leg) (腳踝 2(前右腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

23

軀幹與後左連桿之間的角度的角速度

-Inf

Inf

hip_3 (back_leg) (髖部 3(後腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

24

後左連桿之間角度的角速度

-Inf

Inf

ankle_3 (back_leg) (腳踝 3(後腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

25

軀幹與後右連桿之間的角度的角速度

-Inf

Inf

hip_4 (right_back_leg) (髖部 4(右後腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

26

後右連桿之間角度的角速度

-Inf

Inf

ankle_4 (right_back_leg) (腳踝 4(右後腿))

hinge (鉸鏈)

angle (rad) (角度 (rad))

excluded (排除)

軀幹(中心)的 x 坐標

-Inf

Inf

root (根)

free (自由)

position (m) (位置 (m))

excluded (排除)

軀幹(中心)的 y 坐標

-Inf

Inf

root (根)

free (自由)

position (m) (位置 (m))

身體部位是

body part (身體部位)

id (for v2, v3, v4)

id (for v5)

worldbody (注意:所有值都是常數 0)

0

excluded (排除)

torso (軀幹)

1

0

front_left_leg (前左腿)

2

1

aux_1 (front left leg) (輔助 1(前左腿))

3

2

ankle_1 (front left leg) (腳踝 1(前左腿))

4

3

front_right_leg (前右腿)

5

4

aux_2 (front right leg) (輔助 2(前右腿))

6

5

ankle_2 (front right leg) (腳踝 2(前右腿))

7

6

back_leg (back left leg) (後腿(後左腿))

8

7

aux_3 (back left leg) (輔助 3(後左腿))

9

8

ankle_3 (back left leg) (腳踝 3(後左腿))

10

9

right_back_leg (右後腿)

11

10

aux_4 (back right leg) (輔助 4(後右腿))

12

11

ankle_4 (back right leg) (腳踝 4(後右腿))

13

12

(x,y,z) 坐標是平移自由度,而方向是旋轉自由度,表示為四元數。 可以在MuJoCo 文件中閱讀更多關於自由關節的資訊。

注意: 使用 Ant-v3 或更早版本時,已報告在使用 mujoco-py 版本 > 2.0 時出現問題,導致接觸力始終為 0。 因此,建議在使用 Ant 環境時使用 mujoco-py 版本 < 2.0,如果您想報告包含接觸力的結果(如果您的實驗中未使用接觸力,則可以使用版本 > 2.0)。

Rewards (獎勵)

總獎勵為reward = healthy_reward + forward_reward - ctrl_cost - contact_cost

  • healthy_reward:螞蟻健康的每個時間步(請參閱“Episode End”部分中的定義),它都會獲得固定值 healthy_reward 的獎勵(預設為 \(1\))。

  • forward_reward:向前移動的獎勵,如果螞蟻向前移動(在正 \(x\) 方向 / 向右方向),則此獎勵將為正值。 \(w_{forward} \times \frac{dx}{dt}\),其中 \(dx\)main_body 的位移(\(x_{after-action} - x_{before-action}\)),\(dt\) 是動作之間的時間,這取決於 frame_skip 參數(預設為 \(5\))和 frametime,即 \(0.01\) - 因此預設值為 \(dt = 5 \times 0.01 = 0.05\)\(w_{forward}\)forward_reward_weight(預設為 \(1\))。

  • ctrl_cost:負獎勵,用於懲罰螞蟻採取過大的動作。 \(w_{control} \times \|action\|_2^2\),其中 \(w_{control}\)ctrl_cost_weight(預設為 \(0.5\))。

  • contact_cost:負獎勵,如果外部接觸力太大,則懲罰螞蟻。 \(w_{contact} \times \|F_{contact}\|_2^2\),其中 \(w_{contact}\)contact_cost_weight(預設為 \(5\times10^{-4}\)),\(F_{contact}\) 是由 contact_force_range 裁剪的外部接觸力(請參閱“Observation Space”上的 cfrc_ext 部分)。

info 包含個別的獎勵項。

但是,如果在 v4use_contact_forces=False,則返回的總獎勵為reward = healthy_reward + forward_reward - ctrl_cost

Starting State (起始狀態)

初始位置狀態為 \([0.0, 0.0, 0.75, 1.0, 0.0, ... 0.0] + \mathcal{U}_{[-reset\_noise\_scale \times I_{15}, reset\_noise\_scale \times I_{15}]}\)。 初始速度狀態為 \(\mathcal{N}(0_{14}, reset\_noise\_scale^2 \times I_{14})\)

其中 \(\mathcal{N}\) 是多元常態分佈,\(\mathcal{U}\) 是多元均勻連續分佈。

請注意,z 和 x 坐標是非零的,因此螞蟻可以立即站起來並面向前方(x 軸)。

Episode End (回合結束)

Termination (終止)

如果 terminate_when_unhealthy is True(預設值),則當螞蟻不健康時,環境將終止。 如果發生以下任何一種情況,則螞蟻是不健康的

  1. 任何狀態空間值不再是有限的。

  2. 軀幹(高度)的 z 坐標不在healthy_z_range 參數給出的閉區間內(預設值為 \([0.2, 1.0]\))。

Truncation (截斷)

回合的預設持續時間為 1000 個時間步。

Arguments (參數)

Ant (螞蟻) 提供了各種參數來修改觀測空間、獎勵函數、初始狀態和終止條件。 這些參數可以在 gymnasium.make 中以以下方式應用

import gymnasium as gym
env = gym.make('Ant-v5', ctrl_cost_weight=0.5, ...)

Parameter (參數)

Type (類型)

Default (預設)

Description (描述)

xml_file

str

"ant.xml"

MuJoCo 模型的路徑

forward_reward_weight (向前獎勵權重)

float

1

forward_reward 項的權重(請參閱 Rewards 部分)

ctrl_cost_weight (控制成本權重)

float

0.5

ctrl_cost 項的權重(請參閱 Rewards 部分)

contact_cost_weight (接觸成本權重)

float

5e-4

contact_cost 項的權重(請參閱 Rewards 部分)

healthy_reward (健康獎勵)

float

1

healthy_reward 項的權重(請參閱 Rewards 部分)

main_body (主體)

str|int

1(“torso”)(“軀幹”)

用於計算 dx/forward_reward 的身體的名稱或 ID(適用於自訂 MuJoCo 模型)(請參閱 Rewards 部分)

terminate_when_unhealthy (不健康時終止)

bool

True

如果 True,則在不健康時發出 terminated 信號(請參閱 Episode End 部分)

healthy_z_range (健康 z 範圍)

tuple

(0.2, 1)

如果軀幹的 z 坐標在此範圍內,則螞蟻被認為是健康的(請參閱 Episode End 部分)

contact_force_range (接觸力範圍)

tuple

(-1, 1)

contact_cost 的計算中,接觸力被裁剪到此範圍(請參閱 Rewards 部分)

reset_noise_scale (重置雜訊比例)

float

0.1

初始位置和速度的隨機擾動的比例(請參閱 Starting State 部分)

exclude_current_positions_from_observation (從觀測中排除目前位置)

bool

True

是否從觀測中省略 x 和 y 坐標。 排除位置可以作為歸納偏見,以誘導策略中與位置無關的行為(請參閱 Observation State 部分)

include_cfrc_ext_in_observation (在觀測中包含 cfrc_ext)

bool

True

是否在觀測中包含 cfrc_ext 元素(請參閱 Observation State 部分)

use_contact_forces (僅限 v4)

bool

False

如果 True,它通過添加接觸力來擴展觀測空間(請參閱 Observation Space 部分),並將 contact_cost 包含在獎勵函數中(請參閱 Rewards 部分)

Version History (版本歷史)

  • v5

    • 最低 mujoco 版本現在為 2.3.3。

    • 增加了對使用 xml_file 參數的完全自訂/第三方 mujoco 模型的支援(以前只能對現有模型進行少量更改)。

    • 新增了 default_camera_config 參數,這是一個用於設定 mj_camera 屬性的字典,主要用於自訂環境。

    • 新增了 env.observation_structure,這是一個用於指定觀測空間組成的字典(例如 qposqvel),對於為 MuJoCo 環境建立工具和封裝器非常有用。

    • 返回一個非空的 inforeset(),以前返回的是一個空字典,新鍵與 step() 的狀態資訊相同。

    • 新增了 frame_skip 參數,用於配置 dtstep() 的持續時間),預設值因環境而異,請查看環境文件頁面。

    • 修復錯誤:healthy_reward 在每個步驟都給出(即使螞蟻不健康),現在僅在螞蟻健康時才給出。 info["reward_survive"] 已使用此更改進行更新(相關的 GitHub 問題)。

    • 獎勵函數現在始終包含 contact_cost,之前僅在 use_contact_forces=True 時才包含(可以使用 contact_cost_weight=0 設定為 0)。

    • 從觀測空間中排除了 worldbodycfrc_ext,因為它始終為 0,因此沒有向代理提供有用的資訊,從而實現了稍快的訓練(相關的 GitHub 問題)。

    • 新增了 main_body 參數,該參數指定用於計算向前獎勵的身體(主要用於自訂 MuJoCo 模型)。

    • 新增了 forward_reward_weight 參數,預設值為 1(實際上與 v4 中的行為相同)。

    • 新增了 include_cfrc_ext_in_observation 參數,以前在 v4 中,cfrc_ext 觀測的包含由 use_contact_forces 控制,後者預設為 False,而 include_cfrc_ext_in_observation 預設為 True

    • 移除了 use_contact_forces 參數(注意:其功能已被 include_cfrc_ext_in_observationcontact_cost_weight 取代)(相關的 GitHub 問題)。

    • 修復了 info["reward_ctrl"] 有時包含 contact_cost 而不是 ctrl_cost 的問題。

    • 修復了 info["x_position"] & info["y_position"] & info["distance_from_origin"] 給出 xpos 而不是 qpos 觀測的問題(xpos 觀測落後 1 個 mj_step() 更多資訊請參閱 這裡)(相關的 GitHub 問題 #1 & GitHub 問題 #2)。

    • 移除了 info["forward_reward"],因為它等效於 info["reward_forward"]

  • v4:所有 MuJoCo 環境現在都使用 mujoco >= 2.1.3 中的 MuJoCo 綁定,也從預設觀測空間中移除了接觸力(新變數 use_contact_forces=True 可以恢復它們)。

  • v3:支援 gymnasium.make kwargs,例如 xml_filectrl_cost_weightreset_noise_scale 等。 rgb 渲染來自追蹤相機(因此代理不會從螢幕上跑掉)。

  • v2:所有連續控制環境現在都使用 mujoco-py >= 1.50。

  • v1:機器人基礎任務的最大時間步數提高到 1000。 為環境新增了 reward_threshold。

  • v0:初始版本發佈