Skip to Content
getting-startedproject-structure

Last Updated: 3/9/2026


Project Structure

This document explains the organization of the BREAD5940 2025 FRC robot code repository.

Repository Overview

2025-Public/ ├── src/main/ │ ├── java/frc/robot/ # Main robot code │ └── deploy/ # Files deployed to RoboRIO ├── vendordeps/ # Third-party library dependencies ├── gradle/ # Gradle wrapper files ├── build.gradle # Build configuration ├── settings.gradle # Gradle settings └── .wpilib/ # WPILib configuration

Source Code Structure

Main Robot Package (src/main/java/frc/robot/)

frc/robot/ ├── Main.java # Entry point ├── Robot.java # Main robot class ├── RobotContainer.java # Robot configuration and bindings ├── Constants.java # Global constants ├── FieldConstants.java # Field geometry constants ├── autonomous/ # Autonomous routines ├── commands/ # Custom commands ├── commons/ # Shared utilities ├── config/ # Robot configuration system ├── constants/ # Subsystem-specific constants ├── generated/ # Auto-generated code (TunerConstants) ├── keyboard/ # Numpad controller └── subsystems/ # Robot subsystems

Key Files

Robot.java

The main robot class that extends LoggedRobot from AdvantageKit.

Responsibilities:

  • Initialize subsystems and logging
  • Manage robot lifecycle (init, periodic methods)
  • Handle mode transitions (disabled, autonomous, teleop)
  • Load PathPlanner paths
  • Configure alliance-specific behavior

Key Methods:

  • robotInit() - One-time initialization
  • robotPeriodic() - Runs every 20ms in all modes
  • autonomousInit() - Called when entering autonomous
  • teleopInit() - Called when entering teleop
  • disabledInit() - Called when entering disabled mode

RobotContainer.java

Configures the robot’s subsystems, commands, and operator interface.

Responsibilities:

  • Instantiate all subsystems
  • Configure button bindings (driver and operator controls)
  • Set default commands
  • Provide autonomous command selection
  • Configure vision systems

Key Components:

  • Xbox controllers (driver and operator)
  • Numpad controller for level selection
  • Subsystem instances (swerve, intake, etc.)
  • Vision cameras (PhotonVision, RealSense)

Constants.java

Global constants used across the robot code.

Contains:

  • CAN IDs for motors and sensors
  • Physical measurements
  • Timeout values
  • Default speeds and accelerations

FieldConstants.java

Field-specific geometry and coordinates for the 2025 game.

Contains:

  • Reef positions
  • Coral station locations
  • Processor locations
  • Scoring zones
  • Alliance-specific coordinates

Subsystems Directory

Subsystem Organization

Each subsystem follows a consistent package structure:

subsystems/ ├── Superstructure.java # Main state machine coordinator ├── swerve/ # Swerve drivetrain │ ├── Swerve.java │ └── [implementation files] ├── intake/ # Game piece intake │ ├── Intake.java │ └── [implementation files] ├── endeffector/ # Scoring mechanism │ ├── EndEffector.java │ └── [implementation files] ├── indexer/ # Game piece management │ ├── Indexer.java │ └── [implementation files] ├── elevatorpivot/ # Vertical/angular positioning │ ├── ElevatorPivot.java │ └── [implementation files] ├── climber/ # End-game climbing │ ├── Climber.java │ └── [implementation files] └── vision/ # Vision processing ├── PhotonAprilTagVision.java ├── RealSenseVision.java └── ObjectDetection.java

Subsystem Architecture Pattern

Each subsystem typically includes:

  1. Main Subsystem Class - Extends SubsystemBase
  2. IO Interface - Hardware abstraction layer
  3. IO Implementation(s) - Real hardware and simulation implementations
  4. Inputs Class - Logged inputs from hardware
  5. State Enum - Subsystem states (if applicable)

Commands Directory

Custom commands for autonomous and teleop operations:

commands/ ├── AutoPlaceCommand.java # Autonomous scoring ├── MoveToPoseCommand.java # Path following to target pose ├── MoveToCoralCommand.java # Navigate to coral ├── AutoGrabAlgaeCommand.java # Autonomous algae pickup ├── NetScoringCommand.java # Net scoring routine ├── ScoreProcessorCommand.java # Processor scoring ├── ReefFacingCommand.java # Face reef structure ├── HeadingLockCommand.java # Lock robot heading ├── LollipopAutoCommand.java # Lollipop autonomous pattern └── [other commands]

Autonomous Directory

autonomous/ └── AutonomousSelector.java # Auto routine selection

Autonomous paths are stored as PathPlanner JSON files in src/main/deploy/pathplanner/paths/.

Configuration System

BreadConfig

The config/ directory contains the robot configuration system:

config/ └── BreadConfig.java # Robot-specific settings

Purpose:

  • Support multiple robot configurations (competition, practice, beta)
  • Define hardware IDs and constants per robot
  • Enable easy switching between robot configurations

Commons Directory

Shared utilities and helper classes:

commons/ ├── AllianceFlipUtil.java # Alliance-aware coordinate flipping ├── BreadUtil.java # General utilities ├── LoggedTunableNumber.java # Live-tunable values ├── ScoringOffsets.java # Scoring position adjustments └── [other utilities]

Generated Code

generated/ └── TunerConstants.java # CTRE Tuner X generated swerve config

Note: This file is auto-generated by CTRE Phoenix Tuner X. Do not edit manually.

Deploy Directory

src/main/deploy/ └── pathplanner/ # PathPlanner configuration ├── paths/ # Autonomous path files └── autos/ # Autonomous routine definitions

Files in this directory are deployed to the RoboRIO at /home/lvuser/deploy/.

Build Configuration

build.gradle

Key Settings:

  • Java 17 compatibility
  • WPILib version: 2025.3.2
  • Team number: Loaded from .wpilib/wpilib_preferences.json
  • Dependencies: WPILib, vendor libraries, Jama matrix library
  • Simulation support enabled

vendordeps/

Third-party library JSON descriptors:

  • CTRE Phoenix 6
  • PathPlanner
  • PhotonVision
  • AdvantageKit
  • Other vendor dependencies

Logging and Telemetry

The project uses AdvantageKit for comprehensive logging:

  • Logs stored on USB drive at /U/logs/ on RoboRIO
  • NetworkTables publishing for live dashboard data
  • Replay-compatible log format for simulation

Code Organization Best Practices

Package Naming

  • All code under frc.robot package
  • Subsystems in frc.robot.subsystems
  • Commands in frc.robot.commands
  • Utilities in frc.robot.commons

File Naming Conventions

  • Subsystems: [SubsystemName].java
  • Commands: [Action][Subsystem]Command.java
  • Constants: End with Constants.java
  • IO interfaces: [Subsystem]IO.java
  • IO implementations: [Subsystem]IO[Type].java

State Management

  • Subsystems use enum-based state machines
  • Superstructure coordinates multi-subsystem states
  • State transitions logged via AdvantageKit

Next Steps