Skip to content

release: consolidate SuperDex integration and bump UniLab - #1545

Merged
TATP-233 merged 30 commits into
mainfrom
release/superdex-1.1.1
Sep 9, 2026
Merged

release: consolidate SuperDex integration and bump UniLab#1545
TATP-233 merged 30 commits into
mainfrom
release/superdex-1.1.1

Conversation

@TATP-233

@TATP-233 TATP-233 commented Sep 9, 2026

Copy link
Copy Markdown
Collaborator

Motivation

Consolidates the SuperDex integration (supersedes #1542, #1544) into one release PR. Since the last update, three things landed on top:

  1. SuperDex runtime now comes from PyPI (superdex-physics-uni / superdex-robotics-uni wheels, cp312 + cp313) instead of a local source build — unisim main switched its optional dependency.
  2. unisim gained a SuperDex serial execution mode (bug(superdex): SceneBatchExecutor violates DebugDraw scene-thread affinity unilabsim/unisim#55) so the native SuperDex viewer/debugger can attach to a single scene; UniLab wires it through EnvCfg.superdex_execution_mode.
  3. Interactive eval (training.play_render_mode=interactive) now uses the native SuperDex viewer for the superdex backend, automatically forcing serial execution and a single env (training.play_env_num=1), matching the existing per-backend interactive precedents (isaacsim/mujoco).

What changed (this branch vs main, latest commits)

Commit Change
7eb9e338 Tune Go2 superdex training profile (velocity-tracking reward balance)
d350ecb2 EnvCfg.superdex_execution_mode (batch default, serial opt-in); only forwarded to unisim when non-default so older pinned unisim keeps working
225cde5b Interactive eval for superdex: inject serial mode + play_env_num=1; CLI gate wording updated to Python 3.12/3.13; docs (en/zh_CN)

Required companion changes (already on unisim main, no version bump):

unisim commit Change
11bc685 Depend on superdex-physics-uni / superdex-robotics-uni wheels; fix ±inf force-range MJCF export
328ac9f execution_mode="batch"/"serial"; serial runs scenes on the env thread; batch refuses to run while the native debug server has a connection
d9a03dc Native interactive playback via superdex.physics.viewer.Viewer (Polyscope), fail-closed unless serial + num_envs == 1

Validation

  • make check green on both repos (unisim: 252 passed; UniLab: ruff/mypy/pytest clean for the touched suites — test_cli.py, test_training_helpers.py superdex cases, test_superdex_backend_options.py).
  • End-to-end on a real Go2 superdex PPO checkpoint (logs/rsl_rl_ppo/Go2JoystickFlat/2026-09-09_15-39-02_superdex): composed play_only + play_render_mode=interactive + play_env_num=1 config, asserted the owner injects serial, ran play_rsl_rl through checkpoint load, policy rollout, native viewer startup ("Starting interactive visualization..."), and clean return.
  • Pixel-level check: native viewer rendered the actual UniLab Go2 scene (640x480 RGBA, non-trivial pixel variance, robot visible on the floor) while stepping the env in serial mode.

Known limitations (pre-existing, not introduced here)

  • UniLab main's run_playback still passes extra_data_getter; unisim renamed it debug_overlay_getter in feat: adapt TD3 fixes from dev/go2joystickflatterrain-td3 #53. The eval play path needs that drift resolved (or this branch rebased onto a unisim-consuming main) before the stock eval CLI works end-to-end. UniLab uv.lock still pins an older unisim rev.
  • Windowed (non-offscreen) viewer crashes in upstream Polyscope navigation-gizmo setup on headless X11; offscreen mode is unaffected. Process exit may core-dump in Polyscope/mochi atexit teardown — after all work completes.
  • The pre-existing test_on_frame_paints_video_frames failure rides in from upstream main.

@TATP-233

TATP-233 commented Sep 9, 2026

Copy link
Copy Markdown
Collaborator Author

Consolidates the two overlapping SuperDex PRs #1542 and #1544. Dependency metadata now targets unisim-core>=1.1.5 and unilab-rl==1.1.2; lock regeneration must occur after those releases are published.

Scale the superdex owner to a real training recipe (1024 envs, 400
iterations), pin the twist command to a fixed 0.5 m/s forward target,
and rebalance tracking/action-rate weights for SuperDex contact
physics.
Wire env.superdex_execution_mode ('batch' default, 'serial' for native
SuperDex debugger sessions) from EnvCfg through env_backend_kwargs into
unisim's create_backend. The default stays absent from the adapter kwargs
so unisim-core releases that predate the option keep working; 'serial'
requires the adapter side of unilabsim/unisim#55.

Also drop the stale '1 stays serial' note on superdex_num_workers: a
single executor worker is still batched execution, not the serial mode.
…ingle-env execution

eval --sim superdex --render-mode interactive stays on the train-script
play path but renders through the native Polyscope viewer, which shares
the scene's thread with stepping. The owner layer injects
superdex_execution_mode=serial for interactive play (mirroring the
isaacsim render-intent precedent), and the CLI forces
training.play_env_num=1 unless the user set it explicitly, matching the
unisim side that fails closed for batch mode or multi-env interactive
playback (unilabsim/unisim#55).
# Conflicts:
#	docs/sphinx/source/zh_CN/5-reference/5-support_matrix.md
#	pyproject.toml
#	tests/tasks/test_migration_matrix.py
# Conflicts:
#	docs/sphinx/source/adr/ADR-0000-index.md
#	docs/sphinx/source/adr/README.md
@TATP-233
TATP-233 merged commit 6135579 into main Sep 9, 2026
8 checks passed
@TATP-233
TATP-233 deleted the release/superdex-1.1.1 branch September 9, 2026 17:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant