An industrial robot is generally a very complicated (and expensive) piece of engineering. It is mainly composed by a mechanical structure, that has to be quit rigid to avoid deformation but at the same time must be also light to reduce the inertia that the joints (motor) have to move.
Then there are the servomotors that, for each joint (there are 6 in total), controls the movements. These motors are usually controlled in closed loop and they provide very good performances in terms of repeatability and accuracy. These motors are controlled by a servo drive, that is the real brain and heart of the motor itself.
The drive read the feedback from the absolute encoder and, based on the commanded position imposed by the motion profile (I'll do a dedicated post to explain that), it switches the IGBT (or mosfet) to push the right ammount of current in the right coils. The servo drives are conneted to the controller trough a realtime fieldbus (profinet, ethercat, Etherenet/IP, ...).
The controller sends the command positions, let's say every millisecond, to all the 6 drives. The drives then have to control the motor in order to track this position with the lowest error possible (this is often called position error or lag error).
Usually we want the robot to be at a specific (x,y,z) position at a specific point in time with a particular orientation (pitch, roll, yaw). When we specify these coordinates we say that we are in the cartesian space. But how do we know at which angle every single servomotor has to be set in order to have a specific position and orientation for the end effector?
We can do it by using the inverse kinematics. This is a mathematical approach that led a software to compute the joints angles by starting from the cartesian space. When we talks about joints we say, try to guess... that we are in the Joint space!
The inverse kinematics is a quite complicated matter and usually this is always solved by the robot manifacturer in their own robot controller. The final user has just to express everything in the cartesian space and the (closed) software takes care of everything (inverse kinematics, sigularities, faults, initialization, ....)
Since I had the arm with just the drives and their electrical cabinet (without any schematics) I had to reverse engineer a lot of components in order to make the guy moving.
In this project I'll share with you the journey I've made to make this robot alive again.
This is the mess of the first days with the whole robot lying on the ground a with a very little space left to live