The Palm Pilot Robot can move holonomically across flat surfaces, which in this case means it may move in any direction while simultaneously controlling rotational speed. This is true because the omni-wheels have rollers that allow them to freely roll sideways but control the motion in the direction the wheel is pointing. The following diagram and analysis illustrates how a desired motion vector and rotational velocity can be resolved into the wheel velocities that will create the desired motion.
In the control program, this analysis is incorporated into a function Vector_Drive(V, w) which drives the robot in a direction specified by a given vector V, while rotating the robot at an angular speed w.
F0, F1, F2 -unit direction vectors
v - desired body velocity expressed in body coordinate frame
w - angular velocity
b - wheel baseline
v0, v1, v2 - wheel linear velocities
w0, w1, w2 - wheel angular velocities
n - wheel number
pn - velocity of the body at a given wheel n
F0 = [-1, 0]
F1 = [1/2, -sqrt(3)/2]
F2 = [1/2, sqrt(3)/2]
body velocity from wheel velocity:
Each wheel constrains the velocity in a particular direction at the specified point. At each wheel, the velocity depends on v and w, and is the sum of the velocity due to rotation (expressed in the body frame) and the motion of the body frame in the world:
pn = v + (b•w)*Fn
pn•Fn = wheel velocity, therefore
wheel velocity = v•Fn + b*w and r*wn = v•Fn + b*w.
w0 = (v•F0 + b*w) / r
w1 = (v•F1 + b*w) / r
w2 = (v•F2 + b*w) / r