1640 Sab-BOT-age 2020 CVT Swerve Module Reveal

1640, Sab-BOT-age, is proud to present our 2020 CVT Swerve Module.

Our 2017-2019 CVT swerve was designed to add CVT functionality on top of our standard swerve module, which has only seen iterative changes since its inception in 2010. While this provided us a lot of success and the base swerve module was robust, proven, and reliable, it provided for a suboptimal implementation of CVT. Over the last 2 years, we have spent countless hours redesigning our swerve module from the ground up. Our new module borrows many great features from 2910’s MK2 and MK1 modules and combines them with an integrated CVT. This amalgam of the best features swerve has to offer will greatly enhance the performance, precision, and reliability of our swerve drive trains.

-Integrate CVT as core feature of design vs treating CVT as an add-on to an existing design

  • Low possibility of V-belt misalignment with pulleys causing thrown belt
  • Increases reliability vs older & more fragile 3D-printed servo arms to actuate CVT

-Achieve a near-linear relationship between servo angle and CVT ratio (see CVT description below)
-Decrease height of module to reclaim important real estate on the robot
-Integrate the modules into a Versaframe chassis as huge gussets.
-Reduce weight of module using non-standard materials and 3D printing
-Use NEO Brushless Motors for both Driving and Steering

We utilized many of the same standard COTS parts from other swerve modules, 3D printed parts as much as possible, and G10/Garolite plates for further weight reduction. The G10 is easy and fast to route for our team though we did implement a new vacuum system on our router to protect our lungs. The most significant weight reduction from 3D printing is found on the wheel supports. They are reinforced with 2 10-32 bolts inserted vertically into each support. Initial testing of repeatedly crashing the swerve modules into a barrier (à la 2019 ball corral) has yielded no failures.

Free speed: high -> low gear 16ft/s -> 7.5ft/s
1.029->2.25:1 CVT range + 26:18 gear reduction + 4:1 bevel gear reduction
Total reduction: 5.95:1->13:1
Steering reduction: 24:1 -> 4rps

Weight: 6.4lbs
Size: 7.4’’ x 5.75’’ length x width
1.5’’ Ground to bottom of wheel mounts
3.6’’ Ground to bottom plate
6.1’’ Ground to top plate
8.45’’ Ground to top of NEO

True drive speed sensed by AMT-102 encoder
Steering sensed by 6127V1A360L.5 hall effect sensor connected using plastic


The main feature of this swerve module is the integrated CVT. For anyone who needs a refresher in how CVT works, the gist is that you have a variable diameter pulley that you can control to change your gear ratio. In previous years we used external 3D printed arms controlled by a servo to introduce tension to the belt and alter the gear ratio. This was hard to control, unreliable, and delicate. This year, we instead move the CVT pulley itself to introduce tension and vary the gear ratio. In the video you can see the NEO and CVT pulley are mounted to the “pie gear” which acts as a curved rack to interface with the servo’s pinion. The servo precisely moves the CVT assembly to introduce tension. This opens and closes the CVT pulley and allows us full control over our gear ratio.

CAD Download


Always amazed to see what 1640 does with heir swerve. This looks great!

Very cool module! What are the wheel forks printed out of? They look pretty yellow to me so I assume not on a Markforged?

You assume correctly. Just yellow PETG on our team printer.


I’m amazed that you’ve actually run this. I never in my wildest dreams would have thought a CVT swerve is a good idea.


For a few years now. I remember the days when people would talk of “Unicorn” swerve and how unachievable it was to have fully continuously rotating modules but now it’s the norm.


This is awesome!

Counting teeth, it looks like the servo needs to rotate pretty close to one full rotation to travel from one end stop to the other. Is that a continuous rotation servo, or is it just one that that has a lot of travel (like a sail winch servo or something like that)? What servo are you using? Do you need a position sensor on the motion of the drive motor “pie gear” or do you just set the endstops in the code and then command a proportional position between those endstops?

Did you need any sort of bearing on the “pie gear” or is the motion relatively low friction?

It looks like you have another pie shaped piece on the bottom of the main plate to help keep the “pie gear” from lifting off of the plate. Did you need any special treatments to keep that from binding up? Or is that bottom plate wide enough to spread the load?

How do you integrate the CVT reduction ratio into the code? Do you run at the lowest ratio while you are accelerating until the motor speed maxes out and then start adjusting the ratio? Or do you adjust the ratio proportionally to motor speed to “stretch” the power curve of the motor? Or is the speed ratio controlled by the drivers?

Can’t wait to see this perform.

In the past they have used our Smart Robot Servo, which is 270 degrees of angle control.

I am also stoked to see this module in action, it looks awesome!


I really love the design that went into this module. It almost gave me the illusion that doing CVT is simple! I noticed that there are two encoders on the module, is this to circumvent backlash from using built-in NEO encoders? Also, are the wheel forks handling sideways loads well too, like being rammed from a defense bot traveling perpendicular to the module’s direction?

I’ve been drooling over your CVT’s for a while now, and seeing them IRL at champs just about made my whole year, but wow have y’all outdone yourselves! I’m loving the use of 3D printing too. TSIMFD

1 Like

