Swerve Module

So I’ve somehow managed to find time to create this over the past few days, even though I just started classes at Kettering. This module has taken inspiration from 2910s swerve largely, along with some from team’s modules such as 33, and 2767 (even though this doesn’t resemble their swerve that much).

It uses the AM 20:40 bevel gear set, a 3" Colson, 4" available from SDS, and then a NEO for the azimuth, and one for the drive. All the gears (minus the encoder gears) are just Vex gears, and all the pulleys minus the large 60t for the azimuth are COTs. The main 3/8" plate is planned to be made out of Nylon, and the upper plate where the motors mount out of aluminum (to act as a heat sink). The large azimuth pulley is planned to be made out of Nylon (or a similar plastic, possibly Delrin), and water jet or laser. The small diameter shafts are 8mm steel shafts just to allow for a smaller pulley on the azimuth, and to allow for no modification of the 20t bevel gear. It currently uses a SRX Mag Encoder for the drive, and then an AM Absolute Encoder (setup 1:1) for the azimuth. The main base plate is laid out in a way to allow for the use of a 6" x 12" piece of Nylon. I didn’t do any weight reduction to the motor mounting plate since there are only 3 standoffs supporting it, and might as well keep surface area high for use with NEOs.

According to Solidworks, the module weighs 4.7 lbs, and the only thing I didn’t attach in CAD were the snap rings for the end of shafts (nearly every shaft has 2).

Should I add more standoffs to the top plate to support it better?
And is it worth removing weight from the top plate?
Also, any other recommendations or concerns about the design?

Let me know if the CAD link doesn’t work, I don’t think I’ve posted a ton since the move to the new site.


I wouldn’t be too worried about doing the motor plate as aluminum. I don’t have my CAD computer on me, what is your ground clearance and overall height from bottom of wheel to top of module?

1 Like

The entire module is approximately 6" tall (from the bottom of wheel to top of the Mag Encoder). If you just used the NEO encoder, it would be about 5.5" tall.

Ground clearance is about .625". If you needed more, you could get .1875" probably from pocketing the main mounting plate where it connects to the frame or if you drastically needed more, mount the tubes on the top side of the module.

1 Like

Awesome, thanks.

Nice looking module. I wouldn’t worry about having keep the NEOs cool; compared to cims (or pretty much any other FRC motor) they run quite cool, even when mounted on plastic and other non-thermally-conductive materials.

One thing I’m not sure about looking at your pictures is how well the main pulley/bearing system would hold up to the thrust load of the robot. The bearing can definitely take it, I’m more wondering about the nylon pulley and plate.

The only other thing I wonder about is maybe ground clearance. 0.625" isn’t a ton of extra room down there for going over any sort of bump or ramp. (then again, FRC is played mostly on a flat field and you could gain more clearance by flipping the mounting)

I’ve taken a look at the CAD you posted and have some comments:

  • A CAD technique note: Solidworks Toolbox is an awesome plugin, but pretty much only if you’re working alone. If you are modyfing a toolbox part, you should save it in a separate location from your Toolbox parts, inside of your working folder. Otherwise, other people won’t be able to see how you modified it.
  • Your azimuth belt seems off. The “canon” way to do belt sizes in CAD is to lay out the pitch line, then do two different offsets from this line to locate the outer features. Belts are asymmetric with respect to the pitch line, so you can’t do a bidirectional offset (for HTD 5mm, it’s .115" inward and .034" outward).
  • If the spur gears you designed are intended to be 3D printed, note that most printers are limited in their accuracy, and by using a lower DP gear, you can improve your accuracy. If you’re using a steel gear made from stock off of McM, you can ignore this comment - but weight and price considerations may make it more reasonable to 3D print.
  • Even in nylon, 3/8" thick unpocketed plate seems a little overkill. You could probably get away with thinning it down and only using the 3/8" part on a ring around the bearing.
  • You might want to look at how you support the motor plate. Although NEOs are light, nylon is relatively flexible and the motors are cantilevered out from their nearest standoffs. If you want to keep efficient depthing on your gears and belts, I recommend adding an extra pair of standoffs on the corners of the module to better support the motors.
  • The wheel support forks as they are right now are pretty overkill and extraordinarily difficult to manufacture. The slopes on your fork are very difficult to mill and would take a lot of time to machine, especially due to their sharp inside corner. The SDS swerves use 3/8" plate, and even that is pretty beefy. Since you’re already milling the large azimuth pulley, you could go all the way down to 1/4" plate with the #10 taps in it, and then support the side loads by seating the forks inside a pocket in the plate (with Mickey-mouse ear corners to make the pulley manufacturable).
  • There are a lot of sharp inside corners on a number of parts - both the wheel forks and the azimuth pulley were spots I could find. Keep in mind that endmills can only cut round inside corners - I recommend putting a 0.13" radius on all of these, so a 1/4" cutter can come in without burying itself in the corner. While it’s more acceptable on 3D printed parts, round corners on such parts are much less susceptible to delamination and are also stronger joints.
  • Especially given how little ground clearance you have right now, you may want to consider shifting the entire assembly down 2" and mounting the bearing plate on the bottom of the frame extrusion. This has the added benefit of leaving more room clear on the top of your robot.
  • How are you supporting the thrust load directly up and into your robot from the floor? As it is right now, the swerve bearing could pop out of its plate and ruin your day. I think you may want to switch the location of the flange on your current plate and add some retaining screws.

