Mucho Cheapo Swerve - $20 Test Module

Introduction: Mucho Cheapo Swerve

I recently put some time into designing and building a new swerve module, mostly for fun, but also as a learning exercise for myself. I’m pretty happy with the results.
This post may get a bit long-winded in its discussion of the process, folks are welcome to skip to the end if they’d like.

The main idea was to build a module that I could fund a drivebase for out of pocket, and that my team could use as a demo tool at outreach and recruiting events. The core of the experiment is a cheap module that can be run from an FTC ecosystem (REV expansion or control hub), and would be thus limited to 4 motors per drivebase. Using mostly 3dp parts, a custom thrust bearing, and the same m3 bolt for the majority of the hardware needs nets a quite affordable BoM, roughly 20 bucks per module without actuators (including filament needed). The with-actuator cost jumps up to around $113 when the motor, servo, and encoder are factored into the purchase.

Power Transmission

Drive is transmitted through a dual stage reduction, including a printed spur gear pair and a printed bevel gear pair. I haven’t had issues with the durability of these gears, mostly because the TPU tread and light drivebase don’t really make enough traction to cause the torque and shear load you’d need to break something. I would definitely switch to COTS gear options if this needed to be used on an actual robot, or any system that weighs much more than 30lbs, but a use case like that defies to the original intent anyway. :stuck_out_tongue:


Steering is done by a continuous rotation servo, and monitored by a REV thru-bore encoder. A cam-actuated limit switch is included optionally for an absolute home.

I wanted to experiment with new construction techniques, specifically with TPU belts for steering. The prototype module I built used this, but I’m not sure TPU belts are the solution: they tend to suffer from skipping and impractically high tension requirements. However, they do well as a cheap prototyping option. This module should also be able to accept a COTS 70t HTD belt, as a recourse.

This module also experiments with a custom dual thrust bearing (as shown in the cross-section above), using 6mm airsoft BBs. This is integrated into the upper and lower portions of the module, and is sandwiched together using m3 bolts. I’ve yet to build a module using the BBs; the prototype I built initially used 1/4" Delrin balls from McMaster. The overall bearing concept seems quite solid though, and displayed pretty good lubricity even under high loads (from several directions). It’s definitely not as size efficient as an x-contact bearing or delrin bushing, but that’s to be expected.

Prototype Build Process - Images

This module has gone through 3 main iterations since it was first conceived, each focusing on making it cheaper and smaller. The final product could be made smaller still, but likely at the cost of cost; there’s a tradeoff.

Notable iterations during the process include:

  • Adapting to the servo output within the space constraints
  • Adjusting belt size and belt tension
  • Adjusting frame-mounting style
  • Adjusting tread style, moved to a split wheel design to make tread installation + printing easier

Below are some pictures and videos from prototype module construction this summer.

V1 Design featured a single-peice wheel as well as a different frame mounting solution

Playing with motion hot off the print-bed… swerve is cool!

Ball bearing assembly shown

Move to 2-peice wheel and dovetail tread connections

Servo horn interface prototyping: featured cut down m3 bolts and a printed mating profile

Motion testing w/o motor, pretty much as far as I got with V2 module testing

Conclusions and Relevant Links

I’m quite happy with how this design project went. I learned quite a bit, and plan to assemble a full drivebase with V3 modules for some software development… if I get a little free time this year.

I’ve got a couple ideas for module improvements in the future:

  • Change steering style to an internal ring gear, will help with module size and steering accuracy
  • Change integrated bearing style to reduce module size (low priority, size isn’t a huge concern for me)
  • Possibly replace captive nuts with heat-set inserts for greater strength and easier assembly/teardown

As a disclaimer, this module is not intended to be competition ready! This was purely an activity for me to get my feet wet actually building a swerve module design, and building some intuition for the challenges associated. I made this post to share the design and spark some discussion. If anyone wants to build this, they’re welcome to. It should be pretty accessible overall, especially if you already have some motors and encoders handy.

The CAD can be found here, and the BoM here. Questions and suggestions are welcome!

Oh, by the way, this module is yet un-christened: name suggestions are also welcome.


Great work! It may not be useful for most of the teams who read this, but you deserve kudos for designing something on your own to learn and experiment.

Send me PM, and I’ll send you a REV credit you can use if you want to build more of these modules.

Awesome Job!


Swerve PLAy-tester?


I’m not even sure where to begin here… Speechless would probably be a good place to start.

This looks like an amazing learning experience for yourself, and potentially a great resource for other teams. The design looks fairly sound on first look (talk about a well detailed post), and the cost you just can’t beat.

We have some students and mentors on the team currently interested in pursuing swerve purely as a learning experience and because of the wow/fun factor. The cost isn’t something we’re prepared to eat right now, especially not knowing if our programming team is up to the challenge just yet (walk before we can run kinda deal). That being said however… after seeing this design, I’d be much more open and interested in building a small chassis running on a spare set of FRC electronics and these modules for our students to get their feet wet.

One question I had after looking at the BOM is, why did you elect to go with the Adafruit servo over a REV smart servo? Any practical reason, or was this merely a cost saving measure?

Overall all, kudos to you for an impeccable design. Very impressive work!


This is awesome. Don’t stop building and designing things, you’ve got a real talent!


