Snake Bite Swerve

This project was a design collaboration between Brad Johnson (@LightSpeedIII) of FRC 1086 and myself (Preston Childress of FRC 401) to help us familiarize ourselves with OnShape. We wanted to design a low cost, small footprint, lightweight swerve module that we could play with and test in the offseason. We took a lot inspiration from previous designs by John Gallagher, Nick Coussens, and lots of other designers.


Bill of Materials and Gearing Calculations


  • Dimensions

  • Drive Gearing

    • 15.1 ft/s free speed (10:17 spur gears, 15:45 bevel)
    • 16.6 ft/s free speed (11:17 spur gears, 15:45 bevel)
    • 18.1 ft/s free speed (12:17 spur gears, 15:45 bevel)
  • Steering Gearing

    • 444 RPM free speed (1:5.23 Ultraplanetary, 19:90 GT3 belt)
  • Weight

    • 3.388 lb with aluminum plates and billet wheel
  • Cost

    • $445.18 total cost to purchase for one module
    • $1883.54 total cost to purchase for four modules
    • $1526.87 BOM cost for four modules


  • Minimal machining - two plates and two shafts, all other parts COTS or 3D printed

  • Access ports - we felt that quick and easy maintenance was important, so the design allows access to all motor mounting screws, grease ports for both drive gearing stages, and access to the large bevel attachment screws all without any disassembly.

  • Bumper protected - we decided that it was important to limit module height as much as possible to ensure that the bumper protected it from other robots, game pieces, and field elements. At 6.916” in height the module is fully within bumper zones from all recent FRC games.

  • UltraPlanetary Output Shaft - By default the Ultraplanetary output allows 5mm hex output or use of the bolt circle, neither of which were ideal for a tinyl 3D printed pulley. Taking inspiration from Nick Coussens’ inverted 2020 Summer? Swerve, the module instead uses a custom output stage with an integrated pulley and bearing mounting geometry. To ensure that the printed part doesn’t break at a layer line a captive 5mm hex shaft is added that extends from the bottom bearing all the way up to the Ultraplanetary spline.

  • Single Spacer - The use of small radial bearings to constrain the module’s rotation originally necessitated eight spacers to position bearings on shoulder bolts, switching to a single spacer part combined all of the spacers into one, enclosed the module, and retained the bearings so that they won’t fall out of place if the module is disassembled

  • Thrust Bearing Design - Needle roller bearings and supplementary radial bearings are used in lieu of x-contact bearings to permit simple flat plate designs. Shoulder bolts used with the radial bearings are sized to allow approximately 0.003” of preload on the thrust bearings.

  • Easy to replace - Replacing a wheel assembly on the robot can be done by removing the four 8-32 Torx bolts retaining the fork bottoms, removing the four 10-24 shoulder bolts allows removal of the entire lower portion of the module, and removing the entire module from the chassis is as easy as removing six 10-32 bolts.

  • Non-handed design - All parts in the design can be used for left and right handed corners thus requiring fewer spare parts.

  • Hall effect homing - The module uses an embedded magnet and the new AndyMark Hall Effect Sensor to zero the module on match start and then uses the relative encoders in the Neo and Neo 550 for control during the match.

Planned Future Improvements

  • 3D printed generative design wheel
  • Switch to dead axle
  • ⅛” aluminum sheet metal based design for further weight reduction
  • Further reduce cost



I second this, neat indeed


I like the rotation bearings being lil, that’s a really creative way to do it, and helps with some cost and availability concerns with bigger ones.

Really clever design overall, good job my dude.


def this


that’s pretty cool, gents!


what’s the ratio for the belts that turn the module?

The belt stage is 19:90 on a 97 tooth 3mm pitch GT3 belt.

1 Like

cool thank you!

This was a very fun project to work on. Looking forward to improving the design further. REV or AM, hmu


This is a really great design, good work! I love how compact and simple it looks. Can I make a few suggestions?

  • The needle bearing you use below the lower bevel gear shaft has no inner race, so there’s nothing to take any thrust loads. The shaft will ride on the outer race of the bearing, and eventually cause it to spin in the plastic housing. Could you sneak in a tiny little thrust bearing, or else switch to radial bearings here?
  • How much cost do you save with the two large thrust bearings and small radial bearings compared to a single x-contact bearing? I’m a little unsure about having the radial bearings run against the soft 3D printed plastic
  • Consider widening the main plate just a little to capture one or two more rivet holes. I tried to sketch the reasoning below. Currently, your upward loads from the wheel (blue circle) are cantilevered from the supports by the distance shown by the blue arrows. This puts a bending moment on your main plate. If you widen the plate to the orange circles, the overall dimensions of the module wouldn’t change, but that cantilever distance would go to almost zero.

Great points!

The needle bearing you use below the lower bevel gear…

Theoretically for that little needle bearing, with slightly better spacing, shouldn’t see any thrust loading, nor rubbing, since the thrust loading from the bevel gears is directed upwards into the ball bearing at the top of the shaft.

How much cost do you save with the two large thrust bearings…

Directly comparing the thrust bearings + radial bearings vs an x-contact in price would suggest that a singular x-contact is cheaper. That being said, in order to use an x-contact, some amount of milling is realistically necessary. One of our goals was to minimize necessary advanced machine work, which is allowed by that design choice. Theoretically the top and bottom plates (sans lightening pattern on the top plate, luckily that’s not necessary) can be produced satisfactorily with common shop tools (drill-press, band saw, etc.) and a pattern pasted on the metal.

