Past Projects (2020-2023)
Senior Design Quasi-Direct Drive Robotic Actuator (2023)
My senior design project was to develop a quasi-direct drive actuator for legged robotic applications. This actuator was designed with specific waterproofing, dust-proofing, as well as passive water cooling capabilities (flooded with mineral oil) in mind to improve performance in field environments that are thermally strenuous. The resulting motor module demonstrated a 33% improvement in stall torque capabilities and an order of magnitude higher performance during transient peak torque applications (applying high torques until stator exceeds critical safety temperatures).
The motor module consists of a U10II brushless motor, designed for heavy lift quadcopters, which was taken apart and a 6:1 reduction gearbox was added. The motor module had rotary shaft seals and gaskets to prevent any mineral oil from seeping out of the module during operation. The motor module also had a crossed roller bearing at the output to take axial and radial loads from any moment arms during operation.
Over the course of a semester, I CAD designed and manufactured, using a CNC mill running Mastercam, the entire motor module. This project was exceptionally difficult due to the GD&T required in designing a gearbox module. Many parts were designed with tolerance +/- 0.0005 thou due to press fits of bearings and gears. As both the engineer designing and the machinist creating, this project truly made me appreciate the GD&T process as well as how much additional effort goes into high tolerance machining.
First successful operation of motor module
Rotor and Sun Gear successfully integrated into stator and ring gear assembly
Planetary Gear Carrier assembly
Planetary Gear Carrier assembly successfully integrated into housing
Bottom plate of motor module CNC milled, slot added to allow for cable passthrough. One of many CNC milled parts in this project
Completed motor module assembly. Gaskets and rotary shaft seal added for liquid cooling.
2-DoF Robotic Quadruped (2020-2022)
I have been developing a 2 Degree of Freedom Quadruped robot for USC’s Robotic Locomotion and Navigation Dynamics (roboLAND) research lab. This robotic system is designed to be used as a test bed to understand robot-obstacle interactions and eventually better navigate terrain. My contribution to this project has been designing, building, and programing the entire robotics test bed.
Robot Design:
The basic design of the robot consisted of four 5 bar closed linkage leg modules with position feedback for propulsion, a raspberry pi with an adafruit servo bonnet is used for servo control and program execution, and an analog to digital converter is used to process the position feedback of the servos.
A major constraint of the original design was COVID restrictions. As campus was closed down, I was unable to utilize any additional tooling aside from hand tools and a 3D printer I had at home. This lead to a majority 3D printed design with the goal of building a prototype then sending the files over to the lab for a final version to be created. This major design constraint led to the development of 4 leg “modules” that consisted of completely 3D printed servo housings and leg geometries that were essentially all duplicates of each other. This allowed for easy bolting onto the ABS bellypan that could be machined with simple power tools and calipers. The raspberry pi housing is also 3D printed and bolted onto a smaller ABS plastic sheet which sandwiches a battery to the bellypan.
The leg design utilizes a 5 bar closed linkage design. This design was chosen over a 4 bar closed linkage design where the servos are coaxial. This is because these robots have significantly more length than width, thus a coaxial design would greatly reduce the workable interior area of the robot for raspberry pi and battery placement as well as reduce the width of the legs thus decreasing stability. A closed linkage design was chosen over an open chain as they are much lower in weight thus have a much higher max velocity with low power servos.
The problem with this design was weight. As the robot weighed over 1.3 kg, the small servomotors were unable to withstand the torque applied when the robot was in a horizontal stance with max torque applied. This was even worse for dynamic movements when additional torque is also applied. This led to a revised design utilizing significantly stronger servomotors capable of 5x higher stall torques.
This new design is quite similar to the V1 design except with slightly redesigned bellypan and servo housing designs to maintain overall robot geometry between legs.
The original 2-DoF robot (V1 and V1.5) is quite large, with a length of .4 meters. This large size is incompatible with the small obstacle field the lab has setup for the previous 1-DoF quadruped. Thus, a new V2 robot was designed with a significantly smaller form factor to work on this obstacle field.
The main constraints were actually mainly driven by servo choice and machining resources. The V2 robot was designed in tandem with the V1.5 robot, as I no longer had a use for the small servos previously on the V1 robot. This led me to design the V2 robot with the primary constraint of weighing under .8 kg with a leg range of motion of 7.5 cm. These values were driven by constraints of the original small servomotors torque specs that was on hand. The .8kg mass constraint also drove the decision behind having a completely 3D printed chassis and “unibody” design incorporating the bellypan with the servo holders. This removed the heavy ABS sheet body and heavy nuts and bolts for servo holder mounting to bellypan while maintaining rigidity through a much lighter 35% infill. The completely 3D printed chassis then incurred additional constraints of a maximum length of 250mm and width of 230mm which corresponds to the build area of my printer. This coincidentally also enables the V2 robot to be of similar size to the 1-DoF predecessor robot and utilize the same obstacle field. This small form factor explains the decision for offsetting servos to minimize their possible footprint.
Robot Programming:
The entire codebase is written in Python and then pushed to the pi for execution. In order to start, simple programs were created to execute simple leg movements from angle A to angle B. From this, inverse and forward kinematics programs were created to execute end effector position movement. A schematic for these files are available at the bottom of the page. The issue with forward and inverse kinematics is that it solely gives you initial and final theta values for servo positions corresponding to initial and final end effector positions. This means that the robot will go from initial to final end effector position at maximum speed, leading to jittery movement when multiple moves are combined together.
To remedy this, the Jacobian must be applied to find servo angular velocities given a current end effector position and velocity. Stringing this together for every end effector position and desired velocity should achieve smooth motion. The Jacobian requires the partial derivative of both the x and y end effector position with respect to the angular position of servo 1 and servo 2. This produces a 2×2 matrix of 4 equations that can be used to calculate angular velocities. The difficulty of this is in the way I calculated end effector position. To calculate a single end effector position, you must execute both of these equations:
There is also another set of two equations when the angular positions of the two servos switch whichever is greater. As can be seen, it will be extremely difficult to take the derivative with respect to theta_1 and theta_4 for each equation (theta_1 and theta_4 being the angular position of each servo). Thus, I created a Python function that will take all of the general robot leg parameters and yield the four Jacobian functions by taking each of their partial derivatives. This is done using the sympy library. From here, angular velocities can be calculated from end effector goal positions and velocities. As this is a current project, I am currently in the process of connecting multiple Jacobian calculations together to achieve smooth leg motion between two points at both constant and gradient velocities.
CNC Router (2020-2022)
I have completed a CNC router made from a MPCNC design. I was able to wire together the CNC controller board and send custom GCode commands to control the router