Skip to content
Draft
Show file tree
Hide file tree
Changes from 153 commits
Commits
Show all changes
157 commits
Select commit Hold shift + click to select a range
38040a5
fuel sim moved to frc-fire-control's FuelPhysicsSim
A2A1x Mar 23, 2026
59791d6
Merge branch 'photon' into frc-fire-control-FuelPhysicsSim
A2A1x Mar 24, 2026
001054f
merge fix
A2A1x Mar 24, 2026
a373052
working in auto
A2A1x Mar 24, 2026
b349559
Merge remote-tracking branch 'origin/trench-autos' into frc-fire-cont…
A2A1x Mar 24, 2026
cf7212f
added trench auto
A2A1x Mar 24, 2026
d5efa71
start of bump physics sim
SpectrumFRC3847 Mar 24, 2026
014256c
start of articulating mechanisms
SpectrumFRC3847 Mar 24, 2026
b67f558
Revert "start of bump physics sim"
A2A1x Mar 25, 2026
ed136da
working intake articulation in sim
A2A1x Mar 25, 2026
248b398
update vendordeps
SpectrumFRC3847 Apr 13, 2026
870907c
Merge branch 'tuning' into high-fidelity-sim
SpectrumFRC3847 Apr 13, 2026
860499d
merge fix
SpectrumFRC3847 Apr 13, 2026
e425c13
Merge branch 'main' into high-fidelity-sim
SpectrumFRC3847 Apr 20, 2026
32ffbca
fm additions
SpectrumFRC3847 Apr 20, 2026
bd803f3
Merge branch 'auto' into high-fidelity-sim
SpectrumFRC3847 Apr 22, 2026
6f941d6
logic fix and clearer variable name
SpectrumFRC3847 Apr 22, 2026
c485bd9
Merge branch 'auto' into high-fidelity-sim
SpectrumFRC3847 Apr 22, 2026
3ed78f9
Merge branch 'tuning' into high-fidelity-sim
SpectrumFRC3847 Apr 27, 2026
b991646
merge fix
SpectrumFRC3847 Apr 27, 2026
614202f
Refactor spectrumLib packages and safety fixes
A2A1x May 27, 2026
7cc4f1e
Add detailed README for SpectrumLib
A2A1x May 27, 2026
14d8995
Refactor Vision subsystem and tidy imports
A2A1x May 27, 2026
b0c872c
Remove custom Trigger; update usages
A2A1x May 27, 2026
74dac3c
Merge branch 'high-fidelity-sim' into random
A2A1x May 27, 2026
9b42afd
Update pilot trigger logic and GUI layout
A2A1x May 27, 2026
64d11d0
Use polynomial virtual-target shot model
A2A1x May 27, 2026
271afad
Add Javadoc to all spectrumLib packages
A2A1x Jun 3, 2026
85276e8
Add 3D bump ramp physics simulation to swerve sim
A2A1x Jun 3, 2026
e163e84
fix variable name
A2A1x Jun 3, 2026
2ac3f92
Refactor robot state handling into SuperStructure
A2A1x Jun 3, 2026
64250b3
Enable and implement autonomous routines
A2A1x Jun 3, 2026
8fb65dd
Remove SpectrumSubsystem and update usages
A2A1x Jun 3, 2026
25db917
Remove TagProperties and simplify Swerve config
A2A1x Jun 5, 2026
ff508a5
Bump CTRE Phoenix, update README, drop PhotonLib
A2A1x Jun 5, 2026
637b145
Improve auton/side loading; swerve & vision fixes
A2A1x Jun 6, 2026
82bc360
Introduce CANdle-based Leds subsystem
A2A1x Jun 6, 2026
87beda2
Refine shooter model, kinematics, and swerve init
A2A1x Jun 10, 2026
91840da
Adjust swerve teleop coeff and telemetry keys
A2A1x Jun 10, 2026
e624ad9
Make configs immutable and refactor subsystems
A2A1x Jun 10, 2026
b7ca865
Add OM2026 configuration class for robot setup
JediMasterLucy55 Jun 11, 2026
558c2af
Remove Zones and simplify field centers
A2A1x Jun 11, 2026
c5e176c
Inject SuperStructure into Auton and RobotSim
A2A1x Jun 11, 2026
89ebff6
Multiple subsystem fixes and refactors
A2A1x Jun 12, 2026
ae9014a
Merge branch 'main' into state-machine-refactor
A2A1x Jun 12, 2026
6bd5fb4
revived leds for the offseason, next I will focus on getting them to …
JediMasterLucy55 Jun 12, 2026
5fab55c
Merge pull request #104 from Spectrum3847/main
JediMasterLucy55 Jun 14, 2026
2418f07
Refactor LED subsystem: replace CANdleLeds with Leds class and update…
JediMasterLucy55 Jun 14, 2026
7370768
Refactor shooter models; add feed model
A2A1x Jun 16, 2026
38c7a13
Update controls, intake logic, and UI layout
SpectrumFRC3847 Jun 17, 2026
3d7b240
Merge branch 'state-machine-refactor' into 2026-offseason-bot
SpectrumFRC3847 Jun 17, 2026
ae72acf
changing spindexer to new state system, turret is next
SpectrumFRC3847 Jun 17, 2026
5eb995c
Refactor Launcher subsystem: update configuration parameters and stat…
SpectrumFRC3847 Jun 17, 2026
28891aa
Remove unused IndexerBedConfig import and add TODO for Launcher state…
SpectrumFRC3847 Jun 17, 2026
6a3b36a
configs
SpectrumFRC3847 Jun 17, 2026
14b1364
architecture changes
JediMasterLucy55 Jun 29, 2026
92f54c9
Refactor current limit variables in FuelIntake, IntakeExtension, and …
JediMasterLucy55 Jul 1, 2026
f301f7c
coded turret in and made general adjustments
JediMasterLucy55 Jul 2, 2026
802a0ba
Refactor imports and clean up code formatting in various subsystems
JediMasterLucy55 Jul 2, 2026
add0b98
sim fixes
JediMasterLucy55 Jul 2, 2026
d42f512
sim stuff
JediMasterLucy55 Jul 4, 2026
a9d5707
Refactor turret angle handling in ShotCalculator and Turret subsystem…
JediMasterLucy55 Jul 5, 2026
13e3bb4
sim configs
JediMasterLucy55 Jul 5, 2026
7696b01
Update controls for sim will make better when not on mobile
JediMasterLucy55 Jul 5, 2026
6b78d68
Update button handling for simulation mode in Robot class; adjust wan…
JediMasterLucy55 Jul 6, 2026
adc8879
Merge branch '2026-offseason-bot' of https://github.com/Spectrum3847/…
JediMasterLucy55 Jul 6, 2026
cc11eba
Add FM2026 configuration and update Robot class for simulation handli…
JediMasterLucy55 Jul 6, 2026
2656e95
Refactor launcher states and update turret configuration for improved…
JediMasterLucy55 Jul 6, 2026
ecf342b
Update simulation configurations and enhance turret functionality for…
JediMasterLucy55 Jul 7, 2026
b0ab319
important additions for advanced turret control
A2A1x Jul 8, 2026
673bec6
increase sim update frequency with new SimLoop class
A2A1x Jul 8, 2026
1e13869
Rename SHOOTER_TURRET_PIVOT_POINT to TURRET_PIVOT_POINT for clarity i…
JediMasterLucy55 Jul 8, 2026
a89eafa
Merge branch 'turret-control-and-sim' into 2026-offseason-bot
JediMasterLucy55 Jul 8, 2026
d0420a7
change ball launching sim to single lane turret
A2A1x Jul 8, 2026
d03cd58
Update Robot controls to use InstantCommand for flywheel and turret a…
JediMasterLucy55 Jul 9, 2026
cedf759
Merge branch 'turret-control-and-sim' into 2026-offseason-bot
JediMasterLucy55 Jul 9, 2026
d750fbd
Refactor FuelPhysicsSim to improve ball contact detection; update Rob…
JediMasterLucy55 Jul 9, 2026
19e1a5f
Refactor indexerTower and spindexer states to use IDLE_SLOW_INDEX; up…
JediMasterLucy55 Jul 10, 2026
b8a9c9a
Add turret pivot height and tilt compensation to ShotCalculator; upda…
JediMasterLucy55 Jul 11, 2026
051ca23
fix: correct targeting bugs in ShotCalculator (2026-offseason-bot)
cappy-dev Jul 11, 2026
2df162f
Remove unused imports and clean up comments in Swerve.java
JediMasterLucy55 Jul 11, 2026
9638c76
Refactor turret states to include IDLE; update SuperStructure for con…
JediMasterLucy55 Jul 11, 2026
293ea3e
fix: restore cache pattern per review feedback
cappy-dev Jul 11, 2026
04257fd
Fix formatting in ShotCalculator and Turret classes for improved read…
JediMasterLucy55 Jul 12, 2026
a7dd739
fix: revert turret velocity Y to original code per review
cappy-dev Jul 12, 2026
2120a36
Merge pull request #109 from cappy-dev/fix/shotcalc-offseason-bugs
JediMasterLucy55 Jul 12, 2026
7b46e47
added a follower motor will fix later
JediMasterLucy55 Jul 14, 2026
4f004ff
placeholder 5th motor for launcher
JediMasterLucy55 Jul 14, 2026
1552936
removed indexer tower
JediMasterLucy55 Jul 16, 2026
ae544ea
refactor: clean up code formatting and remove unused indexer tower re…
JediMasterLucy55 Jul 16, 2026
b4f8d57
chore: add TODO comments for tuning and updates across multiple subsy…
JediMasterLucy55 Jul 17, 2026
71a0dda
sim layout update and id bug fix
JediMasterLucy55 Jul 17, 2026
8f67b51
fix: update docking positions and sizes in simgui configuration feat:…
JediMasterLucy55 Jul 18, 2026
23c9ed5
fix: update docking positions and sizes in simgui configuration, remo…
JediMasterLucy55 Jul 18, 2026
bfb1e33
x brake added (RT + LB)
JediMasterLucy55 Jul 20, 2026
f05799a
TODOs, commenting out, and commenting
JediMasterLucy55 Jul 24, 2026
a3a6306
Add Hood subsystem and integrate into Robot framework
JediMasterLucy55 Jul 27, 2026
4e27859
feat: integrate Hood subsystem into SuperStructure and update related…
JediMasterLucy55 Jul 27, 2026
8b75422
fixed gear ratios and stuff to match cad changed sim but its kinda ba…
JediMasterLucy55 Jul 27, 2026
38d147d
feat: update ShotCalculator to use launcher speed and adjust offsets;…
JediMasterLucy55 Jul 28, 2026
3b34d5e
feat: enhance ShotCalculator with hood velocity calculation; refactor…
JediMasterLucy55 Jul 28, 2026
25cbfb5
working 3d visualization
A2A1x Jul 28, 2026
93c5dc1
sim adjustments for shot calc
A2A1x Jul 28, 2026
478afa4
Stabilize turret unwrap and align sim limits
A2A1x Jul 28, 2026
80d3210
Add LauncherTower subsystem and integrate into Robot and SuperStructu…
JediMasterLucy55 Jul 28, 2026
e12a8d2
- stole the IntakeExtension from FM - worked on Spindexer subsystem, …
JediMasterLucy55 Jul 28, 2026
20828e8
fixed spindexer errors
JediMasterLucy55 Jul 28, 2026
b0e02cd
improved dye rotor code structure
SpectrumFRC3847 Jul 28, 2026
7404b2b
dyeRotor refactor cleanup
A2A1x Jul 28, 2026
4e78508
Merge branch '2026-offseason-bot' into offseason-3d-sim
A2A1x Jul 28, 2026
ce04e39
merge fix
A2A1x Jul 28, 2026
44ccfda
update Field constants
A2A1x Jul 28, 2026
3620db2
Merge branch 'main' into 2026-offseason-bot
JediMasterLucy55 Jul 29, 2026
1479ec8
started tuning values
JediMasterLucy55 Jul 29, 2026
ea31f03
Improve shot sim, lead model, and sim motor wiring
A2A1x Jul 29, 2026
7ce769e
Make subsystem configs immutable
A2A1x Jul 29, 2026
bcc8c33
more tuning values
JediMasterLucy55 Jul 29, 2026
0b7fafe
update configs and control requests
A2A1x Jul 29, 2026
ab52dc1
fix soft limits on hood and turret
A2A1x Jul 29, 2026
59a5681
hood fixes
A2A1x Jul 29, 2026
95e80c7
refactor FuelIntake to add kicker bar roller, update CAN ids
SpectrumFRC3847 Jul 29, 2026
59f3bc4
disable static limeligths, readd turreted limelight and proper calcul…
SpectrumFRC3847 Jul 29, 2026
827c3e3
Merge branch '2026-offseason-bot' into offseason-3d-sim
SpectrumFRC3847 Jul 29, 2026
8132654
merge fix and formatting
SpectrumFRC3847 Jul 29, 2026
9569b7b
refactor: rewrite IntakeExtension to follow DyeRotor container pattern
Project516 Jul 29, 2026
d3bd875
address PR #119 feedback: extract shared axis base, fix stall/homing …
Project516 Jul 29, 2026
2506291
fix spotless formatting
Project516 Jul 29, 2026
4c82dd9
Clear stale status on unselected Limelights
A2A1x Jul 30, 2026
34ef49a
address PR #119 feedback: drop shared IntakeExtensionAxis base class
Project516 Jul 30, 2026
bc5d769
Rename setRotorRpm to setRotorVelocity and update RPM to RPS conversion
JediMasterLucy55 Jul 30, 2026
26dbd69
address PR #119 feedback: drop no-op stop() overrides, restore docstr…
Project516 Jul 30, 2026
9fe6bd3
Merge remote-tracking branch 'origin/2026-offseason-bot' into refacto…
Project516 Jul 30, 2026
fc6fdf5
fix spotless violations inherited from base branch merge
Project516 Jul 30, 2026
156c814
📝 Add docstrings to `refactor/intake-extension-dyerotor-pattern`
coderabbitai[bot] Jul 30, 2026
9ff5a17
fix spotless violations from docstring bot commit
Project516 Jul 30, 2026
0cc98fd
fix PM2026 docstring: practice machine, not final machine
Project516 Jul 30, 2026
8699f23
Merge pull request #119 from Spectrum3847/refactor/intake-extension-d…
JediMasterLucy55 Jul 30, 2026
2429236
Merge branch '2026-offseason-bot' into offseason-3d-sim
A2A1x Jul 30, 2026
bccf740
merge fixes
A2A1x Jul 30, 2026
d38bf67
test: add unit tests for pure-logic utility and sim classes (closes #…
Project516 Jul 31, 2026
3dee3d9
test: strengthen sim/util test coverage and fix single-point curve NaN
Project516 Jul 31, 2026
3bad048
fix java format
Project516 Jul 31, 2026
f9fda5b
test: strengthen sim/util coverage, add docstrings for 100% method co…
Project516 Jul 31, 2026
0f72216
changes
SpectrumFRC3847 Jul 31, 2026
cec0f6c
docs: fix misplaced and imprecise Javadocs from review findings
Project516 Jul 31, 2026
b9036d8
docs: document speed, heading, and Limelight accessor contracts
Project516 Jul 31, 2026
a82bb7c
Merge pull request #125 from Spectrum3847/tests/unit-tests-offseason
Project516 Aug 1, 2026
475c3de
limelights - got rid of limelights we dont have on OM
SpectrumFRC3847 Aug 1, 2026
cc42add
configs
SpectrumFRC3847 Aug 1, 2026
7e64280
config update
SpectrumFRC3847 Aug 1, 2026
202e319
Merge branch '2026-offseason-bot' of https://github.com/Spectrum3847/…
SpectrumFRC3847 Aug 1, 2026
8c80c3e
Update SwerveConfig.java
SpectrumFRC3847 Aug 1, 2026
78b50d4
ci/test: add automated simulation testing to CI/CD and unit test suite
Project516 Aug 2, 2026
b69ea01
fix: apply CodeRabbit auto-fixes
coderabbitai[bot] Aug 2, 2026
67a2777
📝 Add docstrings to `arena/019fbfe2-2026-spectrum`
coderabbitai[bot] Aug 2, 2026
5bfe423
Fix 2 failing CI check(s): GitHub Actions: CI / build, GitHub Actions…
coderabbitai[bot] Aug 2, 2026
bec6b0a
fix: apply CodeRabbit auto-fixes
coderabbitai[bot] Aug 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,6 @@
"edu.wpi.first.math.**.struct.*",
],
"java.compile.nullAnalysis.mode": "automatic",
"java.debug.settings.onBuildFailureProceed": true
"java.debug.settings.onBuildFailureProceed": true,
"java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx16G -Xms100m -Xlog:disable"
}
178 changes: 178 additions & 0 deletions advantagescope-custom-assets/AdvantageScope 7-8-2026.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
{
"hubs": [
{
"x": -8,
"y": -8,
"width": 1936,
"height": 1048,
"state": {
"sidebar": {
"width": 334,
"expanded": [
"/SmartDashboard/Sim",
"/SmartDashboard/MapleSim/MatchData",
"/Robot/SimShot",
"/SmartDashboard/MapleSim/MatchData/Breakdown",
"/SmartDashboard/MapleSim/MatchData/Breakdown/blue Alliance",
"/Robot/FieldSimulation",
"/Robot/FieldSimulation/SimRobotPose",
"/Robot/FieldSimulation/SimRobotPoseWithBump",
"/Robot/FieldSimulation/SimRobotPoseWithBump/rotation",
"/Robot/FieldSimulation/SimRobotPoseWithBump/rotation/q",
"/Robot/FieldSimulation/SimRobotPose/rotation",
"/Robot/Superstructure",
"/Robot/Target ID getReefZone",
"/Sim/Fuel",
"/Robot",
"/Sim/Fuel/Stats",
"/Robot/Hood",
"/Robot/Sim"
]
},
"tabs": {
"selected": 3,
"tabs": [
{
"type": 0,
"title": "",
"controller": null,
"controllerUUID": "n0ilkkww0cjb3y0s6c3jycvmc288co6z",
"renderer": "",
"controlsHeight": 0
},
{
"type": 1,
"title": "Line Graph",
"controller": {
"leftSources": [],
"rightSources": [],
"discreteSources": [],
"leftLockedRange": null,
"rightLockedRange": null,
"leftUnitConversion": {
"autoTarget": null,
"preset": null
},
"rightUnitConversion": {
"autoTarget": null,
"preset": null
},
"leftFilter": 0,
"rightFilter": 0
},
"controllerUUID": "ymy0ce0vpb9tpe3vl7f4eh6oclm0c6ia",

Check warning on line 63 in advantagescope-custom-assets/AdvantageScope 7-8-2026.json

View workflow job for this annotation

GitHub Actions / fix-spelling

"tpe" should be "type".
"renderer": null,
"controlsHeight": 200
},
{
"type": 10,
"title": "Mechanism",
"controller": [
{
"type": "mechanism",
"logKey": "NT:/SmartDashboard/Sim/LeftView",
"logType": "Mechanism2d",
"visible": true,
"options": {}
}
],
"controllerUUID": "8x5r9tpkrt5x85mzz0uuj3gwdqd1qwzy",
"renderer": null,
"controlsHeight": 200
},
{
"type": 3,
"title": "3D Field",
"controller": {
"sources": [
{
"type": "robot",
"logKey": "NT:/Robot/Sim/RobotPose3d",
"logType": "Pose3d",
"visible": true,
"options": {
"model": "3847 - PM"
}
},
{
"type": "component",
"logKey": "NT:/Robot/Sim/Components",
"logType": "Pose3d[]",
"visible": true,
"options": {}
},
{
"type": "gamePiece",
"logKey": "NT:Sim/Fuel/Positions",
"logType": "Translation3d[]",
"visible": true,
"options": {
"variant": "Fuel"
}
}
],
"game": "FRC:2026 Field"
},
"controllerUUID": "1amtkucvvwtuj1q7z0e6rkfcgp1cfnhg",
"renderer": {
"cameraIndex": -1,
"orbitFov": 50,
"cameraPosition": [
-3.3022221575556503,
3.0069939305682825,
5.432943392512464
],
"cameraTarget": [
-3.4582712997448435,
2.119258167082097,
1.3738810277593272
]
},
"controlsHeight": 207
},
{
"type": 2,
"title": "2D Field",
"controller": {
"sources": [
{
"type": "robot",
"logKey": "NT:/Robot/Swerve/Pose",
"logType": "Pose2d",
"visible": true,
"options": {
"bumpers": ""
}
}
],
"field": "FRC:2025 Field (AndyMark)",
"orientation": 3,
"size": "large"
},
"controllerUUID": "t1whba8qra0vc9iqjxr7cnmasxq2l7zf",
"renderer": null,
"controlsHeight": 200
},
{
"type": 8,
"title": "Joysticks",
"controller": [
"None",
"None",
"None",
"None",
"None",
"None"
],
"controllerUUID": "23r5466w9fbogud4fh5jfvz48tsz3gcc",
"renderer": null,
"controlsHeight": 85
}
]
}
}
}
],
"satellites": [],
"version": "26.0.0"
}
3 changes: 3 additions & 0 deletions advantagescope-custom-assets/README.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
This folder contains extra assets for the odometry, 3D field, and joystick views. For more details, see the "Custom Fields/Robots/Joysticks" page in the AdvantageScope documentation (available through the documentation tab in the app or the URL below).

https://docs.advantagescope.org/more-features/custom-assets
57 changes: 57 additions & 0 deletions advantagescope-custom-assets/Robot_FM/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{
"name": "3847 - FM",
"isFTC": false,
"disableSimplification": false,
"rotations": [
{
"axis": "x",
"degrees": 90
},
{
"axis": "z",
"degrees": 90
}
],
"position": [
0,
0,
0
],
"cameras": [],
"components": [
{
"zeroedRotations": [
{
"axis": "x",
"degrees": 90
},
{
"axis": "z",
"degrees": 90
}
],
"zeroedPosition": [
0,
0,
0
]
},
{
"zeroedRotations": [
{
"axis": "x",
"degrees": 90
},
{
"axis": "z",
"degrees": 90
}
],
"zeroedPosition": [
0,
0,
0
]
}
]
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
54 changes: 54 additions & 0 deletions advantagescope-custom-assets/Robot_PM/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
{
"name": "3847 - PM",
"isFTC": false,
"disableSimplification": false,
"rotations": [{
"axis": "x",
"degrees": 90
}, {
"axis": "z",
"degrees": 90
}],
"position": [
0,
0,
0
],
"cameras": [],
"components": [
{
"zeroedRotations": [
{
"axis": "x",
"degrees": 90
},
{
"axis": "z",
"degrees": 90
}
],
"zeroedPosition": [
0,
0,
0
]
},
{
"zeroedRotations": [
{
"axis": "x",
"degrees": 90
},
{
"axis": "z",
"degrees": 90
}
],
"zeroedPosition": [
0,
0,
0
]
}
]
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
9 changes: 7 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,16 @@ dependencies {
test {
useJUnitPlatform()
systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true'
testLogging {
events "passed", "skipped", "failed"
exceptionFormat "full"
}
}

// Simulation configuration (e.g. environment variables).
wpi.sim.addGui().defaultEnabled = true
wpi.sim.addDriverstation()
def isCI = System.getenv("CI") != null || project.hasProperty("headless")
wpi.sim.addGui().defaultEnabled = !isCI
wpi.sim.addDriverstation().defaultEnabled = !isCI

// Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar')
// in order to make them all available at runtime. Also adding the manifest so WPILib
Expand Down
19 changes: 19 additions & 0 deletions docs/tools/simulation.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,25 @@ That view is especially useful for autos. Select the auto in Elastic or Glass, e

AdvantageScope can also replay the same data from a `.wpilog` after the run. That makes the workflow: test the auto in sim, use 3D Field live while it runs, then open the saved log if you need to scrub frame-by-frame through the exact moment the path or pose estimate went sideways.

## Automated Simulation Testing in CI/CD

In addition to interactive debugging in Glass and AdvantageScope, the repository runs automated JUnit 5 simulation integration tests as part of `./gradlew build` and GitHub Actions CI.

The simulation test suite lives under [`src/test/java/frc/robot/sim/`](../../src/test/java/frc/robot/sim/) and is built around [`SimTestBase`](../../src/test/java/frc/robot/sim/SimTestBase.java), which handles:

* Initializing WPILib's Hardware Abstraction Layer (HAL) in simulation mode (`HAL.initialize(50, 0)`).
* Managing `DriverStationSim` state transitions (teleop and autonomous modes).
* Stepping simulation timing deterministically via `SimHooks.stepTiming(...)` and executing the `CommandScheduler`.
* Resetting scheduler, notifier, and DriverStation state between test runs so tests remain isolated.

In CI (`CI=true`) or when `-Pheadless=true` is passed to Gradle, `wpi.sim.addGui().defaultEnabled` and `wpi.sim.addDriverstation().defaultEnabled` are automatically set to `false`, allowing simulation tests to run in headless Ubuntu Linux containers without requiring X11 display servers.

You can run the full verification suite locally using:

```bash
scripts/verify.sh
```

## What Simulation Catches (and Doesn't)

It catches:
Expand Down
21 changes: 21 additions & 0 deletions scripts/verify.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/usr/bin/env bash
set -e

# Change to repo root
cd "$(dirname "$0")/.."

if [ "$1" = "--fix" ]; then
echo "=== Running Spotless Apply ==="
./gradlew spotlessApply
else
echo "=== Running Spotless Check ==="
./gradlew spotlessCheck
fi

echo "=== Running SpotBugs Static Analysis ==="
./gradlew spotbugsMain

echo "=== Running Compile and Tests (Unit & Sim Tests) ==="
./gradlew test -Pheadless=true

echo "=== Verification SUCCESSFUL ==="
8 changes: 2 additions & 6 deletions simgui-ds.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,4 @@
{
"System Joysticks": {
"window": {
"enabled": false
}
},
"keyboardJoysticks": [
{
"axisConfig": [
Expand Down Expand Up @@ -104,5 +99,6 @@
{
"useGamepad": true
}
]
],
"useEnableDisableHotkeys": true
}
Loading
Loading