Documentation Index
Fetch the complete documentation index at: https://mintlify.com/robototes/REBUILT2026/llms.txt
Use this file to discover all available pages before exploring further.
All hardware CAN IDs, analog input ports, and peripheral names are centralized in Hardware.java. Changing a motor or sensor ID requires updating only that one file — no other source files reference raw integer IDs directly.
CAN ID table
IDs follow a deliberate grouping scheme so the CAN bus stays organized and easy to audit:| Group | Range |
|---|
| Swerve drive/steer/encoder | 1–12 |
| Power Distribution Hub | 1 |
| Intake motors | 15–19 |
| Launcher motors | 20–29 |
| Indexing motors | 30–34 |
| Climb motor | 35–39 |
| CANdle LED controller | 40 |
Swerve devices (IDs 1–12) live on the "Drivebase" CAN bus defined in CompTunerConstants/AlphaTunerConstants. All other devices — including the PDH (ID 1) — are on the default RoboRIO CAN bus, so the overlapping ID 1 does not cause a conflict.
| Constant | ID / Port | Type | Notes |
|---|
INTAKE_PIVOT_MOTOR_ID | 15 | CAN | Intake arm pivot TalonFX |
INTAKE_MOTOR_ONE_ID | 16 | CAN | First intake roller TalonFX |
INTAKE_MOTOR_TWO_ID | 17 | CAN | Second intake roller TalonFX |
FLYWHEEL_ONE_ID | 20 | CAN | Primary flywheel TalonFX |
FLYWHEEL_TWO_ID | 21 | CAN | Secondary flywheel TalonFX |
HOOD_MOTOR_ID | 22 | CAN | Hood angle TalonFX |
TURRET_MOTOR_ID | 23 | CAN | Turret rotation TalonFX |
HALL_EFFECT_SENSOR_ID | 0 | Analog input | Hall-effect limit switch for turret zero |
FEEDER_MOTOR_ID | 30 | CAN | Feeder belt TalonFX |
SPINDEXER_MOTOR_ID | 31 | CAN | Spindexer disc TalonFX |
CLIMB_MOTOR_ID | 35 | CAN | Climb winch TalonFX |
CANDLE_ID | 40 | CAN | CANdle RGB LED controller |
PDH_ID | 1 | CAN | Power Distribution Hub |
Vision: Limelight NetworkTable names
Each Limelight is referenced by its NT table name string rather than an IP or index. VisionSubsystem reads these constants directly from Hardware.
| Constant | NT Table Name | Role |
|---|
LIMELIGHT_A | "limelight-a" | Camera A (position TBD) |
LIMELIGHT_B | "limelight-b" | Camera B (position TBD) |
LIMELIGHT_C | "limelight-c" | Camera C (position TBD) |
Descriptive position names (e.g., limelight-front) will be assigned once camera mounting locations are finalized. For now, letters A/B/C correspond to the physical cameras in the order they were installed.
Swerve module IDs
Swerve drive, steer, and CANcoder IDs occupy the 1–12 range and are defined in CompTunerConstants and AlphaTunerConstants rather than Hardware.java, because they are generated by Phoenix 6 Tuner X. See Tuner Constants for the full per-module breakdown.
Subsystem enable flags
Subsystems.java exposes a SubsystemConstants inner class with boolean flags that gate each subsystem at startup. Setting a flag to false causes Subsystems to assign null for that subsystem, and all command bindings that depend on it are skipped. Composite flags are derived automatically:
| Flag | Default | Notes |
|---|
DRIVEBASE_ENABLED | true | Swerve drivebase |
INTAKE_ROLLERS_ENABLED | true | Intake roller motors |
INTAKE_ARM_ENABLED | true | Intake pivot motor |
INTAKE_ENABLED | derived | INTAKE_ARM_ENABLED && INTAKE_ROLLERS_ENABLED |
FLYWHEELS_ENABLED | true | Flywheel motors |
HOOD_ENABLED | true | Hood angle motor |
TURRET_ENABLED | true | Turret rotation motor |
LAUNCHER_ENABLED | derived | HOOD_ENABLED && FLYWHEELS_ENABLED && TURRET_ENABLED |
SPINDEXER_ENABLED | true | Spindexer disc motor |
FEEDER_ENABLED | true | Feeder belt motor |
INDEXER_ENABLED | derived | SPINDEXER_ENABLED && FEEDER_ENABLED |
VISION_ENABLED | true | Vision subsystem (requires DRIVEBASE_ENABLED) |
LEDS_ENABLED | true | CANdle LED subsystem |
Source reference
// Hardware.java
public class Hardware {
// Intake Motors (15-19)
public static final int INTAKE_PIVOT_MOTOR_ID = 15;
public static final int INTAKE_MOTOR_ONE_ID = 16;
public static final int INTAKE_MOTOR_TWO_ID = 17;
// Launcher Motors (20-29)
public static final int FLYWHEEL_ONE_ID = 20;
public static final int FLYWHEEL_TWO_ID = 21;
public static final int HOOD_MOTOR_ID = 22;
public static final int TURRET_MOTOR_ID = 23;
public static final int HALL_EFFECT_SENSOR_ID = 0; // Analog input
// Indexing Motors (30-34)
public static final int FEEDER_MOTOR_ID = 30;
public static final int SPINDEXER_MOTOR_ID = 31;
// Climb Motor (35-39)
public static final int CLIMB_MOTOR_ID = 35;
// CANdle
public static final int CANDLE_ID = 40;
public static final int PDH_ID = 1;
// Swerve: 1-12 — Check CompTunerConstants
// Vision
public static final String LIMELIGHT_A = "limelight-a";
public static final String LIMELIGHT_B = "limelight-b";
public static final String LIMELIGHT_C = "limelight-c";
}
Changing any CAN ID on a live robot requires a full robot code redeploy and a matching change in the device’s Phoenix 6 configuration (either via Tuner X or through the device config API). Mismatched IDs will silently fail to communicate rather than throwing an obvious error.