Auto Chooser
Disclaimer: WIP and untested on 2026 hardware; verify selections and fallbacks on your robot. Custom code built on WPILib APIs (not official WPILib sample).
Purpose: Quickly pick between core autos and expose a fallback when hub data is missing.
Code (Java/WPILib)
public class AutoSelector {
public enum AutoMode { FUEL_L1, FUEL_ONLY, TAXI_ONLY }
private final SendableChooser<AutoMode> chooser = new SendableChooser<>();
private final Command fuelL1;
private final Command fuelOnly;
private final Command taxiOnly;
public AutoSelector(Command fuelL1, Command fuelOnly, Command taxiOnly) {
this.fuelL1 = fuelL1;
this.fuelOnly = fuelOnly;
this.taxiOnly = taxiOnly;
chooser.setDefaultOption("Fuel + L1", AutoMode.FUEL_L1);
chooser.addOption("Fuel Only", AutoMode.FUEL_ONLY);
chooser.addOption("Taxi Only", AutoMode.TAXI_ONLY);
SmartDashboard.putData("Auto Chooser", chooser);
}
public Command getSelected(boolean hubDataAvailable) {
AutoMode mode = chooser.getSelected();
if (mode == null) mode = AutoMode.FUEL_L1;
// If hub data is flaky, favor simpler autos
if (!hubDataAvailable && mode == AutoMode.FUEL_L1) {
mode = AutoMode.FUEL_ONLY;
}
return switch (mode) {
case FUEL_L1 -> fuelL1;
case FUEL_ONLY -> fuelOnly;
case TAXI_ONLY -> taxiOnly;
};
}
}
How to test
- Shuffleboard: verify chooser shows all options and selection changes.
- Sim run: select each option, ensure the correct command is returned.
- Field: unplug FMS feed to simulate missing hub data; confirm it falls back if configured.
Pitfalls
- Always set a default option; null selection can crash.
- Keep auto commands short and robust; avoid requiring vision if not reliable.