First Attempt at Swerve

Yeah, you need a plate or some shoulder feature for the axial load on that bearing to push up against in order to transfer the loads to the frame without putting stress on the powertrain shafts.

You can use your existing bearing retention screws on the bottom for this task (just make a clearance hole in your larger (existing) plate.

Here is what it would probably look like in cross section (blue is on the crossectional plane, black is behind it) the end result is a part that looks like a ring with a bolt circle in it. (Edit - The mark-up I did here is slightly off, but the concept is fine, just go to the next image)

…and a (bad) orthographic view, you could easily tie into the red standoffs (dashed line)

1 Like


So after the feedback given by @dydx @Nick_Coussens and @Skyehawk, the design went back to the drawing board for an overhaul.
First, it was switched from belt and pulley to a spur gear system to rotate, so our versa can get closer.
Added bolts to the top and bottom of the contact bearing to hold it better.
The gearing is now a 10:1, 7:1 in the versa, and a 1.66667:1 through the spur gears. (80:48) for a 116.67:1 ratio and a speed of 94.28 rpm.
The encoder is now using a rev through bore encoder.
Redesigned the top and bottom plate, while changing around the layout to make it a much smaller footprint and weight.

Our estimated weight is 5.75 pounds. The footprint is roughly 6.25 by 7.25

1 Like

Changing the type of encoder doesn’t solve the problem, you still have a relative reduction between the steer encoder and the module.

It looks like you could save a lot of vertical space on the module.

For reducing height the only idea right now that I had to save a little bit of height would be using a bolt into the hex instead of an eclip for the bevel gear. the gap is so when the pulley rotates it doesn’t have the hex shaft hit the neo, and I usually don’t like cutting the neo shafts down.

You can move the 22:22 gearset below the bearing, which saves you quite a bit of space.

1 Like

Are you saying put the 22 gears between the bevel and the bottom of the big gear, and then the neo can come much lower?

Also for the encoder couldn’t you just account for the extra 1.667:1 reduction with coding?

I don’t know much about programming.

You’re going to need a second bearing on that vertical bevel gear shaft, preferably below the gear, otherwise you’ll get skipping teeth.

The gear teeth mesh at a 20 degree “contact angle”, which means that for every 1 unit of force pushing the wheel around, ~1/3 units of force will be pushing the gears apart from each other. You needed a good stiff pair of bearings to hold them together.

Yes, but I’m not 100% sure, that might be too much cantilever for the bevel pinion.

You can account for the ratio, but only if you know the module’s position on startup. To make it a lot simpler, an absolute encoder is far preferred.

Why not have the drive motor in the center of the wheel module, and cut out a stage of reduction? Right now the two 22t gears are doing nothing for the reduction, just acting as idlers, so you can cut them out.


I had a design initially with that and there was a reason I changed it, I think it was because it offset the wheel a good portion. Also all the other modules I looked at had motors offset.

Here is a great design you can reference that doesn’t have the motor offset:

1 Like

The only real reason for offsetting the motor IMO is to give yourself more gearing options. If you are okay with your options with only one spur gear reduction, you can eliminate the extra shaft and gear weight by not offsetting the motor.


This update was just removing the extra gear and shaft that wasn’t needed. (thanks everyone for the tip)
Adding a bearing to the bevel gear shaft.
And lowering the top plate to be a smaller profile. About 1/4th a pound was lost.

Also @Nick_Coussens I was looking at your swerve design from April, and am really confused on how that absolute encoder works. Would it be I would mount it to the neo before the first gear?

1 Like

Take a look at 3737 Dino-Swerve. We do not use an absolute encoder. Instead we have a hall effect sensor and magnet that is used to zero the wheel once at the start of a match. We then rely successfully on the encoder in the NEO motor. Reduces cost and complexity.

Wouldn’t this also delay your auto by a couple seconds? Surely you can’t run the motor at full speed to find the sensor for fear of skipping it.

For the steering motor, I see you added an encoder slice to the gearbox in place of the rev through bore encoder (from your earlier Update). As @dydx stated following that update, the gear ratio between your output gear from the steering gearbox and the module itself is not 1:1. Therefore, that encoder will not give you absolute position of the module.

There are effectively 4 ways to get absolute position of the module using an encoder:

  1. Have a 1:1 belt or gear drive from the module to a parallel shaft that the encoder is mounted to (this is by far the most common method uses by SDS and many other designs that have taken heavy influence from the 2910/SDS design).
  2. Mount the lamprey encoder magnet concentric to the axis of rotation of the module itself and mount the lamprey sensor to the top plate (with the motor shaft passing through the center of the ring magnet) as was done on 33’s summer? swerve design. This option really only emerged this year with the release of this new encoder so it is not overly common yet.
  3. Use the encoder in the steering motor to sense rotation at something other than a 1:1 ratio to the module and then either manually set the initial position of the module to 0, or sense the initial position by rotating until you trigger a sensor (like 3737 has done).
  4. Mount an additional gear set from the steering output shaft to an encoder shaft that has the same gear ratio as the ratio between the steering gear and the module. This is the solution we used in prior years on our module.

Options 1, 2 and 4 will get you an absolute position sense at the encoder that can be used directly in a control loop. Sensing the current orientation of the module using option 3 relies on knowing the initial orientation and then keeping track of rotations of either the motor or some other part of the steering gearbox system and dividing those rotations by the gear ratio from the sensed location to the module to get the module angle.

I hope this helps.

Normally it is faster than that. More like .25-.5 seconds.

Seems pretty fast!..but, not so fast. To Sam’s point:

Let’s say it’s .25 seconds. During this zeroing time a typical WCD robot has gotten a 3 foot jump on you. It is painful to watch your robot sit there for what seems to be an eternity while the other robots are already moving on the floor.

There is also an issue of the zero point moving. In the case of a hall sensor or mag switch, the magnet or sensor moves or in the case of a mechanical switch, well I think we get the idea.

There is ways to address this in software that make calibration of the switch go away but adds time to the zeroing routine.

1 Like

The 0.25 - 0.5 sec time estimate is about right and perhaps mitigated by a more efficient trajectory over the 15 seconds compared with WCD. We were happy with it. Once zeroed, the NEO encoders were totally accurate to provide direction during autonomous. Our code just adds or subtracts pulses as necessary. We felt the simplicity, weight saving and lower cost outweighed the sub second zeroing.

I can confirm that the “delay” between when the other robots started moving in auto and when 3737 started moving was barely noticeable. In fact, I was not aware there was a delay until I read Derek’s post the other day and I had to go back and re-watch some match videos from the event. It was not until after watching 4 or 5 matches that I was convinced that there even was a delay.

Obviously, if you know which direction the modules are going to spin to try to find the zero point, you can set them up just a little bit to one side of that zero position such that the modules don’t have to spin that long before they find their zero. So, if your auto routine needs the full 15 seconds to complete all the tasks you have programmed, then you can shorten the zeroing time to almost 0 with clever setup on the field before the match.

1 Like


Since the last time, the focus was on adding the Absolute encoder @Nick_Coussens and @dydx kept recommending (Please let me know if it is done correctly, or if I messed up.)
Remaking the top plate.
Adding some lightening patterns to the gear and top plate, and working on reducing the overall height.