CommandScheduler.
High-level architecture
The entry point isMain.java, which calls RobotBase.startRobot(Robot::new). Robot extends TimedRobot and owns the top-level object graph.
Robot.robotPeriodic() is the heartbeat of the system. It runs the CommandScheduler, updates vision pose estimates from the drivetrain’s SwerveDriveState, logs garbage-collection count to SmartDashboard, and resumes the DataLog every second.
Controls is instantiated after Subsystems. It receives the Subsystems object and a SimWrapper and registers all CommandXboxController trigger bindings there. No robot logic lives in the periodic callbacks beyond calling CommandScheduler.run().Package structure
Enabled subsystems
Every subsystem is gated by aboolean flag in Subsystems.SubsystemConstants. The table below shows all flags as they appear in the current codebase.
Derived constants are computed as logical AND of their component flags — for example:
Dual hardware configurations
The codebase runs on two physical robots — an Alpha prototype and a Competition bot. The correct configuration is selected automatically at startup by reading the RoboRIO’s serial number inRobotType.java. In simulation the type is always SIM.
RobotType.isAlpha() or RobotType.isComp(). See Robot Types for the full comparison.
Explore further
Quickstart
Clone the repo, build, simulate, and deploy to a RoboRIO in six steps.
Robot Types
Alpha vs Competition bot configuration — serial numbers, PID gains, gear ratios, and more.
Subsystems
Deep-dive into each subsystem: drivebase, launcher, intake, indexer, and vision.
Configuration
Hardware IDs, launcher constants, and live NT tuning.