Yeah, the radial bearings are a bit experimental. I’m not anticipating very large loads on them, since the load (depending on wheel pose) should be shared between several different bearings, but it remains to be seen if this will be sufficient in testing. We’re looking to suggest PolyLite brand ASA for the material properties since it’s got a much greater Young’s than onyx and still maintains comparable flexural strength and impact resistance.

Consider widening the main plate just a little…

Makes sense. I’ll see that we make that improvement


If you have a printer capable of printing fairly exotic materials, but no CNC router, your money is better spent on a router than a swerve drive. It pays for itself in a couple years.
You could also just print the bearing interfaces similar to what you’ve done here already, by adding printed flanges and such. This could even shrink the module slightly and reduce part count in the process.


How do you plan to zero the module azimuth on match start or any time the robot is started? Will all wheels need to be rotated by software until the hall effect sensor on each is triggered to calibrate position? Do you have some feeling or data on how repeatable the hall effect trigger would be for this purpose at rotation rates you would like to use for initial calibration? Any amount of misalignment is the enemy with swerve.

1 Like

Yes, the wheels would rotated until the hall effects trigger. This could be done manually when placing the robot on field pre-match to ensure no time is lost during auto. Ideally the entire zeroing sequence would be handled on the Spark Max, there’s a card in Rev’s trello board for this: Trello

Until that feature is implemented we’d be running RIO side, we typically run our control loops at 10ms so if we needed to re-home a module after a power loss during a match we could rotate the module at 16 RPM and ensure the module is within 1°

We considered using a Lamprey encoder but we’re reticent after hearing about calibration issues with them. We think the hall effect will be sufficiently repeatable, but part of doing this during off-season was to ensure it wouldn’t hurt in season performance if it doesn’t work out and that we’d have time to test this and iterate.


Just spitballing on the encoder design:

What if, instead of a regular magnet and a hall effect switch, you used diametrically polarized magnets and a CTRE Mag Encoder? The trick would be to use lots of magnets, each clocked at a slightly different angle. The Mag encoder could tell you when each magnet is under the sensor, and what angle it represents. With more magnets, you’d reduce your calibration time.

After bouncing this idea around with friends, someone also suggested using something like the Rev colour sensor and a vinyl gradient colour ring. I don’t know how accurate it would be, but it would be cheap!


If you are intending to use the colour sensor to detect a reference position for zeroing the incremental encoder, it should be possible to use a sharp transition, say black to white.

1 Like

People have used hall effect sensors for zeroing before with no issues. There was at least one very good team who used them in 2019 and still have a great auton despite zeroing at the start of each match (whose number I cannot recall). Heck, teams have used regular mechanical microswitches for zeroing their modules without issue.

I opened up the CAD and was pleasantly surprised by the bearing stackup. The thrust bearing setup wasn’t obvious from the section view, but I understand the loads much more clearly now. The large printed bearing holder for the 8 small bearings is very cleverly designed to allow supportless printing.
That said, even drilling a 2.5" hole is going to be tiring at best, using bimetal holesaws. You can source 60mm ID thrust bearings for $2 on eBay, but you are most likely better served by looking at 6812 or 6813 bearings. These have similar ID/OD to the thrust bearing setup and can be had for under $10 a pop. The downside is the need for a precision hole, but because of the thickness, you can always print the bore for bearing and anchor the print into the less-precision hole you currently have. Using a single bearing reduces part count and complexity, which is helpful if it’s to be made by hand.
As far as the other mechanical aspects of the swerve go, everything looks good, especially the lower part of the module. Maybe a tensioner for the belt if it’s designed to be made by hand.


Very nice design.

Looking at the BOM parts list, it looks like the wheels are 3" wheels. I’m not a fan of those smaller wheels as FRC fields often contain items that would be challenging for small wheels to drive over. But this design looks like it would be easy to convert to 4" wheels if needed.

I’m going to second this and add to it just a bit.

In joint design, we call the moment reacting loads that Nick was referring to as “Heel and Toe” loads. Increasing the spacing between the “heel” and the “toe” lines will reduce the loads associated with reacting the moment.

You may also want to consider picking up the corner frame hole as well. This will also help to increase the heel to toe spacing which will further reduce the loads. In addition, the base plate is taking the place of the corner gussets for the frame and grabbing that corner hole gives you a bit more structural connection to the frame and increases the gusset effect for the matchboxing mode of the frame. This is probably less important than the change that Nick suggested, but it is a simple change that will improve the structural integrity of the frame as well as the integrity of the joint between the module and the frame.


ASA is a close relative to ABS, one of the most common plastics, and slightly less demanding to print too, even though some blends have (slightly) nicer material properties than ABS.

That’s a particularly interesting idea, since the strip could be continuous, any position could be used to seed the 550’s encoder successfully, but I am curious what sort of spatial resolution can be expected, since I’d imagine that’s the limiting factor on how good the seed value is.

Good to know

All printed parts are designed with minimal supports in mind, unfortunately not every part is able to be completely support free like that one

What’s nice with the thrust bearings and their associated washers here is that it makes the hole diameter not a critical dimension, so cutting that hole out with a jigsaw would be sufficiently precise, as long as the minimum diameter is reached. I am intrigued by the printed anchor for an x-contact, and this may be misplaced or misguided, but how little material is there to hold those bearings gives me second thought, but I’m guessing since the diameter is large, even though the D-D is small, the area is still large enough. I’ll have to look and think about it

Yeah, frankly the biggest reason other than freerealestate.gif for not taking the corner is that neither SDS or TTB take the corner hole, only Armabot Microswerve and AndyMark Swerve and Steer took it of the COTS options.