Skip to main content

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:
GroupRange
Swerve drive/steer/encoder1–12
Power Distribution Hub1
Intake motors15–19
Launcher motors20–29
Indexing motors30–34
Climb motor35–39
CANdle LED controller40
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.
ConstantID / PortTypeNotes
INTAKE_PIVOT_MOTOR_ID15CANIntake arm pivot TalonFX
INTAKE_MOTOR_ONE_ID16CANFirst intake roller TalonFX
INTAKE_MOTOR_TWO_ID17CANSecond intake roller TalonFX
FLYWHEEL_ONE_ID20CANPrimary flywheel TalonFX
FLYWHEEL_TWO_ID21CANSecondary flywheel TalonFX
HOOD_MOTOR_ID22CANHood angle TalonFX
TURRET_MOTOR_ID23CANTurret rotation TalonFX
HALL_EFFECT_SENSOR_ID0Analog inputHall-effect limit switch for turret zero
FEEDER_MOTOR_ID30CANFeeder belt TalonFX
SPINDEXER_MOTOR_ID31CANSpindexer disc TalonFX
CLIMB_MOTOR_ID35CANClimb winch TalonFX
CANDLE_ID40CANCANdle RGB LED controller
PDH_ID1CANPower 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.
ConstantNT Table NameRole
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:
FlagDefaultNotes
DRIVEBASE_ENABLEDtrueSwerve drivebase
INTAKE_ROLLERS_ENABLEDtrueIntake roller motors
INTAKE_ARM_ENABLEDtrueIntake pivot motor
INTAKE_ENABLEDderivedINTAKE_ARM_ENABLED && INTAKE_ROLLERS_ENABLED
FLYWHEELS_ENABLEDtrueFlywheel motors
HOOD_ENABLEDtrueHood angle motor
TURRET_ENABLEDtrueTurret rotation motor
LAUNCHER_ENABLEDderivedHOOD_ENABLED && FLYWHEELS_ENABLED && TURRET_ENABLED
SPINDEXER_ENABLEDtrueSpindexer disc motor
FEEDER_ENABLEDtrueFeeder belt motor
INDEXER_ENABLEDderivedSPINDEXER_ENABLED && FEEDER_ENABLED
VISION_ENABLEDtrueVision subsystem (requires DRIVEBASE_ENABLED)
LEDS_ENABLEDtrueCANdle 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.

Build docs developers (and LLMs) love