2023 Coussens Winter Swerve

New year, new module!

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

Basic Details:
4.00in L x 4.00in W x 6.88in H
1.76in x 1.76in Wheel to frame edge
3in diameter x 1.5in wide wheel
16.04fps free speed drive
263rpm free speed steering

STEP and SolidWorks (2022) files available here.

Bill of Materials can be found here and the picture below.

This version is actually the third iteration since the last version I published publicly. The last version was run by 3005 during the 2022 season. They and I made some minor adjustments and changes to the design throughout the season, and that led to a full new version after the seasons end.

Later in the summer of 2022, after I joined 8096, we actually built a new version of the module that flipped the motors with some repackaging, as well as some other changes. Some pictures of this are below:

In the end, after working on it I decided that the extra size and weight of the flipped version was not worth getting the module height down to 6in. We also learned a few lessons on this module that I have now applied to this newest version.

Changes since the last public version (linked above):

  • Pushed to get a full 1.5in wide wheel to increase traction and tread life.

  • Reverted back to a default of roughtop tread for the wheel. I still think the printed TPU tread has merit, but we did not have enough time to fully develop and test it enough to find a final version we trust and have confidence in. I will have a printed/molded tread design that I will post in this thread if anyone does want to try it. My suggestion would be the FilaFlex Black 82A Durometer filament.

  • With the switch back to roughtop tread, this allows the wheel hub to be a single part instead of two wheel halves, which makes assembly simpler and ensures things on the wheel shaft are easier to keep concentric.

  • Switched back to a gear stage for the final steering reduction. I used to do this and had switched to belt at one point, but I have decided to switch back as it allows the module to be shorter. I did not an extra 0.002" to the C-C distance like I normally do on spur stages here to help ensure there is no backlash in this stage. The profile on the printed gear can also be adjusted slightly if there is still backlash.

  • Switched to using The Thriftybot 15:45 bevel gear set. One of the most time-consuming parts of my module previously was having to modify bevel gears from KHK. With this change, there is only mild modifications to the TTB bevel gears needed, much simpler then the previous modifications to the KHK gears. It is also a more reliable and quicker supplier.

  • Switched the tapped holes in the top plate that were for mounting the plates together and to the frame to nut pockets in the plate to ensure threads are not worn out. We have also found the less holes we need to tap in plates after cutting them on the router, the nicer life is. The nut pockets can be machined with a 3mm bit.

  • Optimized the “pod” design so that the wheel can be removed without the bevel fork ever being removed. This was possible on previous iterations but the wheel kind of had to be forced out a bit and was not ideal. Some material has now been scooped out of the gear part of the “pod” that allows the wheel to arc out around the 15T bevel gear. (“pod” refers to the core assembly of the module that rotates around the coaxial axis.

  • Bumper mounting has been integrated into the module design, to ensure that nothing needs to be done to the rest of the robot design to integrate the bumper mount. The nut pocket change mentioned above assists with this, by having one of the screws that mount the module to the frame be longer then the others, supplying a threaded rod for the bumper bracket to sit down on and be secured with a wingnut. A spacer mounted to the bumper bracket and spaced between the bumper bracket and the module top plate sets the actual installed height of the bumper; easily adjusted based on the game.

  • The module has been changed back to utilizing 2x1 tube for the frame as it is more convenient then the 1.5x1 tube that the last public version used. This change is why there is a printed part that slings the drive motor below the top plate.

  • Alignment dowel pins were added to the bottom plate to ensure that frame tubes are square to each other when mounted to the module. The spacers mounting the top and bottom plate together also ensure the frame tubes are aligned accurately to the end of the modules.

  • A custom wheel fork has been designed to be used when zeroing the absolute encoders. The fork locks the rotation of the module in place in the O orientation, thus making sure the zero position for all 4 modules is the same, allowing for spare modules, etc to all be swappable without the need to re-zero. This also allows for very precise zero position, helping to have accurate steering control. This part will be described in more detail in a future post in this thread.

The first stage of reduction for the drive of the wheel is a 15:24T spur gear reduction. This is followed by a 15:45T bevel gear reduction. You alternatively can switch the spur gear reduction for different drive speeds, with the following options:

16.04fps free speed (15:24T)
14.37fps free speed (14:25T)
13.34fps free speed (13:25T)

The steering ratio is a 1:3 & 1:4 Ultraplanetary stage, followed by a 15:64T spur gear stage. Overall ratio of 1:10.4329, ~263rpm free speed. Note that the UP ratio is not actually 1:12 as the advertised ratios of UP stages are not actually exact round numbers. Consult the Ultraplanetary user guide on the REV website to find the correct accurate ratios. The overall ratio listed above was calculated using these numbers.

Steering position is determined using a REV Through Bore Encoder mounted to the underside of the top plate underneath the NEO motor, and wired to the steering Spark MAX. Local control can be done using this encoder and utilizing the new firmware update REV has announced recently.

Details about overall size, wheel base dimensions, and a detailed section view are above. Mount holes are spaced so that they align with standard 1/2in pattern 2x1 tube, and so that the ends of the tube are 3.5in from the edge of the module to keep frame dimensions on pitch.

A picture of the Bill of Materials can be seen above, or at the link posted above. The costs are the required price to obtain enough quantity or materials of the given item, regardless if all quantity purchased is used.

Also pictured above is a MarkForged build on an Onyx One of all printed parts for one module, showing total print time (Eiger typically over-estimates times by as much as 10-20% from my experience), and total cost ($36.43 per module).

As mentioned above, I have some follow up posts planned to show the alignment fork design for zeroing the encoders, and the alternative part designs for both the printed/molded wheel option, and the alternative drive spur gear options.

In addition, I have some follow up posts of a few time-lapse videos which will go through the design process. The first video will go through the “master sketch” process I use to design these modules and most things in FRC, the second video will go through the custom part generation based on the master sketch, and the third video will go through the assembly process.

As always, feel free to comment any questions below and I will do my best to answer promptly. Good luck in the 2023 season!


What sets the engagement depth of the teeth in the bevel gear? Is that baked into where the supporting bearings are on the fork (and azimuth gear) or is there space to shim that in?

1 Like

There is a spacer on either side of the wheel that is between the wheel bearing and the fork. If you really had to change the spacing this could be adjusted.

Personally, I have never needed to adjust that in the past.

Ok, so you bringing the wheel into alignment/mesh with the driving gear. Makes sense.

More of a curiosity question than anything.

1 Like

We have any videos of it moving by chance?

No, this latest version just had design finished up and will likely be used during the 2023 season. It is based on countless previous iterations so for us we already have confidence in it.

If you had an extra top plate (with neo and azimuth motor stacks already attached) would a motor swap be just removing plate spacer standoffs and swapping plates? Or is there a more intricate assembly order?

If it’s the former I like the modularity.

Awesome! Thanks!

Also, I printed one copy of your fall 2022 tires with the new Ninjatek Ninjaflex Edge, which is 83A. I haven’t tested it on a drive yet, but it printed great.

1 Like

In theory yes, however you would have to clock the motor shaft to the keyway on the 15T gear, while also clocking the through bore encoder to the hex on the plastic pod hat. So would be a bit of a finesse job, but technically yes this is possible.

That said, I don’t think I have ever had to swap a drive motor on a swerve module since I stopped using 775pros on the drive after the 2018 season. So I have kind of stopped caring about ease of motor access tbh.

1 Like

Yeah, that makes sense. Brushless has been one of the big paradigm shifts in FRC. The other big motor one being the CIM.

1 Like

I have been examining the new design. I like it. I have a couple questions.

  1. Cleaver use of the UltraPlanetary 5mm hex output part. It looks like the shaft that connects to it is 3d printed. Assuming so, does it hold up to the torque along the 3d printed layers?

  2. Does the 15 tooth 20 DP pinion fit to the neo shaft with a key? Both the shaft and the gear have a keyway, and I see that there is what looks like a 3d printed sleeve on the shaft with a cutout that matches the keyway. Is a standard 2mm x 2mm key sufficient?

  3. In the section picture you posted above it looks like there is a screw in the new motor shaft, but I don’t see that on the *.step cad file. Is there one and what purpose does it serve?

Great questions!

  1. I have done variations of this kind of part in the past and generally have not had issues. I made sure to get some good size radii on the necked down portion to mitigate this. The only time I have had a part like this fail in the past was when it was a pulley with a tensioned belt around it. This was actually caused by me using a 94T belt when it was supposed to be 95T, so it was very over tensioned. In any case, I have found you can have add a hole going through the center of the printed part and press some kind of rod through it to give it additional strength. I have also done this on different parts in the past with 5mm hex shaft from REV, or really just any aluminum or steel small shaft/rod material you can easily get.

  2. Yes, there is a 2mm x 2mm x 20mm machine key that goes in the keyway on the NEO shaft to engage the 15T pinion gear. This is also why the spacer on that motor shaft has a cutout for the key. I forgot to put the actual machine key in the model. I usually don’t include it in the model as the amount of weight is negligible and when generating a BOM from the model, you generally don’t need to actually order a machine key since they come with most pinion gears from FRC vendors (I am not actually sure if these 15T pinion gears from AndyMark include a machine key, but our team has 50+ accumulated just from the last 6 months of pinion gears we have ordered).

  3. There is not a screw in the end of the motor shaft. What you are seeing just happens to be the cross-section view of the hole in the motor shaft, the flange of the bearing, and the remaining 3D printed part behind. In that cross section, any material of a part that exists on the section plane is colored blue. In SolidWorks, there is an option when doing a section view that allows you to “keep cap color” which is what enables the blue coloring anywhere where there is material along the section plane. This helps it be easier to see where parts and edges between parts are. So no, there is no reason you would need a screw on the end of that shaft. In fact this would definitely make any maintenance or assembly more cumbersome.



Hi there I was wondering if the onyx parts were printed in the same orientation as seen in the photo. Allso should any of the parts be printed with reinforcements (ie carbon fiber/fiberglass)?

1 Like

We swapped a few in 2019 when the NEO motor case (dust cover) broke off due to being shoved into the cargo ship. The motors were still fully operational, but were no longer legal due to having been “modified” by the cargo ship. This was a big driver behind the motor protection shields that you saw on a lot of robots in 2019 (and 2020 and 2022) as well as the flipped motor designs.

But if the motors are well protected, then swapping the motors should be a very rare event.


It is amazing how many blows an extra 8" piece of 1x1x0.125 can deflect when properly integrated into a frame corner.

(Heavy wall for durability and likely to be a permanent part of the frame while taking hits against the field without needing to be changed. It’s healthy weight down low)

It might be a stupid question but why are external encoders needed? I meant to ask this of REV as well.

1 Like

It’s so you do not have to align the wheels before running a match. Just mount the swerve and tune the offsets. The tranlsation motor (atleast on the Rev Swerve) would make use of the built in NEO/SparkMax encoder.


To elaborate on this slightly for those not aware and looking into this in the future, the NEO’s are equipped with an incremental encoder, whereas the external one (found on both Nick’s and the REV module) can be used as an absolute encoder.

The big difference here is that an incremental encoder will forget it’s position every time it loses power (think turning the robot on/off, or during a brown-out); An absolute encoder on the other hand, will remember exactly where it is, even if it loses power/is turned off.

So as Emerson mentioned, this makes it:

It also means that should you experience a brown-out mid match, your robot should remember which direction all your wheels are pointing.


Yes, parts are printed in the orientation shown in the build picture. I do not use any fiber reinforcements. % infill may vary on some parts, typically everything is either the default triangular 37%, upped to 57% infill with 4 walls, solid, or 27% hexagonal for parts that see no load. I will likely post settings for each part at some point if there is interest.