Holonomic Robot
Sat 12 March 2016
Robots come in a variety of types and configurations: wheeled, tracked, legs, flying, etc. Common wheeled robots typically have two wheels (directly driven) with a caster wheel to make the robot stable. There are some without the caster wheel and employ a control system to keep them upright (inverted pendulum problem) and resemble a Segway scooter. All of these two wheeled robot are nonholonomic systems.
 NonHolonomic System
 A nonholonomic system in physics and mathematics is a system whose state depends on the path taken to achieve it. An automobile is an example of a nonholonomic vehicle. The vehicle has three degrees of freedom: its position in two axes, and its orientation relative to a fixed heading. Yet it has only two controllable degrees of freedom: acceleration/braking and the angle of the steering wheel—with which to control its position and orientation. [2]
Due to these constraints, a holonomic robot (figref{soccer_robot}) which could travel in any direction and immediately change its position and orientation is much more desirable. There are a variety of different wheels which make this type of robot possible such as mecanum or omni wheels (figref{wheel}). [5] [6]
Omni wheels operate like standard wheels in that the force is produced normal to the motor's axis of rotation and as a result of friction. However, there are a series of smaller wheels which ring the main wheel and allow the wheel to slip in the direction of the motor rotational axis. Note that no force is produced parallel to the motor axis, just slippage.
Omni wheels allow you to decouple position and orientation. These are common in soccer robots.
Holonomic Dynamics
The dynamics for a holonomic robot, such as figref{coordinate}, with 4 omni directional wheels (can be derived using EulerLargrange (\(\mathcal{L}\)) which defines a system's kinectic (\(T\)) and potential (\(V\)) energies in relation to a set of generalized coordinates (\(q\)) and generalized forces (\(Q\)):
However, the dynamics must be calculated from an inertial reference frame (\({W}\)) and take into account the rotating body frame dynamics (\({B'}\)). Now, assume the body frame is offset from the center of mass ( CM) by \(x_m\) and \(y_m\) which compose a vector \(r_m\). Thus the velocity of the robot in the rotating frame would be:
where \(v_{B'}\) is the speed of the body frame. Now substituting that into the above kinetic energy equation \(T\), we get:
Now we make the following assumptions: \({B'}\) is coincident with \({B}\), \(x_m = 0\), \(y_m = 0\), \(\dot x = v_x\), \(\dot y = v_y\)
World Coordinates
Now the dynamics derived so far are all in the body frame and we could stop here and develop a controller which performs velocity control. However, position control is more useful and a transform needs to be performed to move the velocities and accelerations into the world frame.
Now, substituting this into the dynamics, gives dynamics in the world coordinate system of:
External Forces and Torques
Now looking at figure ref{robot} and summing the forces into their body referenced \(x\) and \(y\) directions and the torque about the \(z\) axis, gives us:
Additionally, we can simplify this by assuming all of the angles are the same (e.g., \(\phi_1 = \phi_2 = \phi_3 = \phi_4\)) and can now put this into a matrix form:
where \(\phi\) is again the angle of the motors as defined in figref{robot}, \(f_i\) is the magnitude of the force produced by the motors, and \(L\) is the radius of the robot.
where \(pinv()\) [#pinv]_is defined as the pseudoinverse since A(phi) is not a square matrix. Finally, substituting these into the original equation, we can calculate the torques given the desired accelerations.
Now looking at this equation, we notice that \(\phi\) can not be equal to 0, 90, 180, 270, or 360 otherwise we get a singularity in the \(A(\phi)\) matrix. This however is not an issue in the real world, since the motors would occupy the same physical space and the robot would essentially only have 2 and not 4 motors.
Holonomic Robot Kinematics
Now performing a similar exercise for what was done with the dynamics, looking at coordinate, the velocity of motor 1is given by \(v_1 = \sin(\phi) v_x + \cos(\phi) v_y + R \omega\). Performing this for each wheel gives:
Now setting \(\omega\) to zero and calculating only linear movement, we can determine the number of equivalent motors as shown in figref{fig:equivalent_motors}. For example, setting \(\phi\) to 30 \(^\circ\) (the red line in figref{fig:equivalent_motors}) and traveling in the x direction only (\(\begin{bmatrix} v_x & v_y & \omega \end{bmatrix}^T = \begin{bmatrix}1& 0 & 0 \end{bmatrix}^T\)), the above equation simplifies to \(4 \sin(30)\) or 2 equivalent motors. Repeating for the y direction results in \(4 \cos(30)\) or 3.46 equivalent motors.
Now it is interesting to note that when \(\phi\) is set to 30 \(^\circ\), the robot has more equivalent motors when going forward or backwards, while a \(\phi\) of 60 \(^\circ\) provides more equivalent motors moving left or right. When the motors are are angled at 45 \(^\circ\), movement is clearly equally optimized for both forward/backwards and left/right ( \(2 \sin(45)\) is 2.83 motors) movement.
figref{fig:equivalent_motors} tells us that no mater how the 4 motors are oriented in a realistic configuration, the robot will never have the equivalent use of all 4 motors. Movement in one direction or another can be optimized, but then a sacrifice is made in another direction. This fact is intuitively obvious.
Another issue is these results are also ideal. This logic assumes that the wheels will not slip and have good traction in any orientation. Unfortunately real world results do not mimic this situation and the robot's performance will be reduced.
References
[1]  Alexander Gloye, Raul Rojas, Holonomic Control of a Robot with an Omnidirectional Drive, accepted for publication by Künstliche Intelligenz, SpringerVerlag, 2006. 
[2]  http://en.wikipedia.org/wiki/Nonholonomic_system 
[3]  http://en.wikipedia.org/wiki/Lagrangian_mechanics 
[4]  http://www.kornylak.com 
[5] 

[6] 

[7]  Pseudoinverse: for m > n: \(A_{left}^{1}=(A^TA)^{1}A^T\) or m < n: \(A_{right}^{1}=A^T(AA^T)^{1}\) such that \(AA^{1}=I\) or \(A^{1}A=I\) 
[8]  Masayoshi Wada (2010). Motion Control of a Fourwheeldrive Omnidirectional Wheelchair with High Step Climbing Capability, Climbing and Walking Robots, Behnam Miripour (Ed.), ISBN: 9789533070308, InTech, Available from: http://www.intechopen.com/books/climbingandwalkingrobots/motioncontrolofafourwheeldriveomnidirectionalwheelchairwithhighstepclimbingcapability 