Knowing where the robot is, anywhere on the field, all the time.
An Absolute Positioning System keeps track of the robot's position (cartesian coordinates) and orientation (heading) at every moment. With odometry, instead of saying "drive forward 24 inches", you can say "drive to point (48, 36) and face 90°". The robot figures out the path itself.
Pick a corner of the field as (0, 0). Measure x and y in inches. Measure θ (the robot's heading) in radians or degrees, pick one and stick with it. Use inches and radians internally because the C++ trig functions take radians natively.
That last part is the tricky bit. Next week we'll write the actual update loop. For now, the goal is to understand why odometry exists and what it tracks.
Most IQ teams don't use full odometry, they use dead reckoning because IQ matches are short and the field is small. But understanding odometry gives you superpowers: smarter autonomous routines, position-based logic (e.g., "if I'm closer to the goal than the opponent, do X"), and a head start when you move to V5 or FRC.
Two odometry concept questions with code that looks reasonable but is wrong.
double poseT = 90; // heading in degrees
double d = 5.0; // moved 5 inches
poseX += d * cos(poseT);
poseY += d * sin(poseT);
double leftInches = ticksToInches(LeftMotor.position(degrees));
double rightInches = ticksToInches(RightMotor.position(degrees));
poseT = leftInches / TRACK_WIDTH;
// (heading updated using only the left wheel)