Full autonomous racing stack for F1Tenth, a 1/10-scale race car on a Jetson Orin with 2D LiDAR. Time-trial and head-to-head racing at Penn, on a 4-person team in ROS 2 Humble (C++ and Python).
I owned hardware bring-up, real-car control and speed tuning, iterative raceline refinement, and race-day operations. I also built an AI-assisted raceline optimization workflow that cut per-iteration tuning time significantly, the kind of dev-loop hack that wins lap times.
- Follow-the-Gap reactive baseline for unknown tracks
- Pure pursuit tracking on optimized racelines
- RRT* for obstacle-aware planning and multi-line overtaking
- MPPI integration for aggressive high-speed control
- Sim-to-real transfer and localization against pre-mapped tracks
MPPI
Model-Predictive Path Integral control for aggressive corner exits, where pure pursuit alone leaves time on the table.
RRT* and overtaking
RRT* generates obstacle-aware racelines on the fly so the car can commit to a passing line when it spots a slower opponent.
RRT* in simulation with static obstacles
RRT* overtaking a dynamic obstacle
Pure pursuit
Pure pursuit on optimized racelines is the baseline production controller. The overlay below shows the planned line vs the car's actual track.


Real car running pure pursuit
Real car running pure pursuit, second pass
Follow the gap
Reactive baseline for unmapped tracks: scan for the largest gap and steer through it. Cheap, robust, surprisingly fast.
Obstacle map from a follow-the-gap run
Real car after iterative tuning
