Overview
MeArm is a 3 Dof open source robot arm which has various versions. It is considered as a hobby to learn basic concepts of a robotic arm such as, kinematics, embedded hardware, programming specially C, control, structure and assembly, and etc. This robot is similar to Motoman MPK50 which is particularly used for pick and place, packaging and palletizing applications, its special structure and morphology make it able to be more agile and dexterous in comparison to typical RRR robots. This case is designed via CAD softwares like SOLIDWORKS and then cut by laser on wooden sheets (MDF). Is includes 4 plastic gear SG90 servo motors, a Pro Mini 328P Arduino
, a USB to TTL UART Module, a Breadboard and breadboard wires, 5 volt AC DC power supply, and some electornic components. Joystick Module is optional for easier control.
Project Definition
During Advanced Robotics
course, as a personal desire, I proposed my lecturer to implement Inverse Kinematics via MeArm.
- At first, I had to derive Forward Kinematics of the robot, for this, it is necessary to know (/measure) geometry parameters of links, joints and frames, Denavit-Hartenberg parameters (DH).
- Then, set up the controller, structure and connection hardwares to have a reliable and contiuous connection between pc and MeArm (arduino).
- Next, writing the inverse kinematics algorithm (in C programming language), USART connection (it is recommended to use standard USART library to read and write data within you code), and gripper program.
The goal of the project was deploying the robot to manipulate an object in a structured path, send the initial coordination (defined in Cartesian space in world frame at the center of base vertical joint (x, y, z)) of the end-effector through UART, catch the object, send the desired coordination, finally, send the command to the gripper to release the object. For sending the commands, two micro switches are used; one for action, and the other for the gripper.
Challenges
SG90 servo motors do not have any feedback for position and velocity of motors, of course there is an internal closed-loop control system via a potentiometer circuit to dictate the exact position command, so it is not capable for applying position and velocity controllers.
For days I was investigating to find out torque of the motors to calculate Inverse Dynamics for some detection tasks like; applying proper torque to grasp unknown objects. I also did cumbersome trial and error to find Torque Constants of SG90 servos to calculate the torque via current observer, I used a 16-Bit ADS1115 ADS module to observe the consumption current for this purpose, while I didn’t notice that, it is a 15 € hobby servo motor not a MX-series of Dynamixel servo motors. SG90 servos are really inaccurate with a huge backlash and at most 1.8 kg.cm output torque.
Source Code
The source code is uploaded to MeArm_robot repository on GitHub. Also the related video post on my LinkedIn illustrates the procedure more. Email me if you have question.