robot
ββ shooter
β ββ flywheel
β β ββ FlywheelIOReal (TODO: ADD)
β β ββ FlywheelIOSim (TODO: REFACTOR)
β ββ hood
β ββ HoodIOReal (TODO: ADD)
β ββ HoodIOSim (TODO: REFACTOR)
ββ hopper
β ββ intake
β β ββ IntakeIOReal (TODO: ADD)
β β ββ IntakeIOSim (TODO: REFACTOR)
β ββ pivot
β β ββ pivotIOReal (TODO: ADD)
β β ββ pivotIOSim (TODO: ADD)
β ββ transition
β ββ TransistionIOReal (TODO: ADD)
β ββ TransistionIOSim (TODO: REFACTOR)
ββ climber
β ββ ClimberIOReal (TODO: ADD)
β ββ ClimberIOSim (TODO: ADD)
ββ drive
β ββ module (x4)
β β ββ ModuleIOSpark
β β ββ ModuleIOSim
β ββ gyro
β ββ GyroIONavX
β ββ GyroIOBoron
β ββ GyroIOSim
ββ vision (x2)
ββ VisionIOLimelight
ββ VisionIOPhoton
ββ VisionIOPhotonSim
robot
ββ shooter
β ββ flywheel
β β ββ idled
[DEFAULT] β β ββ running
β ββ hood
[DEFAULT] β β ββ idled
β β ββ aimed(angle: double)
β β
β ββ idled -> flywheel: idled, hood: idled
[DEFAULT] β ββ hoodIdled -> flywheel: running, hood: idled
β ββ hoodAimed(angle: double) -> flywheel: running, hood: aimed(angle)
ββ hopper
β ββ intake
[DEFAULT] β β ββ idled
β β ββ running
β ββ pivot
[DEFAULT] β β ββ idled
β β ββ up
β β ββ down
β ββ transition
[DEFAULT] β β ββ idled
β β ββ running
β β
[DEFAULT] β ββ idled -> intake: idled, pivot: idled, transition: idled
β ββ compacted -> intake: idled, pivot: up, transition: idled
β ββ intaking -> intake: pivot.down ? running : idled, pivot: down, transition: idled
β ββ transitioning -> intake: idled, pivot: down, transition: running
ββ climber
[DEFAULT] β ββ idled
β ββ climbing
ββ drive
[DEFAULT] β ββ idled
β ββ driving(x: double, y: double, Ξ©: double)
β ββ basicFFSysID
β ββ wheelRadiusCharacterization
ββ vision0
[DEFAULT] β ββ aprilTags
β ββ otherPipeline(id: int)
ββ vision1
[DEFAULT] β ββ aprilTags
β ββ otherPipeline(id: int)
β
ββ shooting(x: double, y: double) ->
β shooter: hoodAimed(SOTM_HOOD_ANGLE),
β hopper: SOTM_ABLE_TO_HIT ? transitioning : idled,
β drive: driving(x, y, SOTM_DRIVE_ANGLE),
β vision0: aprilTags,
β vision1: aprilTags
β
ββ manualShooting(x: double, y: double, Ξ©: double, hoodAngle: double) ->
β shooter: hoodAimed(hoodAngle),
β hopper: transitioning,
β drive: driving(x, y, Ξ©),
β vision0: aprilTags,
β vision1: aprilTags
β
ββ intaking(x: double, y: double, Ξ©: double) ->
β shooter: hoodIdled,
β hopper: intaking,
β drive: driving(x, y, Ξ©),
β vision0: aprilTags,
β vision1: aprilTags
β
[DEFAULT] ββ driving(x: double, y: double, Ξ©: double) ->
β shooter: hoodIdled,
β hopper: idled,
β drive: driving(x, y, Ξ©),
β vision0: aprilTags,
β vision1: aprilTags
β
ββ climbing ->
shooter: idled,
hopper: compacted,
drive: idled,
vision0: aprilTags,
vision1: aprilTags
1 - 8: Swerve [even steer, odd drive; FL, BL, BR, FR] 9 - 11: Shooter [L Flywheel, R Flywheel, Hood] 12, 13: Spindexer [Primary, Kicker] 14, 15: Intake [Pivot, Intake] 16: Climb 17: (maybe temp) Intake Kicker 20: Gyro
- Consistent Shooter RPM
- PivotIOReal
- HoodIOReal
- FF characterization
- Variable-distance shooting
- SOTM
- Limelight locations on-robot
NOTE: Shooter L Flywheel & Intake Intake need to be updated to 2026 firmware
This is the AdvantageKit Swerve Template with REV SparkMax hardware, enhanced with maple-sim integration for improved chassis physics simulation.
Not many changes were made to the original projectβonly the necessary ones to implement maple-sim. See the changelog from the original project.
The control loops of the chassis run on REV motor controllers. During simulation, they are replaced with WpiLib PIDController, so there might be slight differences between the real and simulated robot.
Change Constants.currentRobotMode to SIM and run simulateJava.
Connect the robot from AdvantageScope, open AdvantageScope Simulation Layout, and drive your robot around!