Selected work
FIRST Robotics Competition 2024 — CRESCENDO, presented by Haas

Robotics · FRC 2024

Terry

A 2024 FRC robot with swerve drive, a pivoting shooter, vision-assisted aiming, reusable autonomous routines, and a simulator used during development. Terry was built to pick up and shoot orange donuts called notes in the 2024 FRC game, Crescendo.

Measured highlights

Fully synchronized digital twin
dual-purpose runtime for simulation or real deployment
±3 cm precision
required for precise autonomous navigation
92% shot accuracy
effective range: 4-20ft

Context

The 2024 game rewarded fast collection and shooting, so the robot needed to move accurately and spend as little time as possible lining up each shot.

Terry is a swerve-drive competition robot that picks up game pieces, aims, shoots, and runs autonomous routines using the same core logic in simulation and on the physical robot.

The software work

  1. Simulation

    The Java simulator supported autonomous and teleoperated operation while sharing core logic with the physical robot.

  2. Motion

    Swerve-drive kinematics, odometry work, and tuned acceleration curves supported autonomous positioning.

  3. Scoring

    Reusable path segments and shooting calculations let autonomous routines combine movement and game-piece handling.

Render of Terry
3D loads as this section approachesDrag to inspect
Terry's exported CAD assembly. Drag to inspect on desktop.

My role

Responsibility
Software Lead
Team
Software team of about 10
Tools
Java · WPILib · Swerve · Autonomy · CAD

I led a software team of about ten and wrote substantial parts of the Java robot code. I built the simulator, developed the shooting-while-driving math, tuned motor acceleration, worked on odometry, and built reusable autonomous path segments. I also wrote base-case unit tests and improved motor configuration reliability.

Process & decisions

Simulation was waiting on fake hardware.

Fake motors and other simulated devices still passed through configuration written for physical hardware. Some vendor configuration calls added waits even though there was nothing to configure.

Separate hardware setup from robot behavior
I identified which configuration work only mattered on the physical robot and kept it out of the simulated startup path.
Keep the shared logic intact
The simulator still ran the same autonomous and teleoperated code instead of becoming a separate simplified implementation.
Check the base cases
I added unit tests for basic behavior so the faster startup path did not quietly change how the robot code worked.

Outcome

First simulation startup became about 13 seconds faster, an improvement of roughly 80%. That made the simulator easier to use while the physical robot was being built or repaired.

Before
Hardware-only waits in simulation
After
About 13 seconds removed