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 configurationSource 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 subsystemsKey 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 initializationrobotPeriodic()- Runs every 20ms in all modesautonomousInit()- Called when entering autonomousteleopInit()- Called when entering teleopdisabledInit()- 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.javaSubsystem Architecture Pattern
Each subsystem typically includes:
- Main Subsystem Class - Extends
SubsystemBase - IO Interface - Hardware abstraction layer
- IO Implementation(s) - Real hardware and simulation implementations
- Inputs Class - Logged inputs from hardware
- 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 selectionAutonomous 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 settingsPurpose:
- 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 configNote: 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 definitionsFiles 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.robotpackage - 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
- Explore Command-Based Overview
- Learn about Subsystem Architecture
- Review individual Subsystem Documentation