2021 Winter Swerve

The latest iteration of my swerve design. Previous versions and more information on previous development can be found here.

STEP and SolidWorks files available here.

Main change on this version from the last is I made it longer to be able to make it shorter by moving the Ultraplanetary and NEO 550 out and down so that it is less exposed and to make the module shorter overall.

3.875 W x 5.25 L x 7.6 H

All gearing of the drive and steering is the same as the previous version, with the only difference being that the steering belt is 100T, changed from 94T on the previous versions.

Drive ratio is a 18:45 1.25 module bevel gear ratio, first stage off the motor is 10/11/12:28 20DP spur gear. Optional 9:30, or 13/14:26 also available.

Drive Speeds (free speed):
12.16fps (09:30 first stage)
13.27fps (10:28 first stage)
14.59fps (11:28 first stage)
15.92fps (12:28 first stage)
18.57fps (13:26 first stage)
20.03fps (14:26 first stage)

Steering ratio is a 5:1 (5.23:1 actual) UltraPlanetary Gearbox, followed by a 16:86 GT2 belt stage using a 100T belt. Overall ratio of 28.1:1, ~391rpm free speed.

Steering position is determined using a Lamprey Encoder mounted to the top of the pod. Local control to get to position can be done using the encoder on the n550.

Module is symmetrical, allowing for same parts to be made for left and right hand modules.


Wow! This design is really getting quite refined.

When are you going to build one?

It looks like the UP motor plate (the plate that mounts the NEO550 to the UP gearbox) is very close to the plane of your top plate. I wonder if there is a way that you could make a custom adapter plate (rather than the standard UP adapter plate) and then attach that custom adapter plate to the top plate of your module so that you would not need to use the standoffs at the bottom of the gearbox. It is probably thinner than your top plate so you probably would need to make it as a separate part, and mount it to your top plate. You might be able to bring the steering motor back in to where it was before footprint-wise.

I realize this is an outcome of the UP gear ratio, and at the end of the day, the steering code can handle it, but it is kind of annoying that this did not come out as a nice round number. In fact, multiplying by 42 (encoder counts per motor rev) also does not give you a nice round number.

Calibrating the Lamprey is really nice if you can command the NEO550 to turn a certain number of encoder counts to get to 45 degrees. With this design, it would be 147.6 counts. Alternating between 147 and 148 to get to the 45 degree increments is probably close enough for the Lamprey to get a decent calibration, but it would have been elegant if it had worked out to be a round number.

I played around with some different steering pulley ratios close to the one you have used but could not find a different ratio that gave a nice even multiple. 88:16 is awfully close, though. I think the 5.23:1 is rounded off. Maybe if you use the actual ratio you can find a pulley ratio that works.

Not that getting a round number is super critical, but it would be elegant…

1 Like

I already looked at doing this. I could just extend the top plate and replace the UP motor mount plate with the top plate, but I didn’t like the idea of having it only mounted off that end of the UP. The spacers cost nothing really and work well.


Looks great Nick! I especially like the compactness that the N550 gives it.

Working with one of this design’s predecessors, an opportunity we saw was to limit debris inclusion into the gearing - with this design it already looks a bit optimized in that direction but you might have room to have that printed cone project over the second drive gear to protect from debris. That would be cool to have it fully enclosed.

Also - and I know this will probably raise the height be a couple mms, but what about a through-bore encoder directly below the Neo? If the cone had a hollow hex sticking up it could still have the Neo’s 8mm going down through it while still acting as your abs encoder for orientation, right?

1 Like

The module would grow too large to wrap around the outside of the 28T spur gear; it would interfere with the frame structure. The easier way to seal everything off is to just add a thin polycarb sheild around the outside of the module plates. This can be done pretty easily by adding some threaded holes in the cross direction of some of the exposed standoffs. Alternatively in a cutout-configuration of the frame, there would be 2x1 tubes on either side of the module and the front would be covered, so then only the short end closest to the UP would be open, which would likely not really allow anything in or could be easily shielded if necessary.

An example of how to easily enclose the module can be seen on the last iteration I posted here. In the first pic you can see the smoked poly covering the exposed sides of the module that the frame doesn’t cover.

This would definitely increase the height which I would not want to do as the gap between the plates is directly driven by the frame tube height. In addition, it is not just the 8mm motor shaft that has to fit through but the pinion gear as well, which is 0.7" OD for the 10/11/12T pinions, or 0.8" OD for the 13/14T pinions. This is why the Lamprey magnet ring encoder from 221 works so well in this particular application. Easy to install, calibrate it once, and then you’re set.

If for some reason you ever did need to remove the turret for maintenance or to replace, you could remove the top cone piece from the assembly and mount it to the replacement one and not need to recalibrate since the magnet ring is pressed into the cone part.


I think the alternating method is just fine. The difference between 147 and 148 ticks is 0.3 degrees, which means at most you accumulate 2.4 degrees of total error, and that is worst case.

Also the lamprey is just for keeping the absolute positioning. Local control during operation will generally be done using the internal encoder on the motor. The absolute is just referenced at the beginning of the match for the 0, and potentially some kind of periodic check of it to see if the local control loop is keeping accurate.

Worst case, it would be pretty easy to add mechanical alignment features to the forks to just manually position the module at each 45 degree interval so then you aren’t relying on the motor positioning it using the encoder ticks.

Tl;dr I have little to no concern about calibrating this.


That was the weird flex ring I designed to go over my module - it was designed to let me do the full 36 point calibration routine easily.

Nick, beautiful and elegant design. I like the symmetry and compactness. It’s smaller, lighter and lower than our home grown one (search 3737 DinoSwerve). And after a sort of season of running ours, I see why the guard is needed. I also like the capture of the tread in the split wheel. Is that a custom assembly? Can you share any more on the wheel?
I think our only advantage was co-locating the controllers with the drives as it reduces the required electrical real estate significantly. But… beautiful job!

