-
FRC 2026 Game
In the FRC 2026 season, the game revolves around two primary objectives: collecting foam balls, and launching them into a 2 m tall “hub.” Detailed game rules are documented in the official game manual.
-
Hardware Overview
This documentation describes the first robot revision utilized throughout the majority of the competition season. The robot is made of a largely aluminum-polycarbonate design to balance structural integrity with a low weight to meet the 115 lb weight limit. The SDS Mk4i Swerve drivetrain and all other mechanisms use CTRE Kraken X60 / X44 motors for their light weight, power efficiency, and internal relative encoders for position feedback. A Limelight 2 is used in tandem with a Pigeon 2.0 for pose estimation, and a roboRIO 2.0 is used as the system’s primary processing unit. The robot has one fixed shooter and one dynamic shooter that can rotate on the yaw axis. Turret pitch control was already implemented in software, but the linear actuators physically required for this were non-functional and the shooting flywheel was insufficiently powered, making the planned long-range ball shooting infeasible. This resulted in the turret ultimately being replaced by a second fixed shooter assembly later in the season.
-
Software Overview
The robot’s software is largely standard command-based WPILib template boilerplate. Initially, all software was made from scratch, only using CTRE motor, Xbox controller, and basic WPILib interfacing libraries. Rudimentary testing proved this lightweight code worked flawlessly, but project management ultimately decided to scrap all of it in favor of more traditional and time-proven code. Consequently, the final codebase adheres to standard WPILib design patterns and architectural conventions; foundational framework mechanics will be omitted here as they are fully covered in the official WPILib documentation. This project served as my introduction to Java, requiring me to learn the language's syntax and object-oriented paradigms during active development.
-
Ballistic Targeting
The program first calculates vertical velocity for a ball to reach the 3 m trajectory apex, and then calculates the time of flight to the hub. Dividing the relative horizontal displacement vector by the time of flight yields the required horizontal velocities for the ball to reach the hub, leaving us with the vertical velocity and the horizontal velocities. Finding the Euler angle commands to send to the turret actuation system is now straightforward trigonometry—using two-argument arctangent with the horizontal velocities yields the yaw command, and two-argument arctangent of the vertical velocity and the magnitude of the horizontal velocities yields the pitch command. Finding the magnitude of the 3-dimensional vector yields the required exit velocity of the ball. This algorithm served as my first program written in Java; the original source file is archived here.
-
Evaluation and Analysis
The robot only achieved baseline functionality due to suboptimal physical design choices. It effectively collected balls, but the hopper functionality and launch mechanisms were suboptimal. The hopper was undersized and operationally brittle, consistently losing balls out of the top or jamming them in flywheel drive belts. The launch mechanisms were slow, inaccurate, and prone to jamming as well. If I were to do this again, I would make the ball storage walls out of elastic mesh netting and fully enclose the storage bay, allowing for large volumes of balls to be securely held. A single, high-volume shooter would only have a pitch actuation system; the drivetrain itself would control the heading, allowing for a simple and efficient way to put balls in the hub. Otherwise, I believe everything else was optimal or sufficient.