# Odometry equation

• posted

I was working on a maze solver last night and came up with an equation that will let me choose the radius of the circle I want the bot to turn on for a differentially steered robot. I'm sure someone else has thought of this, but I haven't seen it on the web so I thought I'd post it...

X=1-(1/((r/b)+.5)) Where: r=radius of the turn at the center of the vehicle b=distance between the wheels X=ratio of speed of inside wheel to outside wheel

Therefore the radius of the turn at the wheels will be r+(b/2) and r-(b/2)

As long as X stays constant, the bot should stay on the same circle, albeit traveling at different speeds. To do a full speed turn, set the outside wheel at 100% and the inside wheel at X%. As an example for a maze with 11" wide corridors(r=11/2=5.5"), and a vehicle with b=4.225", X will be .445. So the outside wheel travels at 100% and the inside wheel travels at 44.5%.

I haven't tested this yet on a working bot, so acceleration effects may make it worthless if the motors aren't powerful enough to change speed rapidly.

For more odometry info check out G.W. Lucas' great paper "A Tutorial and Elementary Trajectory Model for the Differential Steering System of Robot Wheel Actuators" and the Rossum project at

Anyone think this equation will be useful? Has anyone seen it somewhere before?

Jeff Kroll

• posted

Jeff,

Thanks for the favorable review!

With regard to your equation, I note that you can write X=1-(1/((r/b)+.5)) as X = (2r-b)/(2r+b) The nice thing about the alternate form is that you can see from inspection that X is going to be a negative value when you try to execute a turn radius that is less than half the distance from tire to tire. You're also spot on in pointing out that you'll maintain the same circular path no matter how fast your tires turn as long as the ratio of their velocities remains the same.

If velocities remain constant, the equations for differential steering have a satisfying closed-form solution. If you add acceleration into the mix, they don't. The MotionApplet at