Skip to content

feat: expose Genesis rigid-solver options on SimulationCfg (M3.7) - #127

Merged
KraHsu merged 1 commit into
devfrom
feat/m3-7-simulationcfg
May 22, 2026
Merged

KraHsu merged 1 commit into
devfrom
feat/m3-7-simulationcfg

Conversation

@KraHsu

@KraHsu KraHsu commented May 22, 2026

Copy link
Copy Markdown
Owner

What

ROADMAP M3.7 — eight optional SimulationCfg fields exposing Genesis
RigidOptions:

SimulationCfg field → RigidOptions category
enable_self_collision enable_self_collision contact
enable_joint_limit enable_joint_limit contact
max_collision_pairs max_collision_pairs contact
solver_iterations iterations solver
ls_iterations ls_iterations solver
solver_tolerance tolerance solver
integrator integrator (string → gs.integrator.<name>) solver
constraint_timeconst constraint_timeconst constraint stiffness/damping

Design

  • All fields default None ("use the Genesis default"). SimulationCfg.rigid_options_kwargs()
    maps the set fields to RigidOptions parameter names; InteractiveScene passes
    rigid_options to gs.Scene only when ≥1 is set → an untouched config leaves the
    gs.Scene call byte-for-byte unchanged (zero regression).
  • integrator stays a string in the cfg; the scene resolves it to gs.integrator.<name>
    (raises a clear error on an unknown name), keeping configs Genesis-free (invariant ci/per job cache suffix and pages enablement #5,
    verified by the optional-dep boundary test).
  • CCD is not exposed — verified the installed Genesis RigidOptions has no
    continuous-collision-detection knob (only use_gjk_collision, a different concern).

Tests

tests/test_configs.py +3 — empty-by-default, full mapping to Genesis names
(solver_iterations→iterations, solver_tolerance→tolerance), and None-skip-but-keep-False.
The mapping is unit-tested without a Genesis runtime; the scene wiring is covered by the
existing genesis_runtime-gated scene tests.

Gates

  • ruff ✓ · ruff format ✓ · pyright 0/0/0 · lint-imports 6 kept / 0 broken
  • optional-dep boundary green (configs torch/genesis-free) · full suite 439 passed (+3)

🤖 Generated with Claude Code

Adds eight optional SimulationCfg fields mapping to gs.options.RigidOptions:
- contact: enable_self_collision, enable_joint_limit, max_collision_pairs
- solver: solver_iterations (→iterations), ls_iterations, solver_tolerance
  (→tolerance), integrator
- constraint stiffness/damping: constraint_timeconst

All default None ("use Genesis default"). SimulationCfg.rigid_options_kwargs()
maps the set fields to RigidOptions parameter names (genesis-free — keeps
configs.py free of the gs import per invariant #5; integrator stays a string).
InteractiveScene resolves the integrator string → gs.integrator.<name> and passes
rigid_options to gs.Scene ONLY when at least one field is set — so an untouched
config keeps the historic gs.Scene call byte-for-byte (zero regression).

CCD is not exposed (Genesis RigidOptions has no continuous-collision-detection
knob; verified against the installed genesis options surface).

Tests: tests/test_configs.py +3 (empty-by-default, full mapping to Genesis names,
None-skip-but-keep-False). The mapping is unit-tested without a Genesis runtime;
the scene wiring is exercised by the existing genesis_runtime-gated scene tests.

Gates: ruff ✓, ruff format ✓, pyright 0/0/0, lint-imports 6 kept / 0 broken,
optional-dep boundary still green (configs torch/genesis-free), full suite 439 passed (+3).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@KraHsu
KraHsu merged commit 60fadf0 into dev May 22, 2026
3 checks passed
@KraHsu
KraHsu deleted the feat/m3-7-simulationcfg branch May 22, 2026 15:44
KraHsu added a commit that referenced this pull request Jun 5, 2026
feat: expose Genesis rigid-solver options on SimulationCfg (M3.7)
KraHsu added a commit that referenced this pull request Jun 5, 2026
- §4 M3 table: M3.5 (ForceTorqueSensor, #126) and M3.7 (SimulationCfg rigid
  options, #127) → ✅; status line → "in progress" with the M3.1 asset-hosting
  blocker noted.
- §2 snapshot: added the ForceTorque sensor + sim rigid-options to 已具备; trimmed
  the M3 gaps (F/T done, SimulationCfg done; remaining = M3.1/2/3/4/6/8).

CLAUDE.md product-status note updated to "M3 in progress (M3.5/M3.7 ✅)"
(gitignored — no diff). Docs-only.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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