Will the 3dp parts hold up? We are about to find out. Our first real test was to load up the test bot to competition weight and ram the ball coral from this year at full speed. About 14 to 15 FPS. This is a very violent collision. So far so good. We use 4 " wheels. I wonder how 3" wheels that some are using would take this violence. As to side impacts, we have not tested this yet. The Pie gear slides on the G10. WE initially had planed to have .25 bearings between the gear and plate. Found that they were not needed. We use 260 degrees of rotation with Rev or gobilda servos.
With CVT we have to measure the wheel distance and velocity after the CVT reduction. We also have the neo encoder to measure motor velocity. The absolute encoder on the steering allows the wheel angle to be known at power up. We could use the absolute encoder at power up and then use the steering neo encoder for steering but, currently we run the steering pid with the absolute encoder on the Roborio. The CVT control is a work in progress. As mentioned above there are several ways to handle it. We are currently geared high and have less low end than last year. The module is set up for a fast open field game. We can change the intermediate drive gears if we need more low end for a tight field game. Variable pulleys need to be moving fast to work well. So they are the first stage of reduction. This means we must be in low position until the motor is up to a fast speed. Then the pulley can be moved to high gear positions. We have that working.(kind off) what we have to figure out is how to down shift. If the robot is flying across the field and hits another robot we need to see this and down shift. We have ideas, but the whole dynamic shifting is not implemented yet.
The big thing about this project was the us of 3dp in the design process. 3dp allows fast iteration.

Good info.

When you are in the lowest gear ratio position with the CVT (geared for 7.5 ft/s) and with the torque of the 4 NEO drive motors, you should have a massive amount of pushing power/acceleration. I can’t imagine you would need to gear it much lower than that.

I can imagine that the transit time for the servo is tricky to deal with. I can imagine that if you wait until the motor speed gets too fast before you start “shifting” that the motor would max out before you got to the full end of the travel. Your example about sudden stops and wanting to “downshift” quickly is an interesting one I had not thought of.

Can you shift the CVT ratio when the robot is standing still, or do you have to have at least a small amount of drive motor speed to get the belt to shift on the CVT pulley? I would assume that you might be able to anticipate at least some of the cases where you would come to a sudden stop and the drivers would react by backing off on the sticks. You could probably use that driver reaction as your cue to start shifting such that by the time you did come to a stop, you would already have shifted at least part of the way.

My mind is already spinning with how we might integrate something similar to this design into our module. Maybe this will be an offseason project for us.

I take that it is a delicate balancing act to get the spring tension on the moving pulley right. Too loose and at high ratios (low speed) the belt might slip, and too tight and it will want to move to a lower ratio on its own. Or is it not that sensitive?

Very nice, but not unexpected from 1640.

1 Like

Not quite. You are correct that the spring creates the clamping force to create the friction between the V-belt and the pulley. However, changing gear ratios is accomplished by adjust the center to center distance between the two pulleys. When you make the C-C distance larger, the V-belt wedges the two flanges of the CVT pulley apart, pushing against the resistance of the spring. The “pie gear” that they refer to is what moves the motor with the CVT pulley attached closer to or further away from the other pulley to adjust this speed ratio.

You want the spring tight enough so that the belt does not slip at max torque conditions. If you make it too tight, then you need more force to increase the C-C distance. So there is a balancing act there. But it is not that delicate. I think this particular model of CVT pulley comes with 3 different spring stiffnesses. I’m not sure which one 1640 uses.

I can only imagine that it will turn into ‘I never in my wildest dreams would have thought a CVT differential swerve is a good idea’, given how cleverly this module is done. But lets hope that day is far away.

as a cad and fabrication person, this will forever inhabit my dreams and nightmares.

1 Like

@Carlos1425 I believe this is your area of expertise

1 Like

Having seen 1640’s swerve development over the years and holding these modules in hand at Ramp Riot and at our own shop, I’m really excited to see what this finely tuned system will be capable of this year and beyond. I heard earlier in the offseason that 1640 was designing another module from the ground up, but I definitely didn’t expect it to be this significant of a change.

If I recall correctly, this modules is lower, lighter, significantly less parts, easier to manufacture, and cheaper than the other modules 1640 has made in the past, truly highlighting the constant-improvement/iterative process that the best teams thrive on.

For the uninitiated, Sab-BOT-tage’s, “Swerve central,” is probably the largest collection of information on the design of swerve that exists at the moment, and I highly suggest taking the time to read through it. The time and effort of recording this alone is worth a mention.



No special treatment to prevent binding. Like gdeaver said, we initially planned on having ball bearings on the top under the pie gear and bottom side on the pie shaped piece but ended up not needing that. The PETG slides great on the g10 with no binding issues.

Full CVT ratio is definitely not controlled by the driver, that would be too much fine control to award the driver for very little reward. We do (in 2019) allow the driver to go into forced low-gear mode and then go back to full shifting mode.
The idea is to mimic a car and keep the motor in peak power at all times and use the CVT to maintain the optimal gear ratio to do that. We have that “kind of” working and are improving it as we speak.

Agreed. The only reason we would gear it lower is if the top speed of 16 ft/s is completely unnecessary in next year’s game and we want to shift the whole thing to something like 6/14.

You can move the servo while the robot is still but the gear ratio won’t actually change until you start moving the robot. The CVT pulleys require some motion to open and close.

@wgorgen has it right, @DonRotolo. The spring strength just dictates how much force is required to increase the C-C distance and go to low gear. I am not sure of the exact specs but we use the blue spring version which is stiffer than the white spring version.

That was the goal with this and I’m really happy we were able to achieve it. Seeing a few CVT gearboxes pop up on CD this offseason was awesome but hopefully now some of those teams can take some inspiration from this improved CVT over the servo arm version.


We printed multiple pie gears, servo mounts, and most importantly printed multiple plates to have a a new version ready to test each meeting. We even printed the bevel gears while waiting for shipment from China. It hugely sped up development of the swerve this summer.