Three Stage Shifting Swerve Module (FRC 5987 Galactic Swerve MK2)

A few days ago @benjierex, Head of Engineering from my team, posted a swerve drive he made. I decided to also model a swerve drive.
I decide to take things one step further and design a shifting swerve module. I decided to reduce a stage from the swerve by putting two different pinions on the Falcon motor and have the two pinions go to the dog gears.

The module’s general design is very inspired by WCP and SDS MK2 swerve modules.

GrabCAD Link




Weight: 1.87 kg / 4.12 lbs
Size: 175mm x 175mm x 268mm / 6.9" x 6.9" x 10.5"

Falcon 500 Motor
1st Gear:
Gear Ratio: 11.73 : 1
Free Speed: 9.49 ft/s
Adjusted Speed: 8.45 ft/s
2nd Gear:
Gear Ratio: 6.10 : 1
Free Speed: 18.27 ft/s
Adjusted Speed: 16.26 ft/s

Neo 550 Motor
Gear Ratio: 19.26 : 1


I love the lever style for the shifter, very clever. Not sure quite how important it would be to shift on a swerve drive, but it definitely looks fantastic.

Is there any sort of joint on either the pneumatic or the plunger which allows the plunger to stay coaxial to the shaft?


Im kinda embarrassed to be honest, I didnt think about that.
I think Ill put the bolt that connects the lever to the shaft in a slot.

I was about to comment on the shifter being offset like that, but then I saw the lever. I really like that, seems like it solves most problems with an offset shifter. I have the same question as Clay, you could run into problems if the plunger doesn’t stay coaxial to the shaft.

What’s the total weight/footprint of the module?

1 Like

The weight is 1.3kg or 2.9lb and the footprint is 175mm x 175mm x 268mm or 6.9" x 6.9" x 10.5"

You sure about that weight? Less than 3lbs is suspiciously low… do you have all materials/weights set?

On another note, is the base plate for the module 1/8th (or similar) aluminum plate? I wouldn’t really trust that, it seems like it would bend too easily.

1 Like

I’m pretty sure all materials and weights are set, but Ill double check.
The base plate is 5mm which is a little thicker than 3/16".

you were correct, some weight were set incorrectly. Its actually 1.87kg or 4.1lbs

First of all, great module! I love how compact the shifting is.

I worry about how high the azimuth reduction is. With only a 19:1, you’re a lot more likely to burn up the neo 550 during the match and it will also be harder to control. I have seen most teams using a neo 550 standardize on ~30:1 which seems like it wouldn’t be to hard to get with a larger initial gear.

Thanks for the feedback, Ill look into fixing that.
Is there any way to calculate what the gear ratio needs to be? or is ~30 : 1 based on real life testing?

Here’s an example I made in JVN calculator. “Arm Length” should be 1/2 the wheel width, and “Arm Load” should be 1/4 your robot net weight with bumpers and battery. I add a little extra weight to account for CoM shifts.

1 Like

Does 1/2 the wheel width account for the friction from the other half of the wheel? I’ve always been unsure whether there would be frictional load from each half of the wheel when turning about the center axis and whether that would be twice the load of the regular lever arm calculations.

1 Like

If we imagined that each swerve had, instead of one wide wheel, two infinitely thin wheels offset from each other by the wheel width, we would find that each of these thin wheels bore 1/2 of the module’s weight, or 1/8 of the robot weight. 1/8*(Robot weight)*2*(1/2*(Wheel width)) = 1/4*(Robot weight)*(1/2)*(Wheel width). So it’s identical to put 1/4 of the robot weight on one edge of the wheel, or to put 1/8 of the robot weight on either edge of the wheel.


Math checks out, thanks for the science :ok_hand::ok_hand:

If you assume the weight is evenly distributed across the line where the wheel touches the ground, the center of the weight distribution is in the center of the wheel. Scrub is in the reverse direction on either side of the center of the contact patch and is a function of lever arm.

In fact, based on this sketch I made, the lever arm might only be 0.25" for a 1" wheel with 40lbf on it. I also neglected the coefficient of friction of the wheel in my earlier post, so here’s an updated JVN model with a CoF of 1.3.

You can assume a “worst case” like what Clayton did for extra safety - that’s how you get to a 1/2 lever arm instead of 1/4.


finally got around to rendering, here are the first few renders:


Really cool module! I was working on the same concept last week but never got around to finish it. +1 for the coolness of the lever thing of the shifter - one of the reasons I left the project in the dark was the packaging of the pneumatics, and this is a really nice solution for that.

Don’t you feel like the encoder mount needs more support though? It looks to me like it’s prone to shaking.

Very nice design! I’m glad to see everyone is keeping up with robotics individually as we’re forced to stop meeting as a team. With the combination of the number of swerve drive models we have now, I bet that we’ll be able to start prototyping one for real once we get back together.

I took a look at the CAD for a few minutes and have a few notes:

  • The lever shifter is a really cool solution to packaging the shifter piston. That being said, I’d doubt whether the challenges that come with a shifting swerve are worth it for the limited advantages in real life.
  • The lever bar is unnecessarily difficult to machine. It’s not flat on any face so we would have a very hard time making it on the router.
  • Not sure how you’re getting a 19.26:1 rotation ratio. I see a 6:30 gear reduction and 18:59 belt reduction, which is a total of 16.39:1. You can bump that up pretty easily though by reducing the smaller pulley to 14t (would need to be custom machined, but we would probably do that anyway) and increasing the larger gear to 40t. That would give you 28.1:1, which gets you to a much lower current while still being plenty fast.
  • The top pockets on the main turning pulley are dangerously close to the root of the pulley teeth (< 0.5mm clearance at some points). They should probably get pushed further in.
  • Right now the main turning pulley needs to be flipped to machine the top pockets and bearing flange recesses. If you can move all of the pockets to the bottom and put the flanges outside the bottom face, the entire thing can be machined in one setup (upside-down) which will greatly reduce machining time and improve accuracy.
  • The wheel bearings and spacers don’t seem to be the right size for the bolt they’re sitting on
  • If you’re using a shoulder bolt as a wheel axle, you want the shoulder to go all the way into the opposite side wheel leg. See this cross-section from the SDS MK2:

Overall though, looks very good!


I disagree that this is the maximum (sizing) load case. This load case is to overcome the friction of the wheel scrubbing on the carpet as you try to turn it. But there is another load case that is larger that needs to be considered:

When the drive motor applies a torque to drive the wheel, this torque will also try to spin the module due to the reaction torque at the 90 degree bevel gear. If the wheels were unable to turn (such as when you are in a pushing match) and the motor were at max stall torque, the reaction trying to spin the module would be the motor’s stall torque times the gear ratio of the gearing between the motor and the bevel.

For our swerve module, we use a NEO motor for drive and then run with either 3:1 or 4:1 before the bevel and 2:1 after the bevel gear.

So, if you take the stall torque of our NEO motor @40A, times this gearing (we will take the worst case which is the 4:1), you get 2.92 ft-lb of torque trying to spin the module.

I believe that this is the highest load that the steering motor needs to react. So this is what we use to assess our steering motor options.

You can plug this in to the JVN calculator if you want, but the math is pretty simple.

Taking the NEO 550 steering motor, you have 0.215 ft-lbs of stall torque available @30A. Our module uses a 33.3:1 total steering ratio (10:1 in a VP gearbox and 100:30 in the final drive ratio), so if you multiply the NEO 550 stall torque times the 33.3:1 ratio and you get 7.15 ft-lbs of torque available to resist the spinning of the module. This is 2.45 times the maximum torque from the drive motor described above. So, this gives us a decent factor of safety and ensures that we are not running the motor at excessive amperage at stall as we are resisting the torque of the drive motor. Taking the 30 Amps divided by 2.45, we get 12.25 Amps. REVs testing of the NEO550 says that it can sustain up to 20 amps continuously (over a minute) without failing, so 12 amps seems pretty safe.

Running the same math with a 30:1 ratio shows a similar result with 13.6 Amps at stall needed on the NEO 550 to resist the torque imparted by the NEO drive motor.

20:1 is getting marginal - with slightly over 20 amps needed to resist the drive motor torque.

Our limit has always been controllability rather than torque. In previous years, the steering control loop was in the main robot code and the absolute encoder was fed back to the RIO. The loop time of the main code limited how fast we could spin the module and still have a stable control loop. In 2018 and 2019 we were running 150 RPM module speed with an RS550 (banebots) motor. We probably could have run faster, but we spent our time iterating other aspects of the designs instead.

But this year with the NEO550 we tried something new which was to run the steering control in the motor controller using the motor encoder itself for control rather than the absolute encoder. This allowed a much faster control loop without any jitter associated with the deadband due to geartrain backlash. So now the torque limit has become a much bigger factor. We believe we are still control limited, but our main goal was to reduce the VP gearbox from 2 stages to 1 stage, so once we had done that, we didn’t go any further.

1 Like

Seeing that you’re both from Israel, I wonder - do you know of a supplier of shoulder bolts here (we’re from Tel Aviv, but Haifa suppliers will do just fine)? I was looking into it but never found anything.

1 Like