2nd Place · 28th Roboracer Autonomous Racing Competition, IEEE IV 2026 · Detroit, MI

Autonomous Racing Stack — F1TENTH

The team's racing stack for head-to-head 1/10-scale racing — a Frenet-frame nonlinear MPC solved on-vehicle by acados SQP-RTI, on particle-filter localization fused with an EKF. Second place at the 28th Roboracer competition.

Autonomous Racing Stack — F1TENTH

Period

Jan – May 2026

Stack

ROS 2 · acados · NMPC · Jetson · Particle Filter · C++

Highlights

  • 012nd place at the 28th Roboracer Autonomous Racing Competition, IEEE Intelligent Vehicles Symposium 2026, Detroit — 22–25 June 2026
  • 02Frenet-frame nonlinear MPC over (s, e_y, e_psi, v, delta) with steering-rate and acceleration inputs
  • 03Solved on-vehicle by acados SQP-RTI (HPIPM, partial condensing) on a Jetson Orin Nano
  • 04LiDAR particle-filter localization fused with an EKF over VESC odometry and IMU
  • 05Speed profile from friction-circle and steering-rate limits; identified delta_max and mu from measured turning radius and skid onset, correcting a 4x steering-limit error that made the car run wide
  • 06Per-sector weight scheduling for corners tighter than the car's minimum turning radius
  • 07Decoupled overtake planner folded into the MPC as a soft e_y bias with windowed Frenet obstacle projection

Modules & Architecture

Module 1: Automatic Emergency Braking (AEB)▼

Time-to-collision safety layer computing instantaneous TTC from LiDAR range rates and cutting drive commands before contact.

Module 2: Reactive Wall Following▼

PID wall-follower using a two-beam range geometry to estimate lateral offset and heading error.

Module 3: Reactive Gap Follow▼

Follow-the-gap navigation with a safety bubble around the closest obstacle, running as the high-frequency recovery fallback when higher layers have no valid plan.

Module 4: SLAM & Pure Pursuit▼

Real-time 2D SLAM and map generation paired with a geometric Pure Pursuit tracker with adaptive lookahead for path-following along a predefined raceline.

Module 5: Rapidly-Exploring Random Trees (RRT)▼

Sampling-based local motion planner computing collision-free trajectories through dense obstacle fields on the occupancy grid.

Module 6: Vision-Based Object Detection▼

Perception pipeline performing real-time object classification and image-to-ground coordinate projection for spatial awareness of other vehicles.

Module 7: Sensor bring-up and EKF localization▼

Hardware bring-up of the LiDAR, VESC odometry and IMU, and the EKF that fuses them into the pose estimate the MPC plans against. The particle filter it runs alongside is the course-provided MCL package rather than my own.

Module 8: Model Predictive Control (course lab)▼

The convex-optimization MPC lab that the competition controller grew out of — a linearized kinematic model tracking a reference over a receding horizon.

Final Stack: Frenet-Frame Nonlinear MPC▼

Nonlinear MPC over (s, e_y, e_psi, v, delta) with steering-rate/acceleration inputs, solved by acados SQP-RTI (HPIPM, partial condensing) on a Jetson Orin Nano. Friction-circle speed profiling, per-sector weight scheduling, and a decoupled overtake planner folded in as a soft lateral bias.

Demo video

Frenet MPC running on the car

Frenet MPC — a second run

MPC on ice — the same controller on a surface the friction-circle limits were never identified for. Strictly for fun.

Write-up

Rather than treating the labs as isolated assignments, we built the semester up as one system: each module became a layer that stayed in the stack. The result behaves like a real autonomous vehicle pipeline — a high-frequency reactive layer that guarantees safety and recovery, a geometric tracking layer for known racelines, and a constrained-optimization layer that runs the car at the limits of grip. It took second place at the 28th Roboracer Autonomous Racing Competition at IV 2026.

The racing controller is a Frenet-frame nonlinear MPC over the state (s, e_y, e_psi, v, delta) with steering-rate and acceleration as inputs, solved on-vehicle by acados using SQP-RTI with HPIPM and partial condensing on a Jetson Orin Nano. Working in Frenet coordinates makes the racing objective natural to express: progress along the centerline is what you maximize, lateral deviation is what you constrain. It runs on LiDAR particle-filter localization fused with an EKF over VESC odometry and IMU.

The single largest lap-time gain was not in the solver at all — it was in the vehicle parameters. The speed profile is built from friction-circle and steering-rate limits, so it is only as good as delta_max and mu. Identifying both from measured turning radius and skid onset surfaced a 4x error in the steering limit that had been quietly making the car run wide in every corner.

Two refinements handled the parts of the track the nominal formulation could not. Corners tighter than the car's minimum turning radius get per-sector weight scheduling, so the controller trades off differently where the geometry is infeasible. Overtaking is a decoupled planner folded back into the MPC as a soft lateral bias, with windowed Frenet projection of the opponent — the passing line falls out of the same optimization rather than fighting it.