Adding sensors to odometry - working approach?

Hi,

I build a differential drive robot. It is supposed to operate indoor, with changing floor covering. So far odometry for dead reckoning works well. Calibration has been done using UMBmark. After driving a square with two meters side length I get a displacement of two to six cm. With the given (cheap) platform I don't get it to work any better. I now want to improve the results by better sensing the yaw/turning angle.

What I tried:

  • optical mouse sensor: Not usable with changing floor covering - gives different cpi, dependent on floor covering / distance to floor only 1-2mm
  • AHRS using a 10dof IMU: Not usable indoor. The magnetometer gets highly distracted at some points. (electrical outlet, concrete reinforcement ..)
  • gyro + accelerometer: drifts (didn’t try it .. just read there is no way to prevent drift)

Two questions: - One thing I would like to know if it may work: Place the accelerometer out of center of the robot. Rotation should then be sensed as movement on the x-axis. Could his work or do I miss something? - Is there any other (maybe also mechanical/unorthodox) way I can improve sensing the turning angle?

Thanks Robert