Omni-Directional Drive Module for Robotics
by RichardHuberjohn in Design > 3D Design
512 Views, 6 Favorites, 0 Comments
Omni-Directional Drive Module for Robotics
When choosing a drive method for robotics applications, most common designs have their strengths and drawbacks. Tank drive (Parallel wheels) grants high traction, speed, and simplicity, but is lacks in maneuverability.
Omni-directional drivetrains aim to improve maneuverability, as they are able to translate in any direction, along with rotating at the same time. For example, mecanum drive (4 Mecanum wheels) greatly improves mobility, at the cost of slower, lower grip, and more complicated. Other solutions exist but reflect many of the same disadvantages of the two most common options.
Another omni-directional drive system is swerve drive (4 Independently rotating wheels), which allows for high speed, traction, agility, but is the most complex to assemble and program, making it popular in programs like FIRST Robotics Competition (FRC) and occasionally FIRST Tech Challenge (FTC).
I have been wanting to design a swerve drive module for quite some time, and have made attempts in the past that never came to fruition, but I hope I now created a design I can learn from, and that may improve the robotics experience for others.
This time, I wanted to fully leverage the technique of designing for 3D printing, so all manufactured parts should printable via any entry level 3D printer, hopefully making the project more accessible. I do not yet have a 3D printer, but that is the only missing element, some hopefully ill be able to complete a full module, or possibly even an entire drivebase, sometime in the future.
Cost and size were other important factors in this project, as multiple modules are required for a functional drivebase, and the overall size will be partially determined by the size of each module. So in the spirit of keeping the project manageable and able to fit on my desk, I designed around low cost components and a compact form factor.
Supplies
This project was based around the parts I have on hand due to cost and time sake, so some design elements could probably be optimized with more specific part selection.
For Project:
Parts:
- 55x68x7mm Round Bearing
- 10x19x5mm Flange Bearing (5x)
- 3x6x2.5mm Flange Bearing (2x)
- 540 Class Motor
- 390 Class Motor
- 200mm GT2 Timing Belt
- GT2 20T 5mm Bore Pulley (w/ 2x M4 Set Screws)
- M3 30mm Button Head Bolt (9x)
- M3 20mm Button Head Bolt (4x)
- M3 10mm Button Head Bolt
- M3 4mm Button Head Bolt (4x)
- M3 40mm Ultra Low Profile Bolt (4x)
- M2.5 6mm Bolt (2x)
- M3 Hex Nut (16x)
- M3 Washer (7x)
- 3D Printed Parts (PLA/PLA+, TPU)
Electronics:
- ESP32/Arduino
- Adafruit Motor Driver Board
- AS5600 Magnetic Encoder (w/ Magnet)
- 12V Power Supply/Battery
- Bluetooth Controller (Optional)
Tools:
- Screwdriver (Hex, Philips, & Flathead)
- 3D Printer
- Laptop/PC
Software:
- Arduino IDE/PlatformIO
For Design:
- Calipers
- CAD Software (Fusion, Onshape, Solidworks)
Design Inspiration
When designing my swerve module, it was important to consider different designs:
FTC style modules are far smaller to accommodate for the 18"x18" maximum robot footprint in that program. However, this footprint is achieved by utilizing expensive off-the-shelf parts. For example, a servo controls the steering of each module, with an built-in encoder that is used to track the angle of the wheel. These servos can easily cost ~$90, making it far too expensive for this project, even if it simplifies the steering aspect.
FRC modules vary heavily in shapes and sizes but are all much larger than their FTC counterparts. This means they are more expensive as well, with the increased cost of custom billet aluminum and gears. FRC style swerve modules tend to have more moving parts, as the cost of using two motors is that a larger gear reduction is necessary. They also feature external encoders, which measure the steering angle directly, instead of being included in another component.
I decided that my ideal swerve module would fall somewhere between these two current designs. By utilizing 3D printing, I can achieve some of the more complex geometries of the FRC modules, while borrowing some features from the FTC module to make certain aspects a bit simpler. I knew I could save money by using two cheap motors instead of a servo, and the added challenge of programming with the external encoder improves my knowledge of swerve code.
Layout Sketch
I started by creating a layout sketch that would dictate were each component would go, along with how gear and pulleys will mesh. This ensures there will be no horizontal interference between parts, and begins to visualize the top-down footprint of the module, allowing for size optimizations and real-time adjustments.
The sketch will be directly referenced when creating the final printed parts, so making sure it is accurate and functional is crucial.
Block CAD
After having a layout sketch conceptualized, I extruded many of the components that move in close proximity, such as gears and pulleys, to determine the vertical spacing and confirm there will still be no colliding parts. This blocky layout can also provide some crude measurements when designing the final parts, as the overall form becomes a lot clearer.
This step is technically optional, however I find that it actually increases efficiency as having a visual reference and a validated design greatly increases the pace of design and prevents major oversights.
Base/Motor Parts
These parts are the foundation of each module, as they constrain the gears and hold the bearings for steering. They also have M4 holes, that allow the module to be mounted to 20mm aluminum extrusion, making drivebase assembly simple and modular.
Slots in the top plate and a custom motor bracket allow for adjustability in the position of the drive motor which is useful in future steps.
Steering Gears
The steering is powered by a 390 class motor, which was chosen for its small size and lower speed requirements to turn the module.
The motor that I had on hand was ripped from a Roomba and already had a pinion pressed onto the shaft which was too small to mesh with 3D printed gears, however a gear can be printed that interfaces with the pinion instead of the small motor shaft. This gear is laterally supported by an M3 bolt in the top plate, which is contacted by a bearing inside of the gear.
An intermediate gear serves to increase the speed reduction and produce greater torque, as the motor needs to be capable of rotating the wheel against the ground when it is supporting a chassis. Finally, this intermediate gear spins the main steering gear which changes the direction of the wheel.
The main steering gear is printed with a shaft that extends to the top of the module. A magnet is glued to the top of this shaft, allowing for an accurate and direct angle reading from the magnetic encoder.
Drive Pulleys/Gears
The steering gears occupy a lot of space within the module and using a belt makes transferring power from the drive motor simpler and is better suited for the high speed conditions. The GT2 20 tooth pulley has a bore larger than the motor shaft so some shim tape or a custom sleeve will be needed in addition to the set screw to attach it.
The motor pulley is belted to a 40 tooth pulley and gear combo that spins around the shaft on the main steering gear. This freely spinning element is crucial as it allows the driving and steering components to rotate independently on the same axis.
The concentric gear engages with another gear connected to a shaft that transfers rotation down to the wheel. This final component is constrained within the main steering gear, and rotates with the wheel assembly, allowing the drive motor to power the wheel at any steering angle.
Wheel Assembly
The wheel assembly is the final puzzle piece of the swerve module. The wheel needs to be directly powered by the drive geartrain, and this is accomplished using a bevel gear system. By using a small bevel gear powered by the drive motor, and a large bevel gear on the wheel, the axis of rotation can be offset by 90 degrees.
The actual wheel consists of 3 elements, as there are 2 halves of a wheel hub (One with the bevel gear), and a outer tire piece. This allows the tire to be printed separately from a filament like TPU for better grip. It is also easier to experiment with different tread designs and iterate through prototypes faster in the future.
The wheel has 2 bearing which spin on an M3 bolt, allowing the entire hub and tire to be easily removed with one bolt, allowing for easy and efficient wheel swapping.
Everything is supported by the forks that hold the bolt for the wheel and constrain the driving bevel gear. These bolt up through the main steering gears and prevent it from moving upwards, creating a solid frame for heavy driving and steering.
Final Module
Finally, all of these parts come together into one assembly, however there are still some additions that can improve the quality of life for using these modules on an actual drivebase.
I created three different configurations for different mounting solutions. 2020 aluminum extrusion is what I have access to and the default configuration should be suitable for a lightweight prototype drivebase. However for more rigidity, I added the option to use 2040 extrusion along with a bottom bracket and spacer for support.
Reminiscent again of FRC, there is also the ability to add spacers to lower the drivebase frame further, resulting in a lower center of gravity and allowing for a more stable robot.
Unfortunately I am unable to finish building a prototype module as I do not have access to a 3D printer at this time. However the design should be ready to manufacture when that time comes.
The CAD files for the entire module are available below. I tried to minimize the number of 3D printed parts to make printing and assembly easier in the future.
Wiring
To control the module, I had an ESP32 lying around with a breakout board to make the ports more accessible. However the only motor driver board I had available was designed to stack on top of an Arduino Uno (Adafruit Motor Shield V2). This is slightly inconvenient but its still usable with a couple extra wires.
In order to connect the ESP32 to the Adafruit Motor Shield over I2C, GPIO pins 21 and 22 are connect to the SDA and SCL ports of the motor driver respectively. This allows the ESP32 to communicate, and the code would be exactly the same as it would be on an Arduino.
The ESP32 logic is powered from the 5V output from the motor shield. Along with both motors that are plugged into any of the M labeled ports. The entire system runs off of a 12V power supply connected to the motor shield, this could be a battery or an adjustable AC/DC converter.
*Not pictured is the AS5600 which also communicates over I2C but I lacked the time to solder and wire it to the ESP32.
Conclusion
Overall I believe this was a good design challenge for better understanding the swerve mechanisms and utilizing design for 3D printing.
The size, cost, and part restrictions were challenging limitations to work around however it sparked a lot of innovation and problem solving to achieve the desired result. In the future, I would like to expand on this project and develop it further, however I currently dont have the time or resources. The next steps include finishing the software, wiring, and prototyping tire tread designs.
I hope this project was of help to someone, as it taught me a lot.
Thanks,
-R.H.