Odometry and knowing where you are
Why drive-motor encoders get lost, how dead-wheel odometry pods fix it, and what an odometry computer like the goBILDA Pinpoint does for you.
By the end you can
- Explain why drive-encoder position tracking drifts, especially on mecanum
- Describe two-wheel and three-wheel dead-wheel layouts and what each measures
- Calculate encoder counts per millimetre for an odometry pod
- Wire odometry pods either to hub encoder ports or to an odometry computer
Odometry means working out where the robot is by measuring how it has moved. It is what lets an autonomous routine drive to a spot on the field instead of driving "about one metre and hoping". This lesson covers the hardware; the programming track's Understanding Odometry lesson and the PedroPathing lessons after it cover the software.
Option 1: the drive-motor encoders
The simplest odometry uses the encoders already on your drive motors. Every FTC-legal gearmotor has one, so it costs nothing and needs no extra wiring.
The problem is that the drive wheels are also the wheels pushing the robot. Whenever they slip — accelerating hard, braking, being pushed by another robot, or simply because mecanum rollers slip sideways by design — the encoders count rotation that never turned into motion. Game Manual 0 notes that drive-encoder tracking on mecanum can be quite inaccurate and drifts under high acceleration, although it is good enough for basic autonomous routines if you limit acceleration.
Option 2: dead wheels
- Dead wheel (odometry pod, tracking wheel)
- A small unpowered omni wheel with an encoder, sprung so it always presses on the floor. Because nothing drives it, it only turns when the robot really moves over the floor.
There are two common layouts:
| Layout | Pods | How heading is measured | Trade-off |
|---|---|---|---|
| Two-wheel | One parallel to the drive direction, one perpendicular | An IMU (gyro) | Cheaper; accuracy depends on the gyro |
| Three-wheel | Two parallel, one perpendicular | The difference between the two parallel pods | More hardware and careful tuning of the pod spacing |
Springs and floor contact are the whole job
A dead wheel that lifts off the tile for even a moment — over a seam, while the robot bounces — stops counting, and that error is permanent for the rest of the match. Use a properly sprung pod, keep it square to the direction it measures, and check that it touches the floor at every point of its travel.
How fine is a pod?
goBILDA's odometry pods use encoders with 2000 counts per revolution of the pod wheel. Their 4-Bar pod has a 32 mm wheel and their Swingarm pod a 48 mm wheel.
Worked example — 32 mm pod.
-
Circumference: π × 32 mm ≈ 100.5 mm per wheel revolution.
-
Counts per millimetre: 2000 ÷ 100.5 ≈ 19.9 counts/mm — about 0.05 mm per count.
-
Compare a drive motor: a 312 RPM goBILDA motor on a 104 mm wheel gives about 1.65 counts/mm (from the motors lesson). The pod measures about twelve times finer, and it does not slip.
For the 48 mm Swingarm pod: π × 48 ≈ 150.8 mm, and 2000 ÷ 150.8 ≈ 13.3 counts/mm.
Wiring option A: pods into the hub's encoder ports
Pods have a standard 4-pin JST PH encoder plug, so they can go straight into a hub's encoder ports. That raises an obvious question: encoder ports are paired with motor ports, so how does the code read a pod?
The answer is that the SDK reads an encoder port through the motor object with the same port number. If your left pod is in encoder port 0, your code reads it as "motor 0's encoder" — even though motor 0 is a drive motor with no encoder plugged in. Game Manual 0 points out that teams using dead wheels usually stop using their drive-motor encoders for this reason, freeing those ports for the pods.
This is the one time port numbers deliberately do not match
In the wiring lesson, a motor's power and encoder always shared a port number. With dead wheels, the encoder in port 0 belongs to a pod, not to motor 0. Write down which pod is on which port, label the cables, and double-check the direction each pod counts by pushing the robot by hand and watching telemetry.
Wiring option B: an odometry computer
An odometry computer does the position maths for you. The goBILDA Pinpoint is a small board that:
- takes two odometry pods (one X, one Y) on JST PH encoder connectors,
- fuses them with its own built-in IMU for heading,
- updates its position estimate about 1,500 times a second, and
- sends the robot's position to the Control Hub over I2C.
Because it plugs into an I2C bus, it uses none of your encoder ports — useful on a robot that needs every motor encoder for lifts and arms. goBILDA has replaced the original Pinpoint with a Pinpoint V2, which adds error checking on the data it sends, among other updates.
Its status LED tells you what it thinks is wrong:
| LED | Meaning |
|---|---|
| Green | Ready |
| Red | Calibrating, or not ready |
| Purple | No pods detected |
| Blue | X pod not detected |
| Orange | Y pod not detected |
Coprocessors like the Pinpoint are allowed as long as teams do not modify their software (rule R702 in the 2026–27 manual, which also lists other examples such as optical tracking sensors). As always, check the current Competition Manual before buying.
Mounting checklist
- Mount pods rigidly to the chassis. Any wobble in the mount shows up as position error.
- Keep pods square — a parallel pod must point exactly along the robot's forward axis, a perpendicular pod exactly across it.
- Measure the offsets. The software needs each pod's position relative to the robot's centre of rotation. Measure from the CAD or carefully on the robot, and write it down.
- Strain-relieve the encoder cables. A pod on a swing arm moves; give the cable a little slack where it moves and tie it down either side.
- Mount the Pinpoint flat and secure, since its IMU measures heading.
Check yourself
A mecanum robot's autonomous ends up 15 cm off target after a fast strafe, even though the drive encoders say it travelled exactly the right distance. What is the best hardware fix?
Check yourself
A 48 mm odometry pod wheel has a 2000 counts-per-revolution encoder. About how many counts does it report when the robot moves 300 mm in the pod's direction?
Check yourself
Your goBILDA Pinpoint's LED is orange. What should you check first?
Next
Odometry tells the robot where it thinks it is. Cameras let it check — by recognising AprilTags and game pieces. That is the next lesson.
Sources and further reading
- Game Manual 0: Dead Wheels — layouts, pros and cons, encoder ports
- goBILDA Pinpoint V2 Odometry Computer and the original Pinpoint (discontinued)
- goBILDA Pinpoint user guide (PDF)
- goBILDA 4-Bar Odometry Pod (32 mm) and Swingarm Odometry Pod (48 mm)
- goBILDA odometry products
- FTC Competition Manual — rule R702 on coprocessors
Finished this lesson?
Mark it complete to track your progress.