HARP, Stanford Student Robotics
Predictive crowd navigation for a humanoid robot
HARP, the Humanoid Athletic Robotics Project at Stanford Student Robotics, is building a Unitree G1 humanoid that can work in human spaces, walking naturally, getting around obstacles, finding people, and approaching them. Every command reaches the motors through HARP's safety harness and runs in MuJoCo first; walking comes from NVIDIA's GR00T locomotion policy.
My part. I lead navigation for the Human Perception & Social Interaction Team. My current work is a predictive avoidance layer between the route planner and the walking policy. It turns raw LiDAR into tracked, forecast obstacles, then uses a nonlinear model predictive controller (NMPC) to choose the G1's body-frame velocity request five times a second. Before this I built the team's waypoint routes, manual takeover, odometry route recorder, and speed and turn ramping.
- Claim
- A sampled-and-refined NMPC can steer a walking G1 through moving, non-yielding pedestrians without contact, using only its own LiDAR tracks and never simulator ground truth.
- Result
- 7 of 7 native G1 crowd trials with zero contacts across adversarial and mixed crowds, static pillars, and 1.5× pedestrian flow, up from 2 of 5 before the least-intrusion fallback. 115 local tests pass.
Limit Simulation with synthetic crowds only; the Foxy, Nav2, and HIM integration and real hardware are not yet validated. In the newer building world, mixed crowds reach the goal on some seeds, and adversarial crowds still cause contacts.
- Control rate
- 5 Hz, 0.15 s planning deadline
- Horizon
- 4 s, three velocity blocks
- Control
- Body-frame forward, lateral, and yaw rate
- Solver
- Sampled candidates refined by SLSQP
- Forecast
- Constant velocity, bounded uncertainty
- Robot
- Unitree G1, 29 DoF, GR00T walker
How the controller decides
-
Perceive
Motion-compensated LiDAR, floor and self filtering, voxel clusters
stamped TF
-
Track
Joint Hungarian assignment, merged-return splitting, occlusion memory
2.5 s coasting
-
Forecast
Constant-velocity motion with bounded uncertainty; no assumed cooperation
4 s horizon
-
Optimize
Three velocity blocks, nonlinear rollout with delay and gains, sampled then SLSQP-refined
NMPC
-
Certify
Swept-disc checks with a braking tail; least-intrusion fallback when nothing is clear
hard body margin
-
Command
First request only, then replan; zero on stale input or a missed deadline
5 Hz, 0.15 s
Scrub the recorded run
- Time
- 22.6 s of 66.4 s
- Planner
- Evade: passing on a new heading
- Distance to goal
- 6.13 m
- Follow: route request already clear 7×
- Evade: passing on a new heading 24×
- Yield: slowing near the route 13×
- Blocked: no certifiably clear motion 6×
Outcome: goal reached, 0 contacts, 64.7 s, 0.18 m from the goal, longest standstill 2.05 s.
The same recorded run as the video, seen from above. Lines show where each pedestrian walked; the robot's path is colored by what the planner was doing. Counts are mode changes over the run. Data: native G1 trial, building world, mixed crowd, seed 3.