F1Tenth Autonomous Racing
A 1/10-scale autonomous race car, from a CMU course build to two Roboracer competitions and ongoing research at the AIMS Lab.
Reconstructed from photos of the car and scaled to the Traxxas wheelbase. Small parts and wiring are approximate.
sections
Overview
Team 10's F1TENTH car is a 1/10-scale autonomous race car built on a Traxxas Slash 4×4 with a Jetson Orin Nano, a Hokuyo 2D LiDAR and a VESC motor controller, running ROS 2 Humble. It started as a course build in CMU 16-663, raced at two Roboracer competitions in 2026, and the work continues in Prof. John Dolan's AIMS Lab.
The car
The stock Traxxas chassis carries a two-level deck. The Hokuyo LiDAR sits at the front on the center line, the Jetson Orin Nano in the middle, and the power distribution board, VESC and Wi-Fi antennas toward the rear, with the LiPo lead on an XT60 connector.


Timeline
- Course build, CMU 16-663 (Spring 2026). Built the full autonomy stack on the car as Team 10.
- 28th Roboracer Autonomous Racing Competition, IEEE IV 2026, Detroit. Finished 5th of 17 teams with a Frenet-frame Pure Pursuit controller and a LiDAR avoidance layer.
- 31st Roboracer Autonomous Racing Competition, IROS 2026, Pittsburgh. Rebuilt the race stack around map-generated racelines, Barrier State Control for obstacle avoidance and fused localization, building on a barrier-state approach proposed by a collaborator. An Economic MPC with barrier states is in development as the successor controller.
- AIMS Lab research (ongoing). Continuing the platform under Prof. John Dolan.
Autonomy stack
- Reactive avoidance: Follow the Gap for obstacle avoidance.
- Localization and mapping: scan matching, particle filter localization and graph-based SLAM.
- Planning: RRT* path planning in unknown environments.
- Control: Pure Pursuit path tracking with tuned PID for high-speed trajectories.
- State estimation: IMU, wheel odometry and 2D LiDAR fused for robust state estimates.
- Perception: monocular depth estimation for navigation when sensing is degraded.

Approach
Three controller tiers
- Baseline: Frenet Pure Pursuit with a model-based speed profile and barrier-state avoidance.
- Near Star: a Frenet Economic MPC that rewards progress and lets a friction-ellipse constraint set corner speed, so late apexes and trail braking come from the cost rather than hand-written rules.
- Blue Sky: adaptive MPC with learned weights or a distilled policy.
Racelines from the map alone
Hand-logged waypoints added curvature noise, so a generator builds three lines from the SLAM map: stable, minimum curvature, and minimum lap time with CasADi and IPOPT. On the IROS organizer map it extracted a 208.7 m loop with widths of 1.68 to 3.58 m.
Car data over simulator defaults
Settings tuned in the gym did not transfer: its tire model gave an understeer gradient about 7× smaller than the value tuned on the car. Bag analysis found about 140 ms between the drive command and the real yaw rate, which explained a 1.3 Hz weave. The car became the ground truth, with one change per run.
Fused localization
In one wide corner the particle filter lost heading while staying confident. A localization package now gates particle filter poses against a map-frame EKF and switches between fused, dead-reckoning and stop modes with speed limits.
Results
- 5th of 17 teams at IEEE IV 2026, Detroit.
- New Baseline on the car: 2 clean laps at 57.3 s, 0.18 m RMS lateral error, steering at its limit 1.7% of the time.
- Avoidance in a car-calibrated simulation: 111 of 112 stress runs clean after fixing the side latch; phantom detections on real scans cut from 25 to 8.
- Localization replay on real bags: heading error during the corner loss fell from 78° to 14°, and from 180° to 12° in the run that spun.

Lessons learned
- A derivative gain can hide feedforward. KD was quietly encoding curvature feedforward, which caused a see-saw between tuning straights and tuning curves until the feedforward term was made explicit.
- Fixed gains fail at speed. Speed-blind gains went unstable at high speed, and steering saturation plus low-speed gain amplification caused the inner-wall crashes in U-turns.
- Match the track, not the default. The avoidance half-width had to match the real track (about 0.50 m on a 1 m track, not 0.80 m).
- Some VESC problems are not tunable. "Allow Braking" in the speed PID produced a confirmed limit cycle, and v6 configuration files silently dropped parameters on v7.00 firmware.
- ROS 2 fails quietly. A node name that does not match its YAML key binds no parameters and raises no error.

What's next
Extending the stack toward an imitation-learning architecture that distills expert driving behavior into the planner, for faster onboard reaction at higher speeds. Nearer term:
- Near Star on acados, with the Baseline as a hot standby behind a drive arbiter.
- System identification on the car, then a dynamic single-track model with Pacejka tires.
- Delay compensation and moving the controllers onto the fused pose.
System architecture
Specifications
- Course
- CMU 16-663, Team 10
- Lab
- AIMS / DRIVE Lab, CMU
- Advisor
- Prof. John Dolan
- Chassis
- Traxxas Slash 4×4, 1/10 scale, 324 mm wheelbase
- Compute
- NVIDIA Jetson Orin Nano
- LiDAR
- Hokuyo UST 2D, 270° FOV, 40 Hz
- Motor control
- VESC 6 MkVI (fw 7.00)
- Software
- ROS 2 Humble, Python, robot_localization
- Control
- Frenet Pure Pursuit + Barrier State Control; Economic MPC (in progress)
- Optimization
- CasADi, IPOPT, OSQP