Summer Project
MiniBot — The Course Project
you're building a real WRT-style robot codebase from scratch across 8 weeks. every week adds a new piece. by week 8, you'll have a fully structured robot program.
What You're Building
MiniBot is a simplified version of our actual FRC robot code. it uses the same patterns, naming conventions, and file structure as WaltonRobotics/Rebuilt. when you're done, your code could be the base of a real robot project.
final project structure
minibot/ ├── Constants.java // Week 1 — all robot constants ├── AutoLogic.java // Week 2 — if/switch auto selection ├── SensorProcessor.java // Week 3 — loops + arrays ├── DriveCalculator.java // Week 4 — static utility methods ├── subsystems/ │ ├── DriveSubsystem.java // Week 5 — first OOP class │ └── ShooterSubsystem.java // Week 6 — inheritance ├── RobotState.java // Week 7 — enum + interface └── Robot.java // Week 8 — final assembly
Week-by-Week Checklist
| Week | File | What to build | Core concept |
|---|---|---|---|
| Week 1 | Constants.java |
Inner classes DriveK + ShooterK with motor IDs, speeds, gear ratios |
Variables, final, naming conventions |
| Week 2 | AutoLogic.java |
Static method that uses if/switch to return an auto routine name given an input mode int | if/else, switch, booleans |
| Week 3 | SensorProcessor.java |
Static methods: average of double array, count values above a threshold, find min/max | for loops, arrays, methods |
| Week 4 | DriveCalculator.java |
Static utility methods: RPM to m/s, ticks to rotations, clamp(val, min, max), deadband(input, threshold) | Static methods, parameters, return types |
| Week 5 | DriveSubsystem.java |
Class with private final motor fields, constructor, periodic(), drive(double speed), stop(), getters |
OOP, encapsulation, constructors |
| Week 6 | ShooterSubsystem.java |
Extends same abstract base as DriveSubsystem. Adds m_targetRPS, isAtSpeed(), overrides periodic() |
Inheritance, extends, @Override |
| Week 7 | RobotState.java |
Enum with IDLE, DRIVING, SHOOTING, DISABLED. Plus interface IControllable with method signatures. |
Enums, interfaces, nested classes |
| Week 8 | Robot.java |
Extends TimedRobot. Fields for both subsystems. configureBindings(). robotPeriodic() with CommandScheduler. Uses RobotState. |
Full project integration |
Submission
at the end of week 8, you'll push all your .java files to a branch in the team repo and open a pull request. the leads will review your code — same process as real contributions to our robot.
PR title format: feat: minibot project — [your name]
Include a short description of what you built and anything you're unsure about. We give feedback, not just grades.
Grading (quick version)
20 pts
Naming conventions
k prefix on constants. m_ prefix on member vars. PascalCase classes. camelCase methods.
20 pts
OOP structure
Subsystems have proper constructors, periodic(), getters/setters. Inheritance and interface used correctly.
20 pts
No magic numbers
Every constant lives in Constants.java. Nothing hardcoded inline — not even CAN IDs.
20 pts
Comments
Every public method has a Javadoc. Tricky logic has inline // comments explaining the why.
20 pts
Compiles + runs
Your code should compile without errors. Logic should be sound — no while loops in periodic(), no raw mutation of private fields from outside the class.