Files
5shekel 327cf9d902 chore(isaac): simplify playback branch selection
Remove experimental per-side branch toggles and continuity state from the urdf-loader playback solver. Keep a single lower-branch rule for all chains and update docs to reflect the stable ground-facing behavior.
2026-02-21 11:24:25 +02:00
..

Isaac Model

Converted from sim/mujoco/model/walker.xml.

Current Status

  • URDF conversion pipeline is in place and regenerates sim/isaac/model/walker.urdf from MuJoCo XML.
  • Standalone browser demo runs via uv run python -m http.server 8000 and loads in urdf-loader.
  • Cranks rotate continuously through full 360+ cycles in playback.
  • Leg/tendon linkage is kinematically solved in playback and stays ground-facing on both near and far sides.
  • Anchor diagnostics are enabled in demo: cyan line segments + console distance logs.

Generate URDF (Option A)

python sim/isaac/mjcf_to_urdf_option_a.py \
  --input sim/mujoco/model/walker.xml \
  --output sim/isaac/model/walker.urdf

Output

  • URDF: sim/isaac/model/walker.urdf
  • Converter: sim/isaac/mjcf_to_urdf_option_a.py

Constraint Notes

  • URDF is a tree format and cannot represent MuJoCo equality/connect closed-loop constraints as true physical constraints.
  • urdf-loaders supports standard URDF features (including mimic joints), but mimic is kinematic coupling and does not create a physics loop constraint.
  • The generated URDF does not include mimic tags; linkage coupling is handled in demo playback code.
  • The generated URDF also adds small magenta marker spheres at each dropped MuJoCo equality/connect anchor so pivot locations are visible in URDF viewers.
  • For Isaac Sim fidelity, keep the URDF tree and add constraints after import (USD/PhysX joints or an Isaac-side constraints config).

Validation

  • XML syntax check:
python -c "import xml.etree.ElementTree as ET; ET.parse('sim/isaac/model/walker.urdf'); print('ok')"

urdf-loaders Playback

  • A browser playback helper is provided at sim/isaac/urdf_loaders_play.js.
  • Playback sets joint ignoreLimits=true so crank joints can rotate continuously through 360+ degrees.
  • In playback, tendon joints are solved from crank + leg kinematics each frame (approximate closure for cleaner visualization).
  • After loading the model in a urdf-loader app and getting a robot instance:
import { playWalker } from './sim/isaac/urdf_loaders_play.js';
const stop = playWalker(robot);
  • Call stop() to halt animation.

Standalone Demo (uv)

  • Files:
    • sim/isaac/demo/index.html
    • sim/isaac/demo/main.js
  • Dependencies are loaded from CDN in the browser (three and urdf-loader).
  • The demo draws cyan debug line segments between each paired equality-anchor marker and logs pair distances in the browser console every 0.25s.
  • The demo overlays near-side part labels for quick inspection: CF, CG, AD, BE.
  • Run a local server from repo root:
uv run python -m http.server 8000

Next

  • Add an Isaac constraints companion file to recreate the four MuJoCo loop closures after URDF import.