1 Like

Started building up modules of this iteration.

I did slightly change the dimensions of the plates before we began to make it; the wheel is now 2in from the frame edges and the plate is now 4in wide. I decided it was worth rounding the numbers to a simple number, and it also allowed me to oversize the printed tread a bit more without it sticking out past the frame.

We also made both plates out of aluminum instead of just the bottom plate, mostly because we had a lot of the material on hand already. We will likely swap to a machined plastic/printed plate for the top plate at some point in the future to save more weight since this plate sees very little load.

That said, the module as pictured currently weighs 3.23lbs. all that is missing is the printed TPU tread. Once this is added and the top aluminum plate is switched to nylon/onyx, we expect the final weight to be around 3.25-3.3lbs.

Everything pretty much went exactly as designed. We ordered precision 8mm shaft from McMaster for the shaft hoping it would fit into the 8mm bearings but still had to sand it down. Outside of that everything basically fit together as expected.

Following assembly of this first module, here is a list of the minor changes I’ll be making to the design for future use, I’ll upload a new STEP here/GrabCAD when I am done for anyone interested.

  • Fix clearance fits on all spacers. ID of most of the spacers printed a bit small and we’re difficult to put on. Mostly just a result of printing things/me being lazy about tolerances.

  • Slightly decrease length of UP pulley to prevent binding when overtightened. Printed part ends up being a bit longer then what the spacers do to offset the UP from the plate, so when you tighten the screws all the way down, it can start to bind the steering. This is mostly again a result of printing/me not planning around tolerances.

  • Remove material from fork to make wheel easier to remove. It is unlikely that it will be possible to remove the wheel without taking off one fork, but I remove some material from the fork that isn’t on the level gear side, I can make it so only one fork needs to come off to swap the wheel. All of this is because I wanted to make the tread as wide as possible, so the wheel overhangs the bevel gear.

  • Lighten 28T gear and slightly machine down bore length to better clear magnet. The lightening was already designed in, we just didn’t bother doing it on this initial assembly. We want to take a little of the hex bore off to lower the height of the washer and screw. We opted to tap the end of the shaft instead of a snap ring for simplicity, but this results in less clearance to the magnet ring.

  • Re-clock NEO motor mount holes to reposition wires. We didn’t want the wires from the NEO going directly towards the NEO 550 because we don’t want those wires running into the motor and stalling it, but it would be nice if the wire went at a 45 degree angle towards it so all the wires can be somewhat together.

  • Print top plate to further reduce weight. No risk here really as this plate doesn’t see any load really.

  • Try to source 8mm shaft with 5mm hole to make wheel shaft part easier. This may require slight changes to the pilot feature dimensions on the forks so the shaft can be a metric length.

  • Add chamfer to bearing retaining part for clearance to forks. This was just an oversight on my part. The fork actually clears the hole in the plate in reality, but it’s really close and I meant to have a chamfer for this reason.


Very nice work here! I love that you have all the shafts supported on both tends, even the NEO shaft!
It looks like you are assuming that the wheel shaft is exactly equal to the space between the forks. You are intending to stack out fork-shaft tube-fork, right? That’s going to make those surfaces a bit high stress relative to the 5mm bolt.
Is it difficult to pull the non-drive fork for re-treading?
Its not necessarily a great idea, but you could shorten your wheel shaft and add a spacer on the bolt. That would allow you to pull the bolt, pull the spacer, then shift the wheel off of the bevel gear, and then get it out. A drawback is more parts and slightly less control of where the wheel shaft is located.
I know its a more expensive part, but you might consider using a shoulder screw as your axle. You can buy one from McMaster with an 8mm precision OD and an M6 thread on the far end. Just pick the right length and you can arrange it to stack out right. One drawback of this is you can’t loctite the bearings onto the screw.
You would want to make a center plastic spacer inside the wheel chosen so you can stab the screw. McMaster-Carr is a 60mm long shoulder, and about five bucks.
You don’t have anything to ensure the bearings don’t spin on the shaft; have you found this is OK? I’d be tempted to put a printed spacer in between the wheel bearings so you can clamp the whole stack at least some.
What’s your intended wheel OD? 3.75" like the last version?

Sorry, mechanical engineer… can’t resist dreaming!

I gotta say, I’m really tempted to build some with my team for our summer of swerve!

Could you share your source for the bevel gear pair and the thin section bearing?

Never mind, found it on the old one!

Bevel Gear set is sourced from KHK; we do the modifications to the stock gears in house.

The 3in ID x 3.5in OD x 1/4in thick X-Contact bearing can be purchased from Thrifty Bot here.

Any chance of getting a STP assembly? My Creo doesn’t like the SLDASM files :wink:

There is a STEP file in the folder at the GrabCAD link in the first post of this thread.

Do you happen to have a complete BOM for the COTS parts somewhere?


I just finished my initial look through of the cad, and I absolutely love this design!. It doesn’t look like it’s too complicated for a mid tier team to build but it’s also fairly compact and elegant. If our team decides to make one, do we need to put the text on our wheels and use the provided color scheme :upside_down_face: ?

I will work on getting this publicized this weekend. I have one we used on 3005 when we ordered parts to make the chassis we have currently; I’ll polish that up and post it here.


1 Like

Thanks; I missed that file!
It looks like your summer BOM is close; that’s where I found the bevel gears!
Thanks again for all the help! A sweet design!

BTW, I looked at the shoulder bolt a bit more. On the good side, it gets rid of the 8x5mm tube. On the bad side, when you pull the axle out the two spacers drop off in your hands. Hmmm