A course for competition robotics programmers
Programming a real robot
Commands, subsystems, and the code already on the robot. Everything here is taught from a real competition codebase, and you build your own copy to break, so what you read is what you push.
Curriculum
Units
- A robot that can only do one thing
- Ask again instead of waiting
- What a command owns
- One file per behavior
- Practice in a simulator
- One real command, all the way through
- Somewhere to put your own code
- Getting code onto the actual robot
- The constructor: what never changes
- initialize(): what depends on the moment
- execute(): a little work, then return
- isFinished(): arrived, or out of patience
- end(): leave it safe, and say how it went
- Why Artemis wraps the library’s turn
- Your first real command
- The part of the robot that stays
- One motor, one owner
- Name it once
- Where a number lives
- The dial that did nothing
- Reading a sensor
- A reading is not a decision
- State inside a subsystem
- When a command is one line
- Nothing has started yet
- Two doors, one robot
- The command that never finishes
- The panic button
- One flush, one loop
- Three ways to mean “the button”
- Reading a binding block
- An autonomous is a list
- Together, when together is worth it
- The trade you are making
- Where the robot thinks it is
- Radians, always
- Which way is zero
- Two maps of the same field
- The check that needs no robot
- Convert once, at the edge
- The conversion that looked reasonable
- The same command, from the other side
- Build the path from where you are
- Three wrong ways to know you arrived
- Why execute() is empty
- Handing back
- Four tests, four questions
- Once per loop, for the third time
- In order, because each stage stands on the last
- Paste, then redeploy
- The paste that reverts your work
- Two jobs, one camera
- One subsystem owns the camera
- What a sighting tells you
- null means three different things, on purpose
- Do not wait for a good reading
- Why a sighting is kept on the field
- What makes a stored sighting wrong
- How exact is a target?
- The arm does not pivot where the robot does
- Subtract the pivot first
- Where the pivot’s numbers live, and how often you read them
- The frame is already old
- How wrong, exactly
- Keeping the poses you will need
- The same detections, the other direction
- A tag that moved reads exactly as confidently
- Off until proven
- A policy that says why it refused
- One more conversion, at one more edge
- You have been taking its word for it
- Whose code is this, actually
- One iteration, in the order it really happens
- periodic() is not interrupted, because it was never scheduled
- A docstring is a claim; the source is the evidence
- Which method does what the sentence says
- The biggest version number is not the newest release
- Where the base class guarantees your hook will run
- Why it cannot live at the end of the last command
- The person who sits down next
- What a commit message is actually for
- Pull before you start
- The docs never show your exact case
- Reading toward a goal, not reading through
- Extending what last season left you
- Code that looks right
- Check it against the requirement, not against your taste
- Say where it came from
- A number before a mechanism
- Two designs, one set of constraints
- Four layers, one symptom
- The ladder, and why the order is not optional
- The tool that touches nothing
- A control is a fact about a date
- Retracting a lead, in writing
- A checker has three verdicts, not two
- Write the hour down
- Two directions, two mechanisms
- One at a time, and build in between
- A bump can break what no compiler sees
- Keep the merge boring