[Math] Calculating individual wheel velocities from a desired angle in a differential wheeled robot

geometryordinary differential equations

I am working on a simulation of a two-wheeled robot, and at present am driving it by setting each individual wheel's velocity. The robot is similar to an ePuck:

ePuck

What I would like to do is set an initial (and constant) overall speed for the robot, and simply command it to turn by a specified angle while moving. At this point, I'd like to keep the model simple and not worry as much about acceleration.

Essentially, what I would like to do is command it to turn by 90 degrees, as shown in the next picture. On that basis, with a constant speed on the forward motion of the body itself, what I'd like to know is how to calculate the appropriate velocity of each wheel separately.

path

I'd looked into some existing models that go into differential equations here and here, however I wasn't able to understand if it were possible to find the values that I'm interested in.

Best Answer

Let $W$ be the distance between the points of contact of the two wheels. If you want to turn the (really neat) vehicle through an angle of $\theta \text{ }$radians, then the outer wheel must travel a distance $W\cdot \theta \text{ }$farther than the inner wheel.

If the radius of each wheel is $R$, then the outer wheel must rotate on its axle through an "extra" angle (relative to the inner wheel) given by, in radians:$$ \theta_{extra}=\frac{W\cdot \theta}{R}$$If you want to work in angular velocity and time, assume that you can add an angular velocity $\omega_{add}$, in radians per second to the outer wheel for T seconds. Then to turn through an angle $\theta$ $$T=\frac{W\cdot \theta}{R\cdot \omega_{add}}$$ If you can "add" positive or negative angular velocity, you could change the speed of just one wheel, say the left one; add speed to turn right, and reduce speed to turn left.

Related Question