I haven’t noticed this in previous swerve design posts. Is this an original idea?

Would you continuously check the switch and reset encoders every time the switch is pressed? Would you create a routine during startup or by the press of a button to find the absolute home?

I really like the idea of a super-cheap swerve designed specifically for students to experience it and practice coding. Very well done.


It’d actually be PLA+y Tester. :smile:

I’ve been absolutely floored by the toughness and practicality Duramic’s PLA+, I think many would agree with me on this one.


Great! I’m glad to hear it.

It’s also possible to run a 2 module only “checkerboard” style drivebase, for even lower cost, if that’s something that would interest your team.

The main reason for this choice was cost and availability. Continuous rotation servos were pretty much the only actuator I’d actually have to order, and I wanted to keep the cost low. My understanding is that the REV smart robot servo can be used for continuous rotation as well, using the REV SRS Programmer.

Again, glad to hear your team is excited about the design!

1 Like

This is something I came up with a while back, but it’s certainly been done before. @Bryce2471’s Compact Falcon Swerve post uses a similar idea for absolute zeroing.

I haven’t put much thought into the control system yet, but I wanted to include an absolute limit as an option to compensate for brownouts or (more likely) belt skipping. This means the module would likely be zeroed with every activation of the limit switch, if that could be done in a way not too disruptive to driving smoothness.

Sweet, you just saved me having to spend a bunch of time making something like this that works enough to do testing. :+1:

I’d take a look at the expanding inserts WCP just started selling (or MCM) I know TTB has had great luck with them. I despise heat set inserts and not just because I have a nasty history of burning myself - they also smell awful esp when inserted into nylon.


Very interesting and well done. I’m impressed at your design, the physical implementation, and especially your documentation. That’s what takes this from a neat widget for yourself (which is pretty awesome) to something that becomes a real resource for others to learn from, replicate, and even evolve further to boost their knowledge.

Job well done!


The PLA+ formulations are a game changer - totally agree.

I’ve come to standardize on the Overture PLA Pro but others work great as well.

Toughness you can’t get with PLA but without the printing hassles and stink of ABS.

This whole project is how you learn things on your own - find a problem you are interested in enough to keep driving - even through failures and disasters as well as the everyday “that didn’t turn out how I wanted” - when you want to do something bad enough, you get the drive to push past those things and that’s where the real learning starts.

I concur with the other folks here - you’ve done a really solid job and I’m impressed.


So far I haven’t had a case of the knurled flanged press-in inserts pulling out on me as long as the hole is appropriately sized.

You can find just about any thread type on Global Industrial with a little searching. I recommend just buying a bunch in bulk, they’re way cheaper than I’ve found anywhere else and having them on-hand will allow you the freedom to use them all over on parts for your robot.

For reference, a pack of 500 10-32 inserts that will last you multiple seasons is $70, 0.14 per insert -


This swerve is super cool. Great job on all the documentation in your post, I love seeing that kind of stuff.


Forgive my ignorance, but how does one use these inserts? Is it just a press fit for any 3d printed part? Or, do you glue them in?

They are really intriguing.

I’d start here: McMaster-Carr

There are multiple types - flanged, non-flanged, reverse threaded - brass, aluminum, stainless, etc.

McMaster’s product pages usually specify a hole diameter and a counterbore to use for your 3D printed parts if you’re using flanged inserts. You may have to do a few test prints to get the hole sizes dialed in. For the knurled flanged ones that I often use, I just use a small arbor press or a pair of pliers to get them seated into my 3D printed parts. I know others just use a soldering iron for the heatset ones.

Driving a bolt into the inserts expands them and makes it dig into the plastic even further. Thriftybot used them on the original vectored intake wheels (6-32 size) and I have been using the 10-32 ones a lot lately on the 3D Printed Quick Build Clamping Blocks

They really take 3D printed parts to the next level in my opinion.


Could you elaborate on the advantages of these over heat-set inserts? I’ve had good luck using heat sets in PLA before, and am wondering if there are pros other than ease of insertion. This is not to say ease of insertion isn’t a big advantage, not having to break out the soldering iron would be nice, but an arbor press sounds like it could be even less practical, potentially.

Also - Anyone have name ideas?

1 Like

Honestly a solid pair of pliers work just fine for the knurled ones. Depending on the part geometry it may even be easier to use them over a press. I have the tiny Harbor Freight press at the house though and sometimes it’s faster to use that for flat parts.

The one time I tried heat insert ones I was afraid I was going to press too hard and melt through the part, maybe that was just me being inexperienced though.

More teams should know about the inserts in general though. They totally make 3D printed parts more useful.

That’s why my usual approach for heat sets is to get them about a mm proud of the surface with the iron and then use a spare sheet of steel I have sitting around to press them the rest of the way in and also act as a nice heat sink.


Yeah, they usually won’t melt through if you set your floor thickness to 3+ layers, but I could definitely see the concern with consistency. I’ve also occasionally had issues with heat set inserts not setting true to the hole’s axis, like on an angle.

1 Like

That’s what the flat plate of steel is for. It sets the height properly and also makes sure it’s square. It’s definitely not machinist levels of precision but you’re melting plastic and using a soldering iron… ain’t gonna get that level of precision.