Reengineering SCORTEC-ER 1: a 5-DOF manipulator
The main scope of this work was the reengineering of an old manipulator we had in our lab: SCORTEC-ER 1.
At first we replaced the old controller with three microcontroller boards built by Ion Motion Control. Then we established a comunication between the microcontrollers and the computer using Visual Studio thanks to the Ion Motion Control libraries for C#. At least we moved to Matlab to take advantage of the Robotics Toolbox and Peter Corke libraries.
Scortec-ER has 5 joints and a gripper as End-Effector. Each joint is equipped with a DC motor and an encoder, both directly connected with the microcontroller board. Each board controls two joints; the gripper doesn’t have an encoder therefore the control of it is possible only with an open chain.
To avoid unnecessary stressing of the wires, all of them are placed inside the robot structure and each joint is bound by a mechanical limit.
According to the motor’s gear ratio and the accuracy of the encoder, it is possible to know the relationship between the encoder’s step and the angle of each joint.
The three boards are located inside the base of the robot and they are connected to the computer via USB.
To ease the control of the robot in Matlab, a basic structure of software was made in Visual Studio. This structure is made of two simple classes: Roboclaw and Giunto.
Roboclaw is the representation of the microcontroller board; it was made with the support of IMC‘s libraries. It contains all the methods necessary to communicate with the boards.
Giunto represents a single joint, it contains all the methods necessary to actuate the corresponding motor and read the values of the encoder. This class can be also used to calibrate each joint setting its encoder to zero when the joint limit is reached.
This solution was built and a .dll file was returned. The file was imported in Matlab using NET.addAssembly function; this is only possible in Windows as the .NET Framework is not available on the others OS.
Matlab offers many tools as the Robotics Toolbox and Peter Corke’s libraries to deal with the problems concerning robot control.
Using the Denavit–Hartenberg parameters, a model of the robot was created in Matlab. This model allowed us to study the kinematic problems and replicate the outcome with the real robot.
Thanks to the Robotics Toolbox it was possible to implement the estimate inverse kinematic in this way. First the robot’s model is created; in the following example it will be shown how to create the body and the first joint:
giunto1 = robotics.RigidBody('giunto1'); giuntoBase = robotics.Joint('giuntoBase','revolute'); giuntoBase.HomePosition = 0; giuntoBase.PositionLimits = [0 deg2rad(320)]; setFixedTransform(giuntoBase,dhparams(1,:),'dh'); giunto1.Joint = giuntoBase; robot = robotics.RigidBodyTree; addBody(robot,giunto1,'base')
and then it will next be shown how to evaluate the inverse kinematic:
ik = robotics.InverseKinematics('RigidBodyTree',robot); weights = ones(6,1); configSoln = robot.homeConfiguration; [configSoln, solnInfo] = ik('giunto1',T_H,weights,configSoln);
The next video will show the result of the previous inverse kinematic.
The next two figures illustrate the outcome of the robot’s movements.
The source code used in this work is available here.