Intro: Open Deltabot
welcome to my first Instructable :->
I developed the idea of the open source deltabot in 2015 when looking into industrial robots such as robotic arms or CNC machines. They all serve different tasks and I was somewhat fascinated by the speed and precision of delta bots that are usually used for pick and place tasks. I want to share with you all details of a simple yet functional parallel robot (or delta (ro)bot) that you can make at your local Fab Lab with little to medium effort.
I am convinced about the fact that it can be improved on many levels; starting with the integration of a slicer etc. But for now, lets get started with this interactive one! *cheers*
sidenote: I will focus on the robot itself; the end effector still needs to be further tested! #soon
a platform for independent versatile and live-controlled delta robots. attach any effector: extruder, drill/mill, brush, graffiti, light source, scanner, camera..
Delta what? A delta robot is a parallel robot that is designed for precise and fast movements of light payloads, generally used for pick-and-place/pack operations. The deltabot is composed of three two-segment arms/legs mounted in 120 degree intervalls. The arms/legs use parallelograms to restrict the motion of the "wrist", the end effector. Wrist and elbow use ball magnets in order to keep the distance but not an certain angle, that is the magic of the kinematics and it's beautiful to watch how to position of the effector is actually constantly being negotiated between the three servos. What will it do? My intention is to create a platform for Deltabots that are entirely fab-able (apart from servos and ball magnets probably). My very first ideology was also to use second hand parts but since I still change the design, I might run out of time but I am sure it is possible! I aim for an exchangeable end effector. The interface will be done via Processing Software and use serial communication to drive the servos and motors. I am aiming for a scale bigger than desktop 3D printers and I can see also purpose in academia for an interactive machine like this. Who's done what beforehand? There are quite some Deltabots out there, 3d-printers or not, three of four legged, servo and stepper motor based. I decided to go for a servo based one because it doesn’t require those massive pillars on each corner. Three legs will do their job. I based the design upon many references I found around the internet and I will provide all the sources within the code or design files! The basic idea of establishing this platform is also that it’s hard to loose track in between the different designs and softwares. My machine will run on free software! yay
It is important to note that I went through several iterations of hardware, software and electronics. The workflow here presented is outlining the three to four subtasks but I propose you should do them in parallel in order to check for results :)) or think of some proxy setups like servos without anything attached to them.
Happy fabbing! visit my project page for more information:
Step 1: Software!
I was looking for a template code or something that would help me approach the idea of moving the deltabot in space and Arduino and Processing are my prefered tool in this case. I need to make and interface in Processing that will send out serial values that can be read in Arduino IDE to be translated into Servo positions. Also I gave a first go to using Firmata but I think I will stick to the serial communication due to it's easier use and more reliable connection. Basically I will use the computer mouse as an input to drive the machine and I reckon that building a delta robot is more than anything else about the correct interfacing. Here my intention of workflow (first image).
Implementing kinematics and GUI:
Kinematics of a Deltabot are pretty complex and not easy to understand if your background is not necessarily mathematics or related fields (second image). I found some articles that were dealing with the mathematical calculations of a deltabot and would work in Arduino/Processing eventually using serial communication. Matt Greensmith used the delta bot kinematic calculations from the Trossen Robotics Forum and added a controlP5 interface that works just perfectly! Just insert your dimensions, servo reaches, USB ports etc and you are ready to go! See here the "family tree" to understand where things were coming from (third image). Seeing here the slightly adapted GUI by Matt Greensmith to control my first machine! It is initially based upon a sketch from Principia Labs that I can't locate anymore in the internet but it uses controlP5 library to have a graphical user interface (GUI) in Processing and calculating in the background the calculations from the Trossen Robotics Forum. At the end, Processing sends out x,y,z Values via serialWrite and Arduino is listening via serialRead and with the servo.h library translating to Servo positions. It works! See in the video the "final" graphical user interface, it changes some details when turned on and off and connects all the values within the script. You can either change specific positions in x,y,z (top right, just click it and type it in) and the script will calculate necessary servo movements. Second option: drive x,y via a 2D screen + z slider or third, control each servo on its own. It almost runs in "real-time", having a low delay but certainly still some lags. You can find both the Processing (.pde) and the Arduino (.ino) sketches attached; if you need help with get these running please let me know in the comments and we can try to figure it out together!
For the ease of accessibility and early success, I propose using an Arduino Pro or Pro Mini unless you have access to a Roland Milling machine and the knowledge to make your own PCB :-)) You will find the necessary files in the step "Electronics"!
Step 2: Hardware!
Hope you are still eager to make this! Lets continue to the hardware part:
I spent quite some time in 3D modelling to understand servo freedoms and limitations, negotiating with the size of the overall machine. I finished modelling one arm / leg of the delta robot and printed some iterations of my designs. Since 3dprinting was too slow for my use I decided to go with lasercutting and I was happy to find some acrylic boards in the shop next door, trashed - so for free! I went to lasercut them on the MultiCAM 2000 machine that we have in FabLabBCN/IaaC. I had to redrill some of the holes because I didnt measure perfectly. This is the most central connection to the turning point so better make sure it fits super tight, any loose connections in here will multiply over the machine. This parts will be the biceps / upper arm of the machine .. I still believe though that I underestimated the over all stability - make sure to have a crazy rigid frame around it or fix it to a table etc; its quite powerful and will bounce around as you can see in the videos :))
I went to the shop to get some Aluminium rods of 6mm and 8mm diameter. I tried to cut them off with a saw first but they melted together (maybe to avoid ;) so I went to cut them one by one to pieces of roughly 49.5cm (a rod being 100cm). I measured, taped and sanded to reach the same length with all of them. Since I was already thinking of using ball magnets I needed something metallic in the arms and using a screw isn't a bad idea at all: you can fix it in the rod and still fix the real length by adjusting the length it stands out (I did the glueing it with epoxy resin) It is metallic so attracted by the magnets and the allen key head allows for pretty smooth movement on the surface of the ball magnet (lubricant may be useful). I took some alcohol to clean off the rods and used some tape to make it look nicer. See here the last steps of finishing the 6mm pieces that will be come the lower arms / forearms. It is important to be precise with the length of the rods as it will be needed as input in the software to calculate the trajectory! The 8mm aluminium rod I cut into 40mm long pieces. This length plus the part until the center point of the ball joint should be equivalent to the distance between the center points of the ballmagnets on the end effector below (forming a parallelogram). I filleted the edges, lasercut some small rings to keep distance when grabbing through the hole of the biceps (mid point being the axis of movement) and again used some tape. For the sake of travelling: I went back to my old home Milan, Italy and visited the amazing guys at WeMake FabLab. Since I contacted them beforehand they were happy to let me print my final pieces on their machines. They came out perfectly and were the last parts I needed in order to fit the ball magnets in place. I wish there was more real exchange between the Fab Lab Network. Grazie ragazzi, the pieces are perfect! #FabLabErasmus its amazing to know that anywhere you go - you can expect to meet the right people! I finished one site before putting it into place and then fix the other side. The acrylic rings could be even tighter or fixed with a zip tie to stay in touch, also here some lubricant would not be bad to lower the friction between the elements. I took the ballmagnets, put a screw on it to get the polarity right (also ballmagnets have a + and -)! I used epoxy glue to fix the ballmagnets with the right orientation into the 3d printed parts and so far it works very nicely and gets all the degree of freedoms it should have. Passing it through the two layers of lasercut acrylic of the biceps and the second side was fixed too (again, epoxy to make sure). The endeffector plate: again using ballmagnets and fixing them with epoxy resin to the lasercut acrylic. The metal parts are not necessary but I am sure I had a clue at a certain point what I was doing.. Again, check out the orientation of the magnets to apply equal forces of magnetism. Once the resin is hardened the part is happy to be tested. The middle hole is meant to attach different kinds of machines, anything you can think of basically..
Now that all the parts are the first time joint together and the ballmagnets seem to be stable enough and giving a lot of freedom it was time for some passive aerobics. Nothing broke! (Yes, machine is upside down - Video)!
Attached you find the files from the 3D Model, the files for 3D printing and the ones for lasercutting!
The 3D Model is upload in different files formats: .stl, .obj., .3dm
Step 3: Electronics
The servos I am using are drawing around 800mA peak at 4.5 to 6Veach. I went to a local hardware store and found cute mini power supply that provides 25W (5A at 5V). Turning the potentiometer I could trim it up to 5.91V as measured with the multimeter. I also did the cableing myself. For the output it is important to use V+ and V- and not the ground as we would if having a ground on the plug itself too (like in CH or elsewhere).
As mentioned earlier also a off-the-shelf Arduino will do the job! But here is how I did it:
I made a Barduino board! Instead of using the FTDI cable we also made the modified version for the FTDI chip that has been modified by our friend and colleague Yani in the FabLab Barcelona. Connecting both boards to your computer, opening Arduino Software. Check your USB port and it's ready to be programmed as a Arduino Pro or Pro Mini with ATmega328 (5V and 16Mhz). The pins are done via through-hole pins on the bottom. It´s programmed via the Arduino IDE as a Arduino Pro / Pro Mini. And now - finally - the GUI can communicate to Barduino! No Servos are connected yet but PIN13, one of the LED on the board is turning on and off when power for the servos are enabled (part of the script) as you can find attached in the software part ( check out the video).
See also in the images the final wiring with the power supply and the servos (connections on the other side).
You can find attached all the files and also the ones for machining your own PCB - let me know if something is unclear or ask your local FabLab instructor :)
Step 4: Final-ish Result
So time to get the machine in working position! I found a nice aluminium frame with wooden joints from a previous exhibition and fixed the machine in it with a threaded rod, some pieces of wood, fishing line to prevent (a little bit) pitch/roll/yaw. For the first tests I was again rigging up with Arduino UNO which gets its power supply via USB from the computer and the servos being connected to the power supply directly. Thanks to Martin who filmed the first movements of the full scale prototype! I was excited and happy that it went smooth!
This is a tricky one! If you followed my advices and thoughts about measurements and so on you probably will be in a very good range coming with the settings I put into the code. If you need to update please consider this page as very helpful: https://www.marginallyclever.com/other/samples/fk-...
For the final setup I was using my self-made Barduino board and it was working just fine! You can check out again the video at the beginning of this Instructable!
Well, that was it for now! I will constantly update the tutorial and make another one for myself to understand if my documentation is worth something! Drop me a message or comment here in the comment section, and check back frequently if you wish so. I also want to explain the point a bit more; this project serves as an open-source platform (both hardware and software) for this kind of deltabot. I would be glad to see your makes too !
I developed this project as part of my FabAcademy Diploma in 2015.
This course is based upon Neil Gershenfeld´s MIT course "How to make (almost) anything" and I found it very useful to learn different topics (one per week plus final project along the way). Please refer to the FA webpage for more information: http://fabacademy.org/