### Author Topic: 4 Wheeled Omniwheel Robot Math!  (Read 1312 times)

0 Members and 1 Guest are viewing this topic.

• Supreme Robot
• Posts: 611
##### 4 Wheeled Omniwheel Robot Math!
« on: July 06, 2011, 07:21:55 PM »
First off, I love math.

Secondly, I want to bounce my idea off of you guys.  I've obviously never built an omniwheeled robot, but I have read admin's tutorial.

Basically, rotation aside, I'm treating movement as vectors.  X and Y.  Without rotation the movement can be thought of as exactly that.  I can get movement in ANY direction simply by choosing an X and a Y value.  The motors opposite of each other would move at the same speed (in opposite directions).  Well, by opposite directions I simply mean one motor will "technically" be spinning reverse of the other, yet the wheel movements will both be forward.

Here's a quick drawing.

I've labeled the motors a, b, c, d.  I've decided on their "forward" and "reverse" movements based on the coordinate grid/plane.  Up is +, down is -, right is +, left is -.  Easy enough, right?  So the movements can be further broken down (or rather combined) into x and y and eventually velocity with the Pythagorean theorem.  x^2 + y^2 = velocity^2

Ok now is the fun part.  Rotation!  What if I wanted to move up/left and rotate clockwise at the same time?

What I've done is labeled a "positive" and "negative" rotation.  Positive is clockwise.  Then to rotate "positive", I need a+,b-,c-,d+.

So to calculate the speed of each motor individually I'd use something similar to the following equation.

aspeed = +-sqrt(velocity^2-y^2) + RotationSpeed.
cspeed = +-sqrt(velocity^2-y^2) - RotationSpeed.

Similar equations for b and d speed.  RotationSpeed is simply an arbitrary number for how fast I want it to rotate.  It's also simple, all of the motors spin at the same speed to rotate at a given speed.  The net speed of the motors might be different, but the CHANGE in speed will be the same for all of them (with sign differences of course).  None of the individual motor speeds can be greater than some constant "MaxMotorSpeed"  If it is, then the other speeds need to be scaled back proportionately until the individual speed is <=100.

Ok, I'm going to leave it at that so I don't make it too complicated for now.  Do my ideas look right?
« Last Edit: July 06, 2011, 07:28:37 PM by corrado33 »