Isaac Sim Robot Navigation — Runtime
Runtime navigation specialization. Driving a robot through a USD scene live, in your own Isaac Sim script.
Read These Skills First
- navigation-primitives — occupancy maps, A* planning, differential/holonomic kinematics, robot footprints (Spot Z=0.69, etc.), look-at chase camera math, common gotchas. This skill assumes you know that substrate.
- isaac-sim-rendering — RT2, persistent session, ACES, frame validation
- isaac-sim-troubleshooting — Kit 110 hang/freeze reference
When To Use This Skill (vs siblings)
| Goal |
Use |
| Drive a robot through a scene in real time, see it move |
this skill |
| Record trajectories then re-render with sensors for SDG |
mobility-gen |
| Publish/subscribe Nav2 topics to ROS 2 |
isaac-sim-ros2-bridge |
Runtime APIs
| Capability |
API |
| RL policy execution |
isaacsim.robot.policy.examples.controllers.PolicyController |
| Robot articulation |
isaacsim.core.experimental.prims.Articulation |
| Physics lifecycle |
isaacsim.core.simulation_manager.SimulationManager |
For shared primitives (omap, A*, kinematics, look-at), see navigation-primitives.
Physics Simulation on Kit 110 (CRITICAL)
Timeline MUST be playing for Physics simulation
import omni.timeline
timeline = omni.timeline.get_timeline_interface()
timeline.play() # WITHOUT THIS, PHYSICS NEVER STEPS
Strip non-robot physics from heavy stages
On 33K+ prim stages with multiple physic bodies, simulation hangs. Strip ALL physics from non-robot prims:
from pxr import Usd, UsdPhysics
for p in Usd.PrimRange(stage.GetPseudoRoot()):
if str(p.GetPath()).startswith("/World/Robot"):
continue
if p.HasAPI(UsdPhysics.RigidBodyAPI):
p.RemoveAPI(UsdPhysics.RigidBodyAPI)
if p.HasAPI(UsdPhysics.CollisionAPI):
p.RemoveAPI(UsdPhysics.CollisionAPI)
Kit 110 Exec Model (CRITICAL — 2026-03-15)
Camera Chase Cam
The look-at math and standard camera offsets (chase/overhead/POV) live in navigation-primitives. Runtime considerations on top of that:
- Camera collision avoidance (TODO): chase camera clips into rack geometry when robot enters narrow aisles. Need raycast from chase eye → robot; if occluded, raise camera or shift laterally. Not yet implemented.
Failure Modes & Recovery
FAILURE: VkResult: ERROR_OUT_OF_DEVICE_MEMORY during navigation render
- SYMPTOMS: Vulkan crash partway through capture loop on heavy stage
- CAUSE: Approach B (baked timeSamples) + RT2 + 50K+ prims
- FIX: Switch to approach C (per-frame transform)
FAILURE: Robot floats above ground or falls through floor
- CAUSE: Wrong Z offset
- FIX: See
navigation-primitives Robot Footprint table
FAILURE: Physics never steps after kill+relaunch
- CAUSE: Kill+relaunch bug, dirty GPU state
- FIX: Wait 30+ seconds, verify zero Kit processes, or reboot
FAILURE: A* path looks fine on omap but robot clips a rack at render
- CAUSE: Skipped step 5/6 of the validation pipeline (see
navigation-primitives)
- FIX: Always validate every smoothed point is in navigable space
Integration Points
- RECEIVES from:
navigation-primitives — omap, A*, kinematics, robot specs, camera math
- RECEIVES from:
occupancy-map — map.yaml or runtime grid
- RECEIVES from:
urdf-mjcf-to-usd-conversion — robot USD
- PRODUCES for:
isaac-sim-rendering — animated scene ready for RT2 capture and frame sequences of nav runs
1---2name: isaac-sim-robot-navigation3description: Runtime robot navigation in NVIDIA Isaac Sim — driving a robot through a scene live in a custom script. Covers RL policy loading (PolicyController), trajectory following, physics-vs-baked-vs-per-frame approaches for heavy stages, GPU OOM avoidance on 98K-prim scenes, Kit 110-specific timeline/physics gotchas, and standard Spot route catalog. For occupancy maps, A*, kinematics, and camera math, see `navigation-primitives`. For sensor-recording SDG, see `mobility-gen`. Use when navigating a robot live in your own Isaac Sim script, choosing between physics simulation and pre-baked transforms for heavy stages, debugging GPU OOM on large scenes, or troubleshooting Kit 110 physics hangs after kill+relaunch. Triggers on: PolicyController, RL policy load, trajectory follow, baked vs physics, per-frame transform, GPU OOM navigation, Kit 110 timeline.play, robot navigation runtime.4---56# Isaac Sim Robot Navigation — Runtime78Runtime navigation specialization. Driving a robot through a USD scene live, in your own Isaac Sim script.910## Read These Skills First1112- **navigation-primitives** — occupancy maps, A* planning, differential/holonomic kinematics, robot footprints (Spot Z=0.69, etc.), look-at chase camera math, common gotchas. This skill *assumes* you know that substrate.13- **isaac-sim-rendering** — RT2, persistent session, ACES, frame validation14- **isaac-sim-troubleshooting** — Kit 110 hang/freeze reference1516## When To Use This Skill (vs siblings)1718| Goal | Use |19|---|---|20| Drive a robot through a scene in real time, see it move | **this skill** |21| Record trajectories then re-render with sensors for SDG | `mobility-gen` |22| Publish/subscribe Nav2 topics to ROS 2 | `isaac-sim-ros2-bridge` |2324## Runtime APIs2526| Capability | API |27|---|---|28| RL policy execution | `isaacsim.robot.policy.examples.controllers.PolicyController` |29| Robot articulation | `isaacsim.core.experimental.prims.Articulation` |30| Physics lifecycle | `isaacsim.core.simulation_manager.SimulationManager` |3132For shared primitives (omap, A*, kinematics, look-at), see `navigation-primitives`.3334## Physics Simulation on Kit 110 (CRITICAL)3536### Timeline MUST be playing for Physics simulation37```python38import omni.timeline39timeline = omni.timeline.get_timeline_interface()40timeline.play() # WITHOUT THIS, PHYSICS NEVER STEPS41```4243### Strip non-robot physics from heavy stages44On 33K+ prim stages with multiple physic bodies, simulation hangs. Strip ALL physics from non-robot prims:4546```python47from pxr import Usd, UsdPhysics4849for p in Usd.PrimRange(stage.GetPseudoRoot()):50 if str(p.GetPath()).startswith("/World/Robot"):51 continue52 if p.HasAPI(UsdPhysics.RigidBodyAPI):53 p.RemoveAPI(UsdPhysics.RigidBodyAPI)54 if p.HasAPI(UsdPhysics.CollisionAPI):55 p.RemoveAPI(UsdPhysics.CollisionAPI)56```57## Kit 110 Exec Model (CRITICAL — 2026-03-15)5859- **Synchronous code executes immediately** in `--exec` scripts. No async needed for scene setup.60- **`asyncio.ensure_future()` needs explicit event loop subscription**:61 ```python62 omni.kit.app.get_app().get_update_event_stream().create_subscription_to_pop(lambda e: None)63 asyncio.ensure_future(main())64 ```65- **`capture_viewport_to_file()` returns `MultiAOVFileCapture`** — use `.wait_for_result(completion_frames=8)`, NOT `.wait()`.66- Pattern: sync scene build → async render scheduling → event loop keeps it alive67- Scene load + 100 asset placement + 3-camera render in ~40s total6869## Camera Chase Cam7071The look-at math and standard camera offsets (chase/overhead/POV) live in `navigation-primitives`. Runtime considerations on top of that:7273- **Camera collision avoidance** (TODO): chase camera clips into rack geometry when robot enters narrow aisles. Need raycast from chase eye → robot; if occluded, raise camera or shift laterally. Not yet implemented.7475## Failure Modes & Recovery7677**FAILURE:** `VkResult: ERROR_OUT_OF_DEVICE_MEMORY` during navigation render78- SYMPTOMS: Vulkan crash partway through capture loop on heavy stage79- CAUSE: Approach B (baked timeSamples) + RT2 + 50K+ prims80- FIX: Switch to approach C (per-frame transform)8182**FAILURE:** Robot floats above ground or falls through floor83- CAUSE: Wrong Z offset84- FIX: See `navigation-primitives` Robot Footprint table8586**FAILURE:** Physics never steps after kill+relaunch87- CAUSE: Kill+relaunch bug, dirty GPU state88- FIX: Wait 30+ seconds, verify zero Kit processes, or reboot8990**FAILURE:** A* path looks fine on omap but robot clips a rack at render91- CAUSE: Skipped step 5/6 of the validation pipeline (see `navigation-primitives`)92- FIX: Always validate every smoothed point is in navigable space93949596## Integration Points9798- **RECEIVES from:** `navigation-primitives` — omap, A*, kinematics, robot specs, camera math99- **RECEIVES from:** `occupancy-map` — `map.yaml` or runtime grid100- **RECEIVES from:** `urdf-mjcf-to-usd-conversion` — robot USD101- **PRODUCES for:** `isaac-sim-rendering` — animated scene ready for RT2 capture and frame sequences of nav runs