Skip to content

Commit 62bb541

Browse files
committed
Name wuji-mjlab as the sim2sim target and describe DR by function
State up front that the task ports the wuji-mjlab reorient reference (with a link) and that the same environment is the sim2sim transfer target. Reframe the domain randomization section to describe each term by its role rather than as something tuned for sim2sim, and drop the "for transfer" framing notes.
1 parent 26c069d commit 62bb541

2 files changed

Lines changed: 16 additions & 26 deletions

File tree

‎docs/examples/wuji-reorient.en.md‎

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
SO(3) in-hand cube reorientation for the WUJI Hand: a fixed-base, palm-up dexterous hand
44
must rotate a free cube to a stream of random orientation goals (expressed in the wrist
55
"tag" frame) and hold each within a tolerance window without dropping it. The task is a
6-
Genesis-adapted port of the mjlab `reorient` reference, trained with RSL-RL PPO.
6+
Genesis-adapted port of the [wuji-mjlab](https://github.com/wuji-technology/wuji-mjlab)
7+
`reorient` reference, trained with RSL-RL PPO; that same wuji-mjlab environment is the
8+
sim2sim transfer target evaluated in [Sim-to-sim transfer](#sim-to-sim-transfer).
79

810
## Task
911

@@ -46,21 +48,20 @@ genelab play Genelab-Reorient-Wuji-Hand-v0 --checkpoint logs/rsl_rl/wuji_reorie
4648

4749
## Domain randomization
4850

49-
Randomization here targets the *robustness of the closed-loop feedback gait*, not a match to
50-
any single physics parameter — the reason is in [Sim-to-sim transfer](#sim-to-sim-transfer).
51-
Training (stripped at evaluation, which runs nominal physics) applies:
51+
Training applies domain randomization, stripped at evaluation (which runs nominal physics).
52+
Each term and its role:
5253

5354
- per-env startup randomization of hand and cube friction, link mass / COM, cube mass, and PD
54-
gains, plus encoder bias;
55+
gains, plus encoder bias — models the calibration error the policy must tolerate;
5556
- a per-step action noise and a heavier observation noise (joint position / velocity, cube
56-
position, goal error);
57-
- a frequent linear + angular cube velocity disturbance.
57+
position, goal error) — keep the policy from relying on exact actuation or precise state;
58+
- a frequent linear + angular cube velocity disturbance — perturbs the cube mid-manipulation
59+
so the policy keeps re-converging.
5860

5961
!!! note "Contact-solver randomization"
6062
Genesis stores geom solver parameters (`sol_params`) globally rather than per-env, so
6163
per-env contact-compliance randomization — and the MuJoCo-specific geom-size / inertia
62-
randomizations — have no per-env Genesis equivalent and are omitted. The transfer gap
63-
turned out not to live in those parameters anyway (see below).
64+
randomizations — have no per-env Genesis equivalent and are omitted.
6465

6566
## Convergence
6667

@@ -94,14 +95,6 @@ one. `play_mjlab` drives the same bridge through mjlab's native viewer (full sce
9495
visualization) for inspection. Both run inside the wuji-mjlab environment with GeneLab on
9596
`PYTHONPATH`.
9697

97-
!!! note "Why the randomization matters"
98-
A policy trained without the robustness randomization holds the cube but barely reorients
99-
it under mjlab (≈0 success): the regrasping gait overfits to Genesis's exact per-step
100-
contact response. Sweeping friction, mass, timestep, actuator gains, and the contact
101-
solver leaves that unchanged, while replaying the in-Genesis winning finger targets does
102-
move the mjlab cube — so the gap is closed-loop feedback brittleness, which the action /
103-
observation noise and angular cube disturbances address.
104-
10598
## See also
10699

107100
- [Wuji Hand](wuji-hand.md)

‎docs/examples/wuji-reorient.zh.md‎

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 舞肌手重定向
22

3-
舞肌手的 SO(3) 手内 cube 重定向:一只固定基座、掌心朝上的灵巧手,需要把一个自由 cube 旋转到一连串随机朝向目标(在腕部 "tag" 系下表达),并在容差窗口内稳定握持而不掉落。本任务是 mjlab `reorient` 参考实现的 Genesis 适配移植,用 RSL-RL PPO 训练。
3+
舞肌手的 SO(3) 手内 cube 重定向:一只固定基座、掌心朝上的灵巧手,需要把一个自由 cube 旋转到一连串随机朝向目标(在腕部 "tag" 系下表达),并在容差窗口内稳定握持而不掉落。本任务是 [wuji-mjlab](https://github.com/wuji-technology/wuji-mjlab) `reorient` 参考实现的 Genesis 适配移植,用 RSL-RL PPO 训练;该 wuji-mjlab 环境同时是[跨模拟器迁移](#sim-to-sim-transfer)所评测的 sim2sim 目标。
44

55
## 任务
66

@@ -29,14 +29,14 @@ genelab play Genelab-Reorient-Wuji-Hand-v0 --checkpoint logs/rsl_rl/wuji_reorie
2929

3030
## 域随机化
3131

32-
这里的随机化针对的是**闭环反馈步态的鲁棒性**,而非去匹配某个具体物理参数——原因见[跨模拟器迁移](#sim-to-sim-transfer)。训练时施加以下项(评估时全部剥离、跑标称物理):
32+
训练时施加域随机化(评估时全部剥离、跑标称物理)。各项及其作用:
3333

34-
- 逐环境 startup 随机化:手部与 cube 摩擦、link 质量/质心、cube 质量、PD 增益,以及编码器偏置;
35-
- 一个逐步动作噪声,以及更强的观测噪声(关节位置/速度、cube 位置、目标误差);
36-
- 一个频繁的线速度 + 角速度 cube 扰动。
34+
- 逐环境 startup 随机化:手部与 cube 摩擦、link 质量/质心、cube 质量、PD 增益、以及编码器偏置——作用是模拟策略必须容忍的标定误差;
35+
- 一个逐步动作噪声,以及更强的观测噪声(关节位置/速度、cube 位置、目标误差)——作用是让策略不依赖精确的作动或状态估计;
36+
- 一个频繁的线速度 + 角速度 cube 扰动——作用是在操作中途扰动 cube,迫使策略持续重新收敛。
3737

3838
!!! note "接触求解器随机化"
39-
Genesis 把 geom 求解器参数(`sol_params`)按全局而非逐环境存储,因此逐环境的接触柔顺度随机化——以及 MuJoCo 专属的 geom 尺寸/惯量随机化——在 Genesis 没有逐环境对应,故略去。况且迁移差距并不在这些参数上(见下文)。
39+
Genesis 把 geom 求解器参数(`sol_params`)按全局而非逐环境存储,因此逐环境的接触柔顺度随机化——以及 MuJoCo 专属的 geom 尺寸/惯量随机化——在 Genesis 没有逐环境对应,故略去。
4040

4141
## 收敛情况
4242

@@ -53,9 +53,6 @@ genelab play Genelab-Reorient-Wuji-Hand-v0 --checkpoint logs/rsl_rl/wuji_reorie
5353

5454
在 mjlab 环境中跑 100 次试验 × 3 个随机种子(0.2 阈值):**成功率 ≈ 0.65**(最佳 checkpoint ≈ 0.67)、**掉落率 ≈ 0**——抓握完全迁移,剩下的是没能在试验窗口内**保持**住目标。迁移率**对训练非单调**、在训练中段见顶(约 iter 3500–3800),所以迁移最优的 checkpoint 不一定是最后一个。`play_mjlab` 用同一套桥接驱动 mjlab 的原生 viewer(完整场景 + 目标可视化)以供观察。两者都在 wuji-mjlab 环境中运行,并把 GeneLab 挂到 `PYTHONPATH`。
5555

56-
!!! note "为什么随机化很关键"
57-
不带上述鲁棒性随机化训练出的策略,在 mjlab 下能握住 cube 却几乎无法重定向(成功率 ≈ 0):再抓握步态过拟合到了 Genesis 精确的逐步接触响应。扫摩擦、质量、时间步、作动器增益和接触求解器都改变不了这一点,而把 Genesis 内取胜的手指目标序列回放到 mjlab 里确实能让 cube 转动——所以差距是闭环反馈的脆弱性,正是动作/观测噪声与角速度 cube 扰动所针对的。
58-
5956
## 另见
6057

6158
- [舞肌手](wuji-hand.md)

0 commit comments

Comments
 (0)