IR sensor with a backup being the bumper sensor incase of drift and any accumulated errors.
If error builds up too much, your robot just needs to trash the map and start over. Your robot will need a program that says 'hey, map has changed too much lately, maybe something is wrong?'
The other solution is SLAM, but a bit too complex for a microcontroller/beginner.