Hi there,
i would like to share our project, because I think it’s quite interesting and might help someone getting started. It’s our diploma thesis project for school, it’s hopefully going to be finished soon.
The entire robot arm was developed from the ground up with a budget of around 1500 to 2000 Euros, but the less the better. ~800 Euros were spent for all ODrives and motors and electronics, ~80 for the aluminium extrusions and the rest was spent on little things like bearings, screws or 3D printing filament, all in all we spent around ~1200 Euros I think.
The 3D model
Here you can see the current 3D model, modeled in Creo Parametric:
It has 4 axes, 3 are in a plane, I think you can imagine how it works. The fourth axis is the rotatory plate on the top. It’s a universal adapter plate and you can attach anything you want to it.
Festo Robotino
This robot arm is meant to be mounted on top of a Festo Robotino:
This is a mobile industrial robot from Festo, and it’s specifically developed for education and research. It is most often used for things like navigation or implementation of SLAM, which is a pathfinding system which uses a LIDAR sensor and generates dynamic point cloud maps on the fly, in other words it can navigate in unknown environments, even if something changes over time.
Our plan was to develop a robotic arm on top of it, which allows it to manipulate things and take part at international robotics championships for a comparatively low price.
Here you can see a side view of the robotic arm:
I hope it’s clear where the joints are located.
Everything is driven by tooth belts, the first axis has a reduction ratio of 1:25, the second 1:16.
The third axis is the entire orange casing where the fourth axis is mounted on and the fourth axis is the adapter plate.
All orange parts are 3D printed.
Here’s a cross section of axis 3 and 4:
This was the hardest part. The left pulley is mounted directly on the casing, which rotates it and the right pulley is led through into the casing, driving a bevel gear, which drives the fourth axis. This results into that when the third axis is supposed to be moved, axis 3 and 4 need to be moved at the same time. In other words the position of the third axis needs to be added to the fourth axis.
If you were to turn the left pulley, but keep the right pulley stationary, then both axes would move.
The logic
The 4 motors are controlled by 2 ODrives. They are controlled by an Arduino MEGA 2560 with the UART Native protocol. Because of that we have to use Firmware v0.5.1 because all newer versions have a bug which make UART native unusable, but with v0.5.1 it works.
The Arduino is the head of it and controls all 4 axes of the 2 ODrives. On the other side it’s connected to an SPI Ethernet adapter, one of these:
They work surprisingly well and incredibly fast. This way you can simply connect any PC to it and control the entire robot arm with a single Ethernet connection. We used a self-defined protocol which is very simple. It uses UDP/IP and simply sends very basic packets in regular intervals. The trajectory is calculated on the client PC and is streamed to the Arduino, so the packets include the target position and some other information and is streamed at an interval of 100 to 1000 Hz. We will have to do more tests to find out what frequency is really necessary, but I think around 200 to 300 Hz will be it. Then the PC streams data to the Arduino and the Arduino streams other data back to the PC and both streams are independent, timing-wise.
Since I created a very simple Inverse Kinematics and it turned out to be so simple, it will be done on the Arduino. I’m going to describe the IK in a separate post later.
That way the client PC on the other side of the UDP connection simply streams the x and y position, as well as the rotation of axis 3 and 4. The Arduino will then do the inverse kinematics, which makes the logic on the client a lot easier. The client will simply be a PC with a C++ program, which discovers any available robots with a UDP broadcast and then connects to it.
On the client there is a C++ library developed, which allows any new user to very simply for example change the y position in a loop, and a background thread will do the UDP streaming. Due to the IK on the Arduino the robot will move in a straight line up.
The goal is to make it as simple as possible to use, so that new users in the future will be able to control the robot arm without knowing anything about it.
Presentation
For our diploma thesis project for school we need a short video of it working, which simply shows everything. When everything is finished we will probably mount it on the Festo Robotino, use a laptop next to it or use the Robotino directly for the UDP host, depending on if it’s fast enough, we haven’t tried yet. Otherwise everything would be done on the Laptop, which controls the robot arm and the Robotino.
When it is mounted on the Robotino we will probably mount some sort of forks onto the adapter plate, which will then take up cardboard boxes and stack them, just to show that it is working and that the inverse kinematics are working.
Well, that’s mostly it.
That’s the most interesting things I can think of currently, but I have probably forgotten a lot. If you’re interested just ask something, i would be glad if I could help someone. More images of the real thing will follow when I get to do it.
Let me know if there’s something you would like to know!