In order to estimate position and orientation using dead reckoning, you have to measure the rotation of your wheels (or the motor shaft or gear driving the wheels). This means using some sort of shaft or wheel encoder. The RP5 has a gear that rotates 4x for every wheel rotation, and a hole in it which they indicate can be used to count gear rotations using some sort of optical (infrared) encoder.
One can get much more precision by using more holes/slots or more markings, as discussed in this thread on homemade encoders. Also, having two offset sets of marks allows one to do quadrature encoding and determine the direction of travel as well. For my first robot, I’m just using a rough encoder, with 4 counts per wheel revolution.
In looking in the chassis, there’s not a lot of room. As a result, I decided I’d use a small transmissive sensor, rather than a reflective sensor. Both have an IR emitter and an IR photo detector. For reflective units, they both face the same direction, and the detector measure IR reflected back to the sensor. For a transmissive or interrupt sensor, the two units are separated by a gap, and the detector picks up IR passing through the gap. So far, so good.
I ended up using Vishay transmissive optical sensors (model TCST1202) I purchased from DigiKey. I found a ciruch and wiring them up based on the circuit posted by Aniss1001 in the “Homemade wheel encoder“ thread on the Arduino forum.
I built the circuit on a prototyping breadboard for testing and got a surprise. The circuit worked fine, but the gear is transparent to IR! It turns out that nylon and most plastics used for inexpensive gears are pretty transparent to IR. I first tried creating an opaque section with a black marker, but while that worked on paper, it didn’t adhere well enough to the gear. I ended up using a piece of black tape. Once that worked, I cut some small circuit boards down to size and built the encoders, practicing my soldering skills.
I just used hot glue to mount the encoders. The encoder boards stick up above the chassis base, so I’m using standoffs to raise the plastic plate with the Romeo controller and other devices. Here’s a picture of one of the encoders before mounting,, and then mounted on the chassis:
UPDATE: If you don’t want to build your own, I just discovered these pre-built transmissive encoder boards.