|
3 | 3 | SO(3) in-hand cube reorientation for the WUJI Hand: a fixed-base, palm-up dexterous hand |
4 | 4 | must rotate a free cube to a stream of random orientation goals (expressed in the wrist |
5 | 5 | "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). |
7 | 9 |
|
8 | 10 | ## Task |
9 | 11 |
|
@@ -46,21 +48,20 @@ genelab play Genelab-Reorient-Wuji-Hand-v0 --checkpoint logs/rsl_rl/wuji_reorie |
46 | 48 |
|
47 | 49 | ## Domain randomization |
48 | 50 |
|
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: |
52 | 53 |
|
53 | 54 | - 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; |
55 | 56 | - 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. |
58 | 60 |
|
59 | 61 | !!! note "Contact-solver randomization" |
60 | 62 | Genesis stores geom solver parameters (`sol_params`) globally rather than per-env, so |
61 | 63 | 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. |
64 | 65 |
|
65 | 66 | ## Convergence |
66 | 67 |
|
@@ -94,14 +95,6 @@ one. `play_mjlab` drives the same bridge through mjlab's native viewer (full sce |
94 | 95 | visualization) for inspection. Both run inside the wuji-mjlab environment with GeneLab on |
95 | 96 | `PYTHONPATH`. |
96 | 97 |
|
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 | | - |
105 | 98 | ## See also |
106 | 99 |
|
107 | 100 | - [Wuji Hand](wuji-hand.md) |
|
0 commit comments