In spite of everything I just wrote, I think this is a really cool design! It’s compact and very elegant with how it all works.


Thanks for the feedback!

  • I haven’t done a ton with Solidworks Toolbox, so I’ll work on that to make it work better.

  • For the belt, I just kind of threw something in there to make sure everything would clear, and just kind of guessed on how thick the belt was, knowing I was close, but more likely than not, wrong.

  • I didn’t really have a plan yet for making the spur gears for the encoder, I was thinking waterjetting polycarbonate, but that may even be a little too fine of teeth for that DP on the waterjet. I’ll probably adjust that to a lower DP to allow for the option of 3D Printing.

  • I’ll knock some material out around then, I may see how much weight is saved because it may not be worth the machining time (it would be on CNC most likely but we don’t have our own).

  • That plate that the motors mount off of is actually aluminum. I wanted to be able to have that plate act as a heatsink to keep the temperature down.

  • I’ll knock the forks down a little, I just wanted to make sure there were more than enough threads since it is only 1/4" and the bevel gear did require a lot of material removed.

  • One option to increase ground clearance is use like a 1" x 1.5" (1/8" wall) for the frame rather than 2 x 1. It would definetly be weaker but would allow for another 1/2" of ground clearance. I feel like for a lot of games (2017, 2014, 2013, 2011, etc.), it should be enough. Another option to get more ground clearance is just to make the forks longer and not make everything as compact.

  • I’ll attach a picture bellow but I felt like the pocket in the Nylon plate would be enough to keep the bearing from popping out of the top, and screws from keeping it from falling out the bottom. The pulley has a slight flange to keep it from coming out the bottom, and then screws to keep it from coming out the top.

Thanks for the suggestions! I’ll make some improvements when I get a chance and publish some improvements.

One unintentional thing I realized last night is that this entire module is short enough to sit under the bumpers, even if you had your bumpers only 1" from the ground (we always run ours to the max height). The good thing about this is that it protects the motors since I know 2910 managed to break a number of motors at their first event I believe from running the motors into things.

1 Like

The design looks really nice.

For the ground clearance, you could also use 1x1 for the frame instead of 2x1. They will have similar impact resistance for hits that you take to the frame and will reduce the weight and increase the ground clearance. We use 1x1 for our frames and have never had a problem with strength or stiffness.

For your drive encoder, I would just use the encoder in the NEO. It should have plenty of accuracy for distance and speed measurements. It is great that you CADed the CTRE encoder in case you wanted to use a miniCIM instead of the NEO for drive, but the extra cost, and wiring that would be needed to use it is just extra complication that you don’t need if you are using the NEO.

You may want to check out SDP/SI. They have some nice small acetal gears that would work very well for these encoder gears. We use the 48DP 100 tooth and 30 tooth gears for our encoder (the gear ratio obviously matches the final drive ratio of our modules). They also have gears without the brass hub which look like they might be better suited to the gear that is mounted directly to the azimuth carriage. You could machine the hub off completely to make it fit better for your application and it would mesh with any of the other 48DP gears that they sell. The CAD for these gears is also available at that site.

Keep up the good work. We love to see these swerve designs keep coming.

Well here’s an update.

As a team, we currently do not own any NEOs, requiring us to switch over, or use CIMs for the prototyping. Not watching the measurements enough for a CIM and designing it around the NEO, a CIM is too tall to fit. Since we need to use another encoder with a NEO anyways, since we want a 1:1 absolute setup, it doesn’t matter a ton what motor we use. Since the NEO has the built in encoder that would work great for positioning and velocity control of the drive, it makes sense to keep it for that. In the end, I chose BB550 for the azimuth control. The gearing changed a little bit, resulting with ~104:1 ratio, or roughly 180rpm. This is a little faster than I would want for this motor, but I could make some changes in the design and try to package a larger reduction.

I don’t have bolts, or the azimuth encoder gears currently in the model due to Solidworks being a little finicky, and I also can’t Pack-N-Go for the same reason. Once I get that fixed, I’ll update the GrabCad. According to SW though, this version is weighing in at 4.05 lbs, assuming I set all my materials correct.

The physical size was cut down in this design. It is slightly shorter without the SRX Mag Encoder, and it also isn’t as wide due to the 550 being smaller and packaging better than the NEO. As long as the 550 can take the stress, I prefer this setup from a packaging standpoint.

I still need to make some minor modifications before fabrication begins. For a proof of concept, the main pulley made be made from aluminum (since a sponsor can provide scrap), and later created out of Nylon/ HDPE.



Here is the latest CAD link.
I need to modify the encoder gear slightly, since we are going to attempt to 3D print it. Bolts and snap rings were added in, and the weight is currently at 4.2 lbs.

Looking at it also, if I wanted to, I could make the forks longer to accommodate a 4" wheel, giving more ground clearance if it happens to be a game requiring it. The extra reduction can be found from the first stage belt reduction, stepping it up to a 12:24, giving the same speed it currently is set at.

1 Like
  • 775/550’s need air vent holes otherwise they will overheat
  • seems to be 0 tolerance between the plates and motor casings. I would suggest ~.1 at least
  • there doesnt seem to be anything holding the bearings for the wheel into the forks other than snap rings probably fine but adding a bolt to hold it in by the flange or flipping them to the inside will ensure that if a snap ring breaks nothing will happen
  • you are going to have one hell of a time trying to remove that NEO as well. the wires are in the way of it dropping straight out of the module and you would have to take apart the whole thing if something happened to it.
  • i dont think just those 2 screws are enough to hold in the module, why cant you have more?
1 Like

Thank you! Some of those things I completely forgot about. I’ll go back and make some changes.

Is there an option to play with the azimuth ratio? 104:1 is fine but it would be nice to take it down to as low as 70:1.

Can an SRX Mag Encoder (15-697867) be used instead of the AM-2899? Some would like both an absolute and a quadrature output for the azimuth.

1 Like

What would be the benefit of this?

I think (I’m not the software guru) our swerve code uses the absolute to zero and the quadrature for control, so for selfish reasons, we’d like to see the SRX encoder on the azimuth.

It also plugs directly into a Talon which is convenient.

1 Like

The azimuth ratio is adjustable a little bit. Without making any changes to the plates or shafts, you could fit an 18:34 in the second stage, rather than the 14:38 that is currently in there, giving you a ~72:1 ratio. There is room to move the ratio a little more if desired.

In the current setup, it would be a little difficult to mount a SRX Mag Encoder, but it could be possible. It would probably require an extra shaft to be mounted and the magnet placed in there. Part of the reason we are looking to use the encoder we currently have on the model is that it’s analog so it will hold the position after the match, not requiring perfect zeroing before match. We’ve used the SRX Mag Encoder for everything over the past 3 years, so I would much prefer that if it would keep track of position after powering off.

This is probably the main reason because control has seemed to work fine for us with the absolute encoder. I will say, though, that based on what we have seen in other mechanisms is that the feedback is a little faster for quadrature encoders connected to the SRX than for absolute encoders (probably because of better resolution). For a swerve module, though, there should be no noticeable difference between the two as it relates to the response of the azimuth PID because the rotational speed for the module is not extremely high.

I think we will probably stick to the absolute encoders for now, but may switch to using both at some point. Thank you for your information!

The current ratio is fine, we just want to know if a lower ratio is possible.

FYI, the SRX encoder has both absolute and incremental outputs and does not need zeroing at power up. The nicest thing about the AM encoder is the ease of installation.


I concur.

If your code is written for an absolute and you know how to cross “0” then great! I assume most swerve code is written for absolute and we might be the odd duck…

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.