Omni-directional motion, resolving three or more vectors?

In robotics, there exists drive-trains that can move omni-directionally (that is in any direction). These come in many shapes and sizes, but most come in a three wheel or four wheel configuration, to keep things simple lets assume three wheels.

These drives are made possible by what is know as an omni-wheel, that is a wheel with casters along it which allows power to be applied in the direction the wheel spins, but not in the direction perpendicular to the wheel.

You can think of the "power" direction as having a lot of friction, and of course the part that rolls with the wheel, while the "slip" of the casters provides a very low friction, non-powered direction.

I come from a programming background, not physics but I want to better understand the physics at work here. So let's look at a simplified picture:

I know that friction and the center of mass are important factors. That's about it.

So my question is, given a direction (green arrow), can a set of forces (red arrows) be calculated such that they equal the overall resulting force. IE, given blue and green can you calculate the various red forces?

-
Hi Cody, and welcome to Physics Stack Exchange! I have to be honest, I can't figure out what you're asking here. It may sound like a silly rule, but it really does help if you phrase your question as a question. (With a question mark and everything.) What is it you're trying to calculate, and what is given? Do keep in mind that robot design isn't on topic here, so make sure your question asks about the underlying physics, not about mechanical issues. For other related questions you might want to check out Robotics. –  David Z Mar 20 '13 at 5:43
Hi David, thanks for welcoming me. I tried to break this down into a much more generalized question, sorry for the confusion, I'm struggling with the proper terminology to describe this problem, hopefully the picture helps. Thanks again for the support. –  Cody Smith Mar 20 '13 at 6:05
@CodySmith So as I understand, you are trying to find out the direction of motion of your robot given the "forces" applied to it by every wheel. Right? All you have to do is find the resultant force. Here is the wiki link that gives you the basics on the subject en.wikipedia.org/wiki/Net_force (is this what are you looking for?). Hope this helps. –  Leonida Mar 20 '13 at 6:21
There isn't a unique solution actually. A horizontal vector has two components, but you have three independent wheels. So there is an infinite family of solutions. –  Michael Brown Mar 20 '13 at 7:46
@CodySmith John Rennie used the no torque constraint below. Come to think of it, depending on your needs, that sounds like a pretty good one. –  Michael Brown Mar 20 '13 at 13:19

This shows your system and the forces acting:

I've chosen my axes to make $F_A$ act horizontally; in general your object won't be aligned like this, but you just have to rotate your axes before doing the calculation. The requirements are that the forces $F_A$, $F_B$, and $F_C$ add up to the required force $F$, and that the object doesn't rotate as it moves i.e. that the net torque is zero. This gives us three equations in the three unknowns:

\begin{align} F_x &= F_A - F_B cos(60) - F_C sin(30) \\ F_y &= -F_B sin(60) + F_C cos(30) \\ 0 &= F_A + F_B + F_C \end{align}

or more simply:

\begin{align} F_x &= F_A - \frac{1}{2} F_B - \frac{1}{2} F_C \\ F_y &= -\frac{\sqrt{3}}{2} F_B + \frac{\sqrt{3}}{2} F_C \\ 0 &= F_A + F_B + F_C \end{align}

So for any given force $F$ you just have to solve those three simultaneous equations to get the forces on the drive wheels. After some quick scribbling I get (I don't guarantee there are no errors in this!):

\begin{align} F_A &= \frac{2}{3} F_x \\ F_B &= -\frac{1}{3} F_x - \frac{1}{\sqrt{3}} F_y \\ F_C &= -\frac{1}{3} F_x + \frac{1}{\sqrt{3}} F_y \end{align}

-
Just fyi you can use "\sin" and "\cos" for sine and cosine functions in TeX. –  joshphysics Mar 20 '13 at 12:29
The following Mathematica snippet verifies you have the correct answer: eqs = {Fx == Fa - Fb Cos[60 [Degree]] - Fc Sin[30 [Degree]], Fy == -Fb Sin[60 [Degree]] + Fc Cos[30 [Degree]], 0 == Fa + Fb + Fc}; Solve[eqs, {Fa, Fb, Fc}] // Simplify –  Michael Brown Mar 20 '13 at 13:17
@MichaelBrown: thanks, I probably shouldn't feel especially pleased I can still do elementary simultaneous equations, but I do :-) –  John Rennie Mar 20 '13 at 14:06
@JohnRennie I know the feeling :) Heck, I get chuffed sometimes when I can do basic arithmetic correctly in my head. I find it oddly hard for some reason. –  Michael Brown Mar 20 '13 at 14:13
Wow that was easier than I thought. I guess it never occurred to me to align the axis, thanks so much man! –  Cody Smith Mar 20 '13 at 19:20