Running in IsaacSim¶
NVIDIA IsaacSim 5.1 is an alternative simulation backend to Gazebo and MuJoCo, adding high-fidelity rendering and GPU-accelerated PhysX dynamics. The controller and planning stacks run unmodified — the bridge just exchanges the same ROS 2 messages over DDS.
Beta integration
The IsaacSim backend is still in beta. It currently supports the Spirit 40 and Go2 only, contact reporting is a heuristic, and PhysX gains may need scaling (--tau-scale). Expect rough edges and frequent changes. For production runs use Gazebo or MuJoCo. Full status, known limitations, and roadmap live in quad_simulator/isaac_plugins/README.md.
Requirements¶
IsaacSim is not part of the Quad-SDK Docker images — it needs a separate install.
- IsaacSim 5.1 + IsaacLab in a conda environment named
isaaclab(Python 3.11). Follow the official IsaacLab installation guide . - ROS 2 Jazzy (system Python 3.12) — the rest of the Quad-SDK stack, as usual.
- Ubuntu 24.04, an NVIDIA GPU with current drivers.
Two Python runtimes, on purpose
The bridge runs inside Isaac's conda env (Python 3.11) while the controller/planner run on system ROS 2 Jazzy (Python 3.12). They talk over DDS. Do not source /opt/ros/jazzy/setup.bash in the same shell as the bridge — it auto-discovers Isaac's bundled rclpy and DDS libs.
Build¶
The package itself only installs Python scripts:
Running¶
Three terminals. --terrain and --robot must match between the bridge (terminal 1) and the bringup (terminal 2).
Conda isaaclab env (Python 3.11) — no ROS 2 sourced here:
System ROS 2 Jazzy (Python 3.12) — terrain heightmap + robot_state_publisher + robot_driver + RViz:
Global + local planner + body force estimator:
Supported robots and terrains¶
- Robots —
spiritandgo2(the entries in the bridgeROBOT_REGISTRY). - Terrains — any name with a matching mesh under
gazebo_scripts/models/<name>/meshes/<name>.{stl,ply}, e.g.flat,step_20cm,gap_40cm,rough_25cm. With--terrainunset, a flatGridMapfallback is published.
Useful bridge flags¶
| Flag | Effect |
|---|---|
--cinematic |
Follow camera + three-point lighting |
--scene underbrush |
Four-cord vine entanglement scenario |
--physx-gpu |
GPU dynamics (off by default) |
--tau-scale 0.5 |
Halve applied torques — helps when gains are tuned for hardware over-drive in PhysX |
Full list: run_isaac_bridge.sh --help.
Known limitations (beta)¶
- Go2 torque saturation — hardware-tuned gains (
kp=60) over-drive on PhysX. Workaround:--tau-scale 0.5, or temporarily lowerstance_kp/swing_kpinquad_utils/config/go2.yamlto ~30 for sim-only runs. - Contact reporting — a
foot_z < 0.04heuristic, not real per-toe GRFs. - Auto-record (
--record) no-ops on Isaac 5.1's capture API; use OBS or the Isaac GUI's Movie Capture.
See the package README for the full physics deep-dive (Gazebo ODE vs. Isaac PhysX) and roadmap.
Next steps¶
- Simulator support matrix — which robot runs in which backend
- First Simulation Run — the Gazebo/MuJoCo walkthrough