Autonomous quadruped locomotion through a multi-obstacle course, powered by reinforcement learning policy inference on NVIDIA's next-gen edge hardware.
Deploy Boston Dynamics' Spot robot in a simulated environment with 5 colored obstacles arranged across a 12-meter grid. The robot must autonomously walk through the course using an RL-trained locomotion policy, while 3 cameras capture every step.
Getting Spot to walk on DGX Spark wasn't straightforward. Here's what we discovered along the way.
PyTorch printed a warning about CUDA 12.1 on the GB10 GPU not being officially supported. Initial investigation treated this as a blocker. Turns out the warning is benign — PyTorch tensor operations and JIT policy inference work correctly on GB10 despite the message.
GPU-accelerated PhysX is not yet available for the Blackwell aarch64 platform. The workaround: fall back to CPU PhysX, which provides identical simulation fidelity at adequate performance for single-robot scenarios.
The RL policy was trained at 500 Hz in Isaac Lab, but the simulation was configured at 200 Hz. This mismatch caused the robot to exhibit unstable gait and eventually fall. The policy expects a specific relationship between observation frequency and action timing.
Setting the physics timestep to match the official Isaac Lab training configuration (500 Hz with decimation) resolved all gait instabilities. Spot walks smoothly, maintains balance, and successfully navigates through all obstacles in the course.
10 selected frames from 3 camera angles across the full course traversal. Click any image to view full size.
Step 20 — Spot faces the obstacle field. Colorful blocks mark the challenge ahead.
Step 60 — Side profile shows Spot's gait in motion, legs mid-stride.
Step 80 — Camera follows from behind as Spot advances toward the first waypoint.
Step 100 — Overhead view reveals the full obstacle arrangement and Spot's path.
Step 140 — Spot weaves between green, blue, and purple obstacles.
Step 160 — Lateral camera captures the robot's balanced locomotion mid-course.
Step 200 — Spot approaches the later waypoints with consistent stride.
Step 220 — Top-down view shows significant progress through the course.
Step 260 — Spot approaches the end of the obstacle course with strong momentum.
Step 280 — Final side view as Spot nears the last waypoint. Mission accomplished.
Top-down trajectory plot showing Spot's actual path through the obstacle course.
5 colored obstacles placed across a 12m grid. Spot navigates through waypoints using proportional heading control.
The complete technical stack powering Spot's autonomous navigation.
SpotFlatTerrainPolicy — 12-DOF articulation, 48-dim observation vector
(base velocity, angular velocity, gravity projection, commands, joint errors, joint velocities,
previous actions). TorchScript JIT inference.
PhysX CPU at 200 Hz. Matches Isaac Lab training config with proper decimation.
POST_PHYSICS_STEP callback drives the policy loop. Position control with action scale 0.2.
Proportional heading controller with 5 waypoints. Velocity commands:
[v_x, v_y, w_z]. 2 m/s forward max, 2 rad/s turn rate, 0.8m waypoint threshold.
NVIDIA DGX Spark — GB10 (Blackwell), aarch64, 120 GB RAM. Isaac Sim 6.0.0 (Kit 109.0.2), Python 3.12, headless Vulkan rendering.
Omniverse Replicator async annotator pipeline. 3 cameras (tracking, side, overview), 1920x1080 RTX path-traced frames. 15 timesteps × 3 angles = 45 screenshots.
45 PNG screenshots, trajectory plot (matplotlib), position CSV log. 300 simulation steps with captures every 20 steps from step 20 to 280.