Starting Summer 2022
Summer break after my first year of college I was looking for project ideas, and I was also motivated by a lot of YouTube videos from others attempting 3D printed robotics projects. I was specifically interested in a robot arm because of the amount of mechanical design that would have to take place, and also the fact that it would be a great learning experience to experiment with and program one. In the end, this choice resulted in a commitment to a long-term project which was at times very frustrating, but overall extremely rewarding.
Link below to skip ahead to recent demos:
-1m reach
-1 kg payload
-3D printed
-Rigid enough to lift payload with minimal flex
-Minimal backlash
Began the process with the wrist, figured it would be complex but small enough to prototype quickly
Started in CAD with the goal of creating a belt driven differential wrist
Wrist + forearm assembly
This was the first assembly I prototyped for this project
Above are a series of views of progressive iterations of the elbow and 4th axis
Above are build images from the elbow design process
Other subassemblies were being made in parallel with this one but the elbow was the most problematic
The elbow suffered from bad belt tension, belt skipping, low torque, and fragile parts throughout many of the earlier iterations
Elbow joint posed the most challenges during development.
Seven iterations of the elbow were designed, with four being fully implemented
Final design included:
Sturdier belts
Machined hubs
Larger axles
Precise gearboxes
Motor pulleys supported on both sides
Other joints had issues with backlash or lack of belt tension as well, not just the elbow
early version elbow testing
Cross section of the current upper arm of the robot.
Final design for 4th axis drive with off the shelf hub to eliminate plastic hub shearing problems.
Motor and gearbox installed with 3D printed interface for the lower arm and wrist to attach. Top section with outer bearing not pictured.
Another area of concern for me on the robot was the base joint, since it has to support a large moment due to the offset weight of the arm.
My solution for this was a number of larger thrust and ball bearings, but in the end a custom thrust bearing assembly was required to support the base out to the edge and eliminate significant flexing. A preload is applied to the custom thrust bearing via the central bolts which attach the rotating shoulder to the base.
Base before roller assembly
large sections of the base were reprinted to accommodate this new piece, but thankfully the problematic flex was eliminated.
A wire-frame view of the bearing carrier that was seated in a new version of the base joint.
Very early render
Middle stages
Current design
Summary of changes from the early render:
Over the course of the project I made a lot of small changes, but I tried to avoid completely redesigning parts in the hopes that I could finish eventually and save major changes for a version two. Some highlights of the changes from the first assembly to now include:
base: new base belt tensioner
shoulder: larger HTD belts, new tensioners, new motor mounts, larger mounting bolts
elbow: new motor mounts, HTD belts, aluminum hubs, new output pulleys, larger bearings, new gearboxes
axis 4: new gearbox, aluminum hub, new bearing assembly
wrist: wrist pulleys and gears, new tensioners, higher torque reduction, new side panels, stronger main body
Additional build photos below:
Electronics Summary:
The electronics are centered around an Arduino Mega 2560
Arduino interfaces with switches and sensors and drives the motors
8 stepper motor drivers with configurable microstepping and holding current
Powered by a 1000w 24v power supply
Current version includes:
Additional power distribution for a gripper.
A locking switch for turning the robot on, besides the emergency stop
The robot has sensors for homing but no joint encoders
Relies on the stepper motor accuracy for positioning
Robot electronics assembly
Controlled by an Arduino Mega 2560 which communicates with a python script.
One of the limit switches used on the arm for homing.
Hall effect sensor used on the arm. Magnets are embedded into the joints with 360 degrees of rotation.
Below are links to videos of some of the first successful tests of the robot:
Arduino runs code for homing the robot and sending pulses to motor drivers.
Initial software plan was as follows:
Interface the Arduino with a Python program over serial to receive low-level instructions (e.g., joint positions).
Human controller will create programs using a custom programming application on a computer.
The application will translate the programs into joint positions and send them to the Arduino.
Above is a demonstration of a simulator/controller program which I wrote in python. Using the Pyrender library and mesh files straight from Fusion360, this program was written as a starting point for controlling and programming this robot. There are definitely more robust solutions that already exist to do this, but I thought it might be interesting to try to create one myself as a programming exercise.
The above video is the result of a lot of work to derive the necessary equations and implement all of the posing of robot geometry in a custom program. This visualizer has grown since this video, but has been an extremely useful tool to verify the real robot will behave as intended and avoid damage.
troubleshooting robot movement was a lot easier with a visualizer
the wrist was supposed to orbit around a single point here
Added file browser
Added support for reading text file programs and scrolling through positions before sending to the robot
Added support for the robot to execute consecutive moves to positions
Added gripper support as a 7th element of a position command (6axes + gripper open/closed)
Eliminated the need for the joystick in controlling the robot
updated look for the visualizer
Added a startup screen to choose a file to run
New custom gripper:
Slimmer and more robust than the previous gripper
Also incorporates TPU fin-ray fingers which help grasp a wider variety of objects, these are also covered with natural rubber sheet for better grip
TPU allows fingers to deform significantly which allows the robot to better tolerate bad tele-op commands
Updated software to allow real-time* control of the robot with a 3D mouse
Tested the robot arm on a couple real tasks to see how it performed
*There is a still decent amount of latency which makes controlling the robot more difficult
I tested the robot on a dishwasher loading task. The low stiffness of the fingers was problematic for heavy objects, especially thin ones (such as ceramic plates).
The robot was able to place assorted small components back into an organizer, although the low stiffness of the fingers makes pulling and pushing the drawers more difficult.
The robot was able to operate for hours without excessive motor heat leading to any softening of the plastic
The belts seemed to maintain tension throughout testing and provided enough stiffness to lift moderately heavy objects (mugs, cups, etc.)
Limiting factor for certain objects is finger stiffness, although soft fingers also made the interacting with the environment possible without damage to the robot or its surroundings
The limited range of motion (180 degrees) of the 2nd to last wrist joint, as well as the spherical wrist configuration, seems to commonly result in singular or unreachable poses, these can be avoided but are a nuissance during most tasks
The robot is pretty slow
Mechanically the robot seems capable, it is not perfect but it definitely has potential as a platform to test and learn with
Implementing some form of autonomy for a task may be a reasonable next step