MOTUS - Open-Source 3D Printed Robotic Arm
by alatorre in Workshop > 3D Printing
26380 Views, 326 Favorites, 0 Comments
MOTUS - Open-Source 3D Printed Robotic Arm
This is my entry for the Digital Fabrication Student Design Challenge. As a final degree project of my Industrial Design Engineering undergraduate degree at ELISAVA, I worked on a fully 3D Printed Open-Source robotic arm.
Using ELISAVA's methodology, the project has been developed following an inspiration phase, an ideation phase and finally an implementation phase. These phases include research and User-Centred Design, the specification of a value proposal, and the technical solution pertaining to the 3D modelling, material selection, FEA analysis and business model, among others.
The final result is MOTUS: a fully 3D printed robotic arm that has a reach of 600 mm and a payload of 0.5 kg, conceptualised and designed for use in academic settings. These results are supported by all the calculus and processes involved in the development part of the project.
The outcome is an affordable and flexible solution that can be enjoyed out by anyone interested in this field. It has been designed to give access to the academic and educational aspects robotics can support, fostering a creative environment in which users can learn-by-doing.
Supplies
- Arduino Mega 2560 R3 (x1)
- 17HS4401 (x2)
- 23HS41-1804S (x2)
- 35HT36-1004A (x1)
- 17HS19-1684S-PG19 (x2)
- TB6560 Stepper Driver (x7)
- 51120-2RS Bearing (x1)
- 6816-2RS Bearing (x1)
- 688-2Rs (x3)
- 6810ZZ (x2)
- AS5600 (x7)
- TCA9548A (x1)
- F322DM 10x1 Radial Magnet (x7)
- Pulley Wheel GT2 60T (x1)
- 6060/6082 T6 8x100 (x2)
- Belt GT2 400 mm (x1)
- Miscellaneous M3/M4/M5 DIN912 Bolts and Nuts
Design the Parts!
First and foremost, all the parts must be designed. Knowing that part of the goal of the project is to make it Open-Source and free for anyone to access, I decided to use Fusion360 as the selected software. Fusion360 works great for this project, as it allows not only for the actual product design aspects, but also simulations and animations.
Additionally, part of the challenge of this project is to design all the parts knowing that the manufacturing technology that will be mostly used is 3D printing. This is known as DfAM (Design for Additive Manufacturing). It is important think of the limitations that 3D printing has and design around them.
Taken from the gen3D website: "Design for Additive Manufacturing is the practice of designing a part or product that exploits the freedoms of additive manufacturing whilst adhering to the process limitations. The aim for all designers should be to minimise the production time, cost and risk of in-build failure, whilst maximising the functionality and quality of the components. We deliver our training and consultancy based on 4 key principles of design for additive manufacturing. An understanding of these principles will allow designers to create new designs that fully exploit the benefits of additive manufacturing and give the part the best opportunity of being a commercial success."
To learn more about this type of manufacturing mentality, here are some links:
Calculations
The first technical requirement is to know exactly which torques each motor will have to generate in order to move the different parts. To do so, different calculation (ranging from regular torque equations to moment of inertias) can be done. This section essentially revolves around all the calculations that will have to be done in order to ensure that the materials and components selected will hold up to the forces and strains they will be exposed to.
Print the Parts!
To get all the necessary parts to make the robot, these have to be 3D printed. I designed all the parts knowing that I would be using the printer I have at home: Anycubic Vyper. This means that some of the parts are very big. In the case of you having a smaller printer, some parts would need to be split and then glued together.
To print the parts, the parameters are as follows:
- Material
- PLA
- Layer height
- 0.2 mm
- Infill
- > 10%
- Shell thickness
- > 1.2 mm
- Nozzle size
- 0.4 mm
As of now, the files are being uploaded to the projects' GitHub. Please have some patience as this project is still in development and the GitHub will be updated almost daily in the coming months.
General Assembly
So as to make assembly easier, included in this Instructable are the assembly blueprints. These will aid in showing exactly how each part assembles together. The assembly breakdown looks like this:
MOTUS
- J0
- J0_Insert
- J0_BottomCover
- J0_Bottom
- J0_120T Pulley
- J0_Base
- J0_PulleyTop
- J0_MotorLid
- J0_Lid
- Tensor
- Tensor_Bottom
- Tensor_Center
- Tensor_Top
- J1
- J1_Base
- J1_BaseMiddle
- J1_BaseSide
- J1_Connector
- J1_J2Connector
- J1_MotorCover
- Planetary Gearbox
- Planetary_Bottom
- Planetary_Sun
- Planetary_Planet
- Planetary_Lid
- J2
- J2_Bottom
- J2_Sides
- J2_Gearbox
- J3
- J3_Bottom
- J3_Side01
- J3_Side02
- J3_Top
- J4
- J4_Bottom
- J4_Side
- J4_Pivot
- J4_Top
- J5
- J5_P03
- J5_P02
- J5_P01
- J5_Lid
- Quick-Change
- QC_P1
- QC_01
- QC_02
- QC_P2
- QC_03
- QC_04
Downloads
Reductions
What are reductions?
Knowing the stepper motors for each of the joints, some of them don't have enough torque to successfully move. This was known when selecting them, as the larger their torque output the more expensive they are. As such, it was decided to try to develop mechanical solutions that could be 3D printed to increase this torque. These solutions are called torque multipliers or reductions. A reduction reduces the speed and increases the torque of the output shaft of a motor.
Planetary reductions
The selected type of reduction is a planetary reduction. A planetary reduction is a compact way of transmitting high levels of torque using few parts. The way it works is by having a driving sun gear (where the motor is attached) which gears with a series of planets. These in turn gear, which gears with an internal gear: causing them to move concentric to the sun gear.
Planetary reductions form the basis of the most common type of automatic transmission, known as the hydraulic planetary automatic transmission. Most modern automatic transmissions in the automotive industry use planetary gears. Planetary gears are also used in industrial machinery too: where guided robots, laser cutting machines, and even hospital operating tables use them.
Advantages of a planetary gearbox:
- Can transmit high levels of torque in a very small space
- Simple to design and calculate
- Small backlash
- Relatively light
Disadvantages of a planetary gearbox:
- More parts means higher chance of mechanical failure
- Difficult to assemble
- When 3D printed, gear profile prone to warping
3D printed gearbox
The 3D printed gearbox has a 10:1 reduction. The motor attached outputs 0.5 Nm, which means that the output shafts (the three protruding screws) have a theoretical output of 5 Nm. The truth is that in reality there are losses in this torque due to the friction between printed gears. This means that most likely between 30 to 50% of the theoretical output torque is actually lost to these factors. As such, we can assume that this gearbox actually produces a peak holding torque of 2.5 Nm and more optimistically of 3.5 Nm.
Bearings
What are bearings?
Smooth operation and movement will be extremely important in the design of a robotic arm. To achieve smooth rotations, different bearings will be used. There are many types of bearings, including but no limited to:
- Ball bearings
- Roller bearings
- Linear bearings
- Plain bearings
- Flexure bearings
- Radial bearings
Out of all these types of bearings, the one selected to experiment 3D printing on is the Ball bearing.
Ball bearings are a device with a a collection of balls (usually steel) in a sleeve. The top and bottom of the sleeve are not connected, as the top moves one way, the bottom moves the other, and the balls roll, reducing friction. They are essentially very good at reducing friction. They do this by reducing the amount of surface area that is in contact between two moving surfaces. The balls inside the ball bearing reduce friction by rolling, which produces a lower frictional force than sliding.
The issue with bearings (of any kind) is that their price dramatically increases with their size. A bearing with an outer diameter of 80 mm can be over 30 euros. As such, part of the challenge is to be able to design a bearing of any size parametrically to be 3D printed. Of course, this bearing won't be as good as an all metal one but it will for sure be cheaper and easier to replace.
3D Printed Bearings
To design a parametric print-in-place bearing, the first step is to decide the dimension of the balls themselves. In this case, I chose ø5 mm balls. Next, one of the parameters that is also very important is the clearance or tolerance between the balls and the walls of the two halves of the bearings. Knowing the capabilities of the FDM printer I have at home, I went with 0.1 mm tolerance on each side. Finally, the spheres themselves can't be completely spherical. This is because the part of a 3D print that touches the build-plate needs to be flat. As such, the spheres are given a flat top and bottom.
What is very interesting of this final model is that everything prints directly. This means that there is no assembly required: the part is loaded into the printer and it is able to print a fully functional bearings straight out of the build-plate.
Quick-Change System
With all the actual motorised parts designed and manufactured, a Quick Change system was developed. The issue found was that if a gripper was attached to the robot arm at a given time, it couldn't be changed without disassembling a large part of the robot.
Having worked at a robotics start-up from 2020 to 2022, I had been exposed to various tools relating to robot arm end-effectors. Danish company OnRobot has solution which uses a combination of magnets and a spring-loaded latch. A design like that would be too complex to get working with 3D printed parts. Therefore, based on the idea of using magnets a simplified system was developed.
The system is essentially a rudimentary lock which can be actioned with a twist and is held in the locked position using magnets. This means that the axial movement is constrained with the actual geometry and rotation is constrained with magnets.
With the parts printed and assembled, everything worked out on the first try. The action was very smooth and the hold was quite good too. When a load was applied (of 1.5 kg), the hold was also very good. However, when this prototype was shown to Xavi Riudor he brought a very good point: if enough load is applied to one of the ends, the torque of one of the parts might be stronger than the magnetic force that holds the halves together. This would mean that parts would separate. To solve this issue, the parts were modified to use stronger magnets.
Electronics
The required electronics for the robot arm must solve different problems such as: how to get the motors to know their positions, how to actually move the motors, how to control the movements etc. As such, these can be divided into:
Stepper Motor Drivers
To power the stepper motors, the simplest way is to use a specific integrated device such as the TB6560 stepper driver. This integrated driver is capable of powering motors up to 35 V and up to 3 A. This simplifies the assembly and allows for a fast recovery in case of overheating. The most important factory, however, is that it allows for micro-stepping. A driver is capable of being programmed by flipping a series of switches integrated on the board. These change the running current that goes into the motor as well as the steps that it will take per revolution.
Position encoders
To control the position of the motors, an encoder is needed. There are some very good options which are very simple to integrate (such as the 600P/R rotary encoder). The issue with such solutions is that they are quite expensive (over 30€ each encoder), which is an issue as there are 6 motors that will need it. Something like a small rotary encoder or a potentiometer would also work but their angular accuracy is quite limited. This is because they work on the basis of an actual switch changing binary states, meaning that there are only so many incremental angular degrees can be achieved. It is important to have the largest range of angles (even to the hundreds in decimals).
As such, the selected encoder is a magnetic AS5600. This is a contactless system which measures the absolute angle of a diametric magnetised on-axis magnet. This encoder is designed for contactless potentiometer applications as well as applications that demand a high degree of accuracy. To integrate this encoder on a stepper motor, two small plastic pieces are designed to act as holders for the encoder itself. Additionally, a diametrically polarised magnet has to be blued to the shaft of the motor. Finally, the encoder+holder assembly can be slid on the back of the motor.
Furthermore, there are only 1 SDA and SCL port on an Arduino, and there are 6 encoders (each needing to connect to an individual SDA and SCL port). This means than I2C board has to be added to this set-up. In this case, the selected board is the TCA9548A. This board allows for up to 8 different I2C modules.
Fan
Seeing how the motor drivers can produce quite a bit of heat, a fan must be integrated into the electronics box. The selected fan is the HA60151V41000UA99. This fan can produce an airflow of 12.7 CFM, which is more than enough for this application.
Arduino
Knowing that each stepper motor driver outputs two wires that must be connected the Arduino, as well as each encoder outputting 4 wires each, there are more than 20 wires that must be connected at a time. As such, the only Arduino that can handle that many connections is an Arduino Mega 2560 R3.
E-Stop
A robotic installation like the one that is being worked on in this project requires fail-safes. In this case, an emergency stop button.
Power Supply
220 V (which is what is outputted by regular wall-sockets is too much for the drivers that are being used. As such, a power supply that can convert the 220 V to 24 V is needed. The selected one is the PS1-100W-SF, mostly due to its availability and low price.
So as to contain all the electronics, an electrical box can be used. This will be further explored in the coming chapters, but knowing the exact dimensions of the components yields an electrical box that is 130x210x280 mm. Conceptually, the use of an electrical box goes against the idea of Open-Source. The pragmatic truth, however, is that it is cheaper and safer to buy a ready-made box.
With the electronics box complete, every cable that has to be outputted to the motors of the robot or the encoders was soldered together to a three 24 pin female extension power. The male end of this extension power was soldered to the cables leaving the robot. This means that the robot arm and the electronics box don't have to be connected at all time: giving more freedom of movement and transportation.
Coding
This part remains in development, with the forwards kinematics developed and the inverse kinematics still a WIP.
Forwards Kinematics
The idea of forward kinematics is very straighforward: it is a way to move each joint independently of each other to reach a final desired position. This is the simplest way to move a robot, as all it is basic step commands to move each motor forwards and backwards. It was decided that the best way to actually create this control mechanically would be to have a small dedicated PCB which could be easily and directly plugged into an Arduino Mega.
This controller would have 3 buttons and 6 LEDs. With the left-most button, the joint that is being moved would be selected. Each LED would correspond to a joint. As such, with each button press, a different LED would sequentially light up. The other two buttons would allow for the selected joint to move backwards (middle button) and forwards (right-most button).
Using the AccelStepper library, each stepper was declared separately. Using an array for the LEDs and the steppers, with each button press a different void function would be activated for each stepper/LED.
By creating a very rudimentary plug-and-play PCB that goes right on the Arduino, we are essentially empowering a less tech-savvy user to be able to at the very least control and be able to find exact x, y and z coordinates.
Inverse Kinematics
The first thing that would need to be done would be to write an inverse kinematics. Contrary to direct kinematics (which is what the dedicated PCB was created for: being able to control the joint angles, thus giving Cartesian coordinates), inverse kinematics allows for the software to receive a Cartesian coordinate (in 6 degrees of freedom) and calculate the exact rotation that must take place in joint for a specified point of the robot to reach those coordinates. This involves some relatively simple maths, mostly revolving around trigonometry.
In the case of this project, this software didn't end up being written due to time constraints.
Downloads
MOTUS
MOTUS is a 6 DoF Open-Source robot arm that is almost completely 3D printed. It is controllable through software or using a remote control. In its extended position, MOTUS has a 600 mm reach and can lift loads up to 500 grams.
The robot's structure is fully printed using additive manufacturing technologies and its electronics are controlled with Arduino IDE. Furthermore, standardised components are defined on the bill of materials to enable and simplify the sourcing of components as well as overall assembly of the arm.
MOTUS has been developed by Elisava fourth year students of the Industrial Design Engineering degree. The goal is to give access to the acedemic and educational aspects that robotics can accomodate. Having a robot that is cheap, repairable and customizable fosters a creative university or school ecosystem in which users can acces and learn by doing. MOTUS brings digital manufactuing technology and Industry 4.0 to everyone.
PLAY!
Give a shot and let me know if you end up building it! This all still a very work in progress, and if anyone has any suggestions I am more than open to listen and work on it :)