Variable angle holonomic drivetrain / shifting X-drive / shifting X drive

Here is my attempt at an angle shifting drivetrain. A motor in the back powers a chain system, which is attached to a gear train on each side of the robot. The robot had to be asymmetrical in order for each wheel to rotate the in the correct direction. Overall the project was lots of fun, but far too complicated to be competitive. I experimented with angle shifting increments, but ultimately decided that 0, 45, and 90 were the most useful angles. Theoretically, it could drive faster with a 67.5 angle (how I originally programmed it), but the wheel casing was too wobbly. The wheels often de-align upon accelerating because the momentum in the frame pulls the gears out of mesh. You can see this in the first image, where three wheels are in X mode and the back left wheel is facing straight. This issue is easy to fix, but a real pain when driving or demonstrating.
Conclusion: fun, but not useful.

Edit: further analysis

This project was inspired by:

This project is also similar to:

VID_20220515_152829 VID_20220515_152719 VID_20220515_152511 VID_20220515_152424 VID_20220515_152247


Reminds me of this

and the AURA drivetrain as well.

Honestly I feel like this would be good when combined with a PID control for the shifting mechanism


Great work! I’ve seen this widely used on FRC robots. They call it a swerve drive. They also have a lot of bevel gears to position both of the motors vertically.

1 Like

It’s sort of close to this, but each wheel moves together to effectively change the angle of the holonomic drive, to either increase torque or speed.


very cool! you should document the speed of the drive at different angles, to demonstrate how the shallower the angle of attack (closer to perpendicular to the direction of movement) the faster the drive moves in that direction, which is pretty counter-intuitive for people that don’t know the math behind it.


Taken from the 2114A video:

(note this is with V4)


I imagine that past a certain threshold, the inefficiency and inherent friction of the system imposes a soft limit on how fast you can go. Because otherwise if you were to get infinitely close but not reach 90 degrees, you would keep moving exponentially faster. knowing around where that threshold is could be useful information if people want to experiment with non-45 degree x drives


Yes, I linked both mentioned projects in my original post.
Could you explain for me (in dummy terms) what a PID is?

I believe swerve drives point each wheel in the same direction, whereas X drives point each wheel in opposing directions, which requires the use of omni wheels. This project is closer to an X-drive or holonomic drive, but the shifting ability between tank and holonomic drive gives it it’s own category. It seems like “shift drive” is an unused name, so I think that would be a good name for it.

I experimented with 3, 2, and 1 positions between 0 and 90 degrees, and decided to stick with only 1, which is 45 degrees.

The first version had 3 intermediate positions, being 22.5, 45, and 67.5, degrees. This was neat because I could slowly increase my forwards speed and work up to 67.5 degrees, or (optimally) 2.613 times faster than tank drive (1x, 1.082x, 1.414x, 2.613x speed). Realistically, I’m assuming it never reached 2.613x the speed, or 522.6rpm on a tank configuration.

My second version had 2, which were 30 and 60 degrees. The resulting speeds were 1.155x and 2x faster than tank drive. The 30 degree configuration was nice to drive forwards because it was a little faster, equaling the speed of a 231rpm tank drive. The outward and inward forces on the weak pivot points were minimal, making it great to drive forwards and backwards. Strafing however was uncomfortably fast in this configuration. The opposite was true for a 60 degree configuration - good strafing, but rough forwards and backwards movement.

My final product has one position between 0 and 90, which is 45 degrees. This results in 1.414x the speed, equaling the speed of a 282.8rpm tank drive. It was uniform in speed for both strafing and forward/backward driving, and had a casual diagonal speed - optimal for a holonomic drivetrain. However, both strafing and forward/backward movement gave the pivot points a hefty bit of stress, resulting in misaligned wheels. This configuration did not bounce or undulate like the more extreme angles did, but it had plenty of odd and unintended movement going on. The weak pivot points, bulky and faulty mechanical systems, high riding frame, and heavy bouncing which caused nearly every screw to loosen were major setbacks. Because of this, I conclude that a basic, nonshifting 45 degree X drive is best for those who want to strafe.
If you don’t care for strafing but still want to be extra, a simple 3-4-5 triangle tank drive is best for those who want to be extra but don’t care to strafe. This results in a 36.87 degree angle and a speed of 1.25x faster than tank drive, or equal to a 250rpm tank drive. Additionally, the pushing power should be near the same as a tank drive.


Here is my block code:
shift-strafe_limit.pdf (318.1 KB)

1 Like

lol isnt this just a swerve drive, nightmare to code



This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.