Robotics framework / 2018 to present
FRC-Athena
Athena turns recurring robot architecture into a maintained teaching and delivery platform.
Explore repositoryA competition robot is rebuilt each season by a changing group of students while WPILib and vendor APIs also change.
Registration, hardware polling, output conflicts, autonomous behavior, telemetry, and simulation can acquire different conventions until the architecture is hard to teach or reuse.
I made the robot a discoverable object graph and centralized its runtime cycle.
Hardware declarations stay stable above optional vendor adapters; mechanisms, behavior actions, localization, autonomous logic, and simulation share the graph; and distribution follows WPILib’s standard dependency workflow.
Season-specific hardware under stable robot concepts.
Robot code declares hardware and mechanisms against Athena. Optional vendor adapters bind those declarations to the installed ecosystem, while the same graph feeds simulation and WPILib lifecycle integration.
- 01 Robot application
Commands · autonomous · team-owned behavior
- 02 Mechanism layer
Controls · drivetrain · vision · localization
- 03 Hardware graph
Buses · devices · followers · limits · physical motor data
- 04 Optional adapters
CTRE · REV · Studica · Limelight · PhotonVision
- 05 Execution targets
WPILib robot lifecycle · desktop simulation · roboRIO
- Gradle modules
- WPILib vendordep
- Local Maven + examples
The decisions beneath the summary.
Robot as a discovered graph
Robot fields form one graph containing mechanisms, behavior tasks called Actions, hardware, controls, localization, autonomous routines, and simulation models. The runtime discovers that structure, validates relationships, and constructs the lifecycle around the declarations. Named CAN buses and device relationships preserve physical topology without forcing every mechanism to know vendor object construction.
- Invalid bus and interface combinations fail against the declared hardware graph
- Followers, limits, and physical motor identity stay available to both control code and simulation
- Students extend the graph with fields rather than editing parallel registration tables
Deterministic runtime cycle
RobotRuntime coordinates mechanisms, Actions, autonomous work, localization, and hardware refresh through one periodic model. Inputs are captured consistently for a cycle; Actions and mechanisms compute against that state; output arbitration makes simultaneous writers explicit rather than order-dependent. Safety constraints, motion profiles, PID and feedforward, telemetry, and trace behavior follow the same lifecycle.
- Action resolution provides one composable behavior model for teleop and autonomous work
- Hardware refresh and output application are separate phases rather than arbitrary vendor calls throughout the robot
- Java microbenchmarks with allocation profiling cover scheduling, refresh, the full robot cycle, and simulation hot paths
Simulation as a backend swap
SimModel implementations attach to the same hardware declarations used on the robot. The simulation backend applies outputs to physics and returns sensor snapshots into the normal runtime cycle. Tests and desktop runs therefore exercise hardware identity, Actions, mechanisms, and arbitration rather than a simplified second application that can drift from competition code.
- Physical motor constants in the graph inform the simulated plant
- Sensor snapshots return through the same input surface used by real devices
- Telemetry and runtime trace can compare the same lifecycle across desktop and roboRIO targets
Optional ecosystem and distribution
CTRE, REV, Studica, Limelight, PhotonVision, PathPlanner, and Choreo adapters are separate modules. Service discovery activates an adapter only when its official dependency is present. Gradle modules publish through local Maven and WPILib’s standard dependency metadata, while standalone example robots consume the published artifacts to verify the workflow students actually use.
- Absent vendor libraries cause their adapter to be skipped rather than accidentally linked
- Annual vendor API churn stays behind independently replaceable integration modules
- Standalone examples validate install and public API boundaries rather than importing workspace internals
What this work does not claim.
The 2027 branch is an active rebuild and does not promise a one-to-one port of older Athena internals.
Vendor adapters cannot prove device behavior when the matching official library or physical hardware is absent.
The abstraction has to remain teachable and observable by students; removing boilerplate is not permission to hide robot behavior.
Architecture, evidence, and limits.
Explore repository ↗Architecture
- 01 Declared robot graph instead of registration tables
fields become discoverable mechanisms, behavior actions, hardware, controls, localization, autonomous routines, and simulation models
- 02 One deterministic runtime cycle
sensors snapshot once, behavior resolves, mechanisms compute, and output arbitration prevents order-dependent hardware commands
- 03 Optional adapters above stable hardware identity
CTRE, REV, Studica, vision, and path integrations activate only when their official dependency is installed
- 04 Simulation as a backend swap
the same declarations, behavior, and hardware graph drive physics and sensor snapshots instead of a simplified parallel program
- 05 WPILib-native distribution
modular artifacts, standard dependency metadata, local publication, and standalone examples fit the tools students already use
Validation
- 01
Standalone example robot projects compile against published artifacts, exercising the installation and public API that a team actually consumes
- 02
Per-module and full-workspace builds guard dependency boundaries and the published integration surface
- 03
Runtime benchmarks with allocation profiling cover scheduling, hardware refresh, the full robot cycle, and simulation without presenting a hardware-independent speed claim
- 04
The same behavior actions and hardware identities are exercised through both real and simulation backends
Why it matters in practice.
- 01Students declare robot structure once instead of maintaining separate registration and lifecycle wiring
- 02One input snapshot and output arbitration boundary prevents within-cycle inconsistencies and order-dependent motor commands
- 03Real hardware and simulation share behavior, device identity, and sensor surfaces instead of drifting into separate programs
- 04Optional adapters contain annual vendor API churn without forcing every team project to install every ecosystem dependency
- Framework architecture
- Control layers
- Autonomous tooling
- Examples and mentoring
- Java
- WPILib
- Controls
- FRC
- Documentation