Front-Runner’s autonomous system started with a deceptively simple requirement: the robot had to know where it was, move through a repeatable path, and arrive ready to score. Every layer, from wheel alignment to vision, had to agree on the robot’s state.

Owning the swerve stack

Our custom swerve code separated modules, kinematics, odometry, and closed-loop feedback. A Pigeon 2.0 provided heading, CANCoders established absolute module direction, and our feedback controllers smoothed both autonomous and driver commands.

Our first trajectory implementation

We initially implemented cubic Bézier paths ourselves. A sampled lookup table produced the desired translation direction, while a PID loop used progress along the curve to scale the commanded velocity. It worked and taught us exactly what a path follower needed, but authoring and tuning paths took time.

Choosing the better tool

Choreo generated trajectories from the robot’s physical constraints, including mass, motors, and gearing. We wrote the integration layer that translated its JSON output into our swerve code. The result was faster routine development and paths the robot could follow more consistently.

  • Near-360° AprilTag coverage from four global-shutter cameras
  • Vision estimates combined with wheel odometry
  • Telemetry in Glass and AdvantageScope
  • A driver-facing autonomous selector and swerve visualizer

The main lesson was not that custom code is always better or that an off-the-shelf tool is always faster. Building the first version gave us enough understanding to evaluate the second, and to integrate it without giving up control of the rest of the system.

Read the 2024 technical binder