FS5 20-DoF × KUKA iiwa14 — SimToolReal(hammer)SAPG 策略權重

用 FS5 20-DoF 靈巧手 + KUKA iiwa14,在 Isaac Sim / Isaac Lab 上複現 SimToolReal 的訓練流程,只做 hammer 一類、純模擬。

⚠️ 這個 repo 只有策略權重(.pth)。 FS5 的 3D 模型(CAD / mesh / URDF)不包含在內,也不會提供 —— 那是不可公開的資產。 沒有那份幾何,這些權重無法重現環境。


檔案

檔名 epoch frames 用途
fs5_hammer_ep27000_3.05B.pth 27,000 3.047 B 起飛後、容差課程點火前
fs5_hammer_ep36931_5.00B.pth 36,931 5.000 B 容差課程進行中
fs5_hammer_ep45000_6.59B.pth 45,000 6.586 B 容差第 7 階(0.0359)
fs5_hammer_ep50400_7.65B.pth 50,400 7.648 B 最新,續練請用這支(容差第 9 階 0.0291)
fs5_hammer_ep27800_3.20B_flat_np126.pth 27,800 3.205 B 已攤平 + numpy 1.26,可直接錄影/播放
fs5_hammer_ep42600_6.11B_flat_np126.pth 42,600 6.115 B 同上,較新

epoch/frame 是實際載入檔案讀出來的,不是從檔名推的。 (原始檔名如 last_0_simtoolreal_sapg_ep_27000_rew_373.1418.pth 看不出 frames, 而 last/model.pth 這種名字連 epoch 都看不出來 —— 拿錯會用到起飛前的策略而且不會報錯。)


訓練設定(與權重對應的實際 Hydra overrides)

env.scene.num_envs: 12288
env.termination.success_tolerance: 0.075
agent.params.config.expl_coef_block_size: 2048
agent.params.config.minibatch_size: 32768
agent.params.config.central_value_config.minibatch_size: 32768

演算法 SAPG(6 blocks)、非對稱 critic。物件只有 hammer 一類。 硬體:RTX PRO 6000 96 GB(Vast.ai)、replicate_physics=False、無 SDF collider。


載入時的兩個坑(都實測過)

1. numpy 版本綁定

雲端存檔用 numpy 2.x,本機若是 1.26 會失敗。而 rl_games 把 torch.load 包在重試裡, 只會吐 Could not execute <function load ...>, give up after 5 attempts —— 不會告訴你根因是 ModuleNotFoundError: No module named 'numpy._core'。

import sys, numpy, numpy.core, torch
for sub in ["", ".multiarray", ".umath", ".numeric", "._multiarray_umath"]:
    name = "numpy._core" + sub
    sys.modules[name] = __import__("numpy.core" + sub, fromlist=["x"]) if sub else numpy.core
ckpt = torch.load(path, map_location="cpu", weights_only=False)

*_flat_np126.pth 兩支已經處理好,不需要這段。

2. 結構是 rank-keyed,而且 env_state 是 None

非 _flat_ 的檔案外層是 {0: {...}}(SAPG rank),player.restore() 吃不到,要先攤平:

if set(ckpt.keys()) <= {0,1,2,3,4,5}:
    ckpt = ckpt[0]

所有檔案的 env_state 都是 None —— 這個移植沒有實作 get_env_state() / set_env_state()。所以 --checkpoint_load_mode resume 不會還原容差課程,success_tolerance 會退回最寬的 0.075。

續練時要用 Hydra 手動釘回中斷時的值,並同時調高 max_epochs(epoch 會被還原):

env.termination.success_tolerance=<中斷時的值>
agent.params.config.max_epochs=<比目前 epoch 大>

會還原的:model / optimizer / epoch / frame / rnn_states / obs / trackers。


訓練曲線(實測)

frames 抬起率 episode_final/successes 容差
0.04 → 1.01 B 17–19%(平台期整整 1 B) ~0.001 0.075
1.55 B 78.7% 0.0027 0.075
3.25 B — 轉折 0.075
5.24 B — 2.7 0.075
5.371 B — ~2.7 第一次收緊
6.18 B — 2.7–3.05 0.0399(收 6 階)
6.59 B 90.8% 2.86 0.0359(收 7 階)
7.65 B 90.1% 2.21 0.0291(收 9 階)

前 1 B frames 完全看不出在學 —— 論文自己的曲線在前 20 B 也是平的。 在平台期看起來「學不會」是正常的,不要據此停機。

ep_succ 停在 2.7–3.05 而容差持續下降不是停滯,是課程正確運作: 摸到 3.0 → ×0.9 加難度 → 掉回 2.9 → 再爬。 6.59 B → 7.65 B 之間 successes 從 2.86 掉到 2.21,同期容差從 0.0359 收到 0.0291 (連收 2 階)—— 這是課程在加難度,不是策略退步。抬起率同期維持在 90%。


授權

策略權重僅供研究參考。FS5 手部資產屬第三方,不隨附、不轉發。 上游 SimToolReal 的授權另見其 repo。

Downloads last month

-

Downloads are not tracked for this model. How to track
Video Preview
loading

Paper for Lebruhbruh/fs5-simtoolreal-hammer