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?

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.

1 Like

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!