Calculate Speed of a Non Standard X Drive

I’m well aware that for a standard X drive with 45 degree angled wheels, the forward speed of the robot is theoretically 1.41 times faster than the speed of a tank drive with the same wheel size and rpm.

But what about with an X drive that does not have its wheels angled at 45 degrees? I’ve been experimenting with an angle shifting X drive in CAD, and I was curious, how would one calculate the theoretical forward speed of an X drive with a variable wheel angle? I can’t seem to find any resources on this, since everyone just seems to know that a standard 45 degree x drive moves at 1.41 times as a 0 degree x drive (aka tank drive)

For discussion I’m considering an x drive where the wheels are facing perfectly forward to be 0 degrees and when the wheels are facing perfectly inwards (perpendicular to the forward direction of the robot) to be 90 degrees.

From experience I know that as the angle of the wheels nears 90 degrees, the theoretical speed of the robot increases. (I once made a little rig with angled omni wheels and found that when angled shallower than 45 degrees, the rig moved faster forwards than when the wheels were angled to be 45 degrees)

So basically my question is, how does one figure out the theoretical forward speed of an x drive just from a wheel angle?

xish drive
this is an example of an x drive with an angle greater than 45 degrees.


It doesn’t answer your question, but if you haven’t seen it, this was sort of fun.


yeah I’ve seen that. pretty cool, I’m attempting something similar except with a variable angle instead of just 0 or 45 degrees, and powered by a fifth motor instead of pneumatics.

You break up the total velocity vector of each wheel into component parts and sum the parts. The direction and magnitudes of the resultant vector can be derived from trigonometric functions


@Kyle1 it is your time to shine

The multiplier will be secant(wheel offset) where 0 is straight forward wheels. Secant(90degrees) is undefined, which makes sense.


I would calculate it using force vectors.

you sure about that?

because secant(45) is 1.9, but we all know that 45 degree X drives have a speed multiplier of 1.41

not entirely sure how to do that tbh.
are the velocity vectors the two sides of an imaginary right triangle with the wheel as the hypotenuse?

1 Like

You’re on radians lmao. No worries, just type degrees after or switch your mode.


ahh lol google calculator defaults to radians for some reason.

1 Like

Here’s a graph showing how the multipliers for speed (red) and torque (blue) would change depending on wheel angle, with 0 degrees being parallel to the direction of motion.

Screen Shot 2021-01-12 at 11.35.50 AM

A cool demo with a robot like this would be to simulate a continuously variable transmission, with the wheels starting a 0 degrees when the robot begins moving and gradually angling towards 90 as it picks up speed. How high could you get that speed multiplier before there isn’t enough torque to sustain motion? Would be fun to find out.


I get the feeling that as the angle gets closer to 90 degrees, the actual tolerances in the system will cause issues before the power losses from friction. Because if one wheel is angled at say 70 degrees, and another wheel is angled at 72 degrees (just due to slop in the angling system) then the two wheels would be trying to pull the robot forward at significantly different speeds.

a way you could fix this is have a really precisely placed hard stop at the greatest angle you would ever go, that way when the wheels go that aggressively angled they all have a very close angle.


@Xenon27, I think you will find these two discussions informative and interesting:


Exactly right…
Here’s a better visual –– just imagine that arrow is the output velocity of one of the wheels and the dashed lines are it’s component parts. The angle can be arbitrarily picked.

I wonder if you could use Calculus and do an optimization problem based on the constraints of the motor outputs. You would solve for maximum speed based on the wheel angle when the motors are operating at maximum efficiency. Maybe there are too many variables for one problem, but it can actually be quite simple when the other parameters are defined.


This is how you do it.
secant is 1 divided by the cosine of x