3R Robot Manipulator
This project implements manual control of a 3R-manipulator using LabVIEW, XBox & Arduino and then a fully autonomous varient, whose inverse kinematic solution is implemented using C++.
Project details
I later designed this 3D 3R-manipulator for an automatic soil mapping project, which use the same skeleton as the first arm design in the club. So for easier understanding I am showing it here:
Manual Control using LabVIEW & XBox
The arm has three revolute joints (excluding end-effector). So, three servo motors with adequate torque have been used as actuators.
Also the keys of XBox are as below:
Here keys 14, 16 are analog keys whose output range from `- 32,000 to 32,000` and all the other keys are just boolean.
LabVIEW Control Panel
LabVIEW Block Logic
Because of all the wiring and absence of abstraction in blocks, it might seem a little clumsy, but the implementation is pretty straignt forward. For all the boolean inputs an `adder` or a `substracter` is connected and pressing a boolean input increases or decreases the servo angle. `if - else` containers have been used to clamp the variables from incrementing beyond joint angle limit. Whereas for analog inputs, use of a down-scaler has been made to map the analog input to range of joint angles. Also one servo we used has just a speed control, so double loop logic has been used in such case.
Autonomous Implementation
To skip theory head to code click here.
Here I'll be showing two ways of implementing inverse kinematic(IK) sollution.
- Mathematical IK sollution, which is easy to solve for upto 4-DOF 4R manipulators.
- A numerical method of IK sollution implemented using RoboticLibrary's API’s.
Simply put:
Forward kinematics
GIVEN THE TWIST AND JOINT ANGLES WE DETERMINE THE POSITION OF THE END EFFECTOR
Inverse kinematics
GIVEN THE POSITION OF THE END EFFECTOR WE DETERMINE THE TWIST AND JOINT ANGLES
Conventions
While solving any problem in cartesian space we assume some sign conventions (relative to something),
In our case let us assume,
a. Reference axis is the horizontal axis ||el to ground.
b. Angle measured anticlockwise away from reference axis is positive.
c. Angle measured clockwise away from reference axis is negative.
Here,
a) (X,Y,Z) is the point end effector needs to reach
b) (X3,Y3,Z3) is the end point of link 3 as shown
Our aim is to find twist angles i.e. angle of the link with respect to its previous link’s reference axis. In the figure the twist angles are 1 , 2 , 3 .
As you can see,
a) θ2 = α + β
b) Θ3 = 180 – (θ2 + γ)
IF THERE ARE ONLY TWO LINKS WITH REVOLUTE JOINTS AND ONLY ONE DEGREE OF FREEDOM THERE ARE ONLY TWO SOLLUTIONS
SOL2 IS MIRROR IMAGE OF SOL1
WHEN WE HAVE MORE THAN TWO LINKS OR TWO LINKS WITH MORE THAN ONE DEGREE OF FREEDOM, THEN THE SOLLUTIONS WILL BE INFINITE.
Process Flow of Program
POINT OF END EFFECTOR SHOULD BE (X,Y,Z) = (LpCOS θ1 , LpSIN θ1 , Z)
X3 = X – L4(COSθ4)(COSθ1)
= LpCOSθ1 – L4(COSθ4)(COSθ1)
Y3 = Y – L4(COSθ4)(SINθ1)
= LpSINθ1 – L4(COSθ4)(SINθ1)
Z3 = Z – L4SINθ4
Angle of the end effector can be determined using camera, angle of welding, angle of drilling etc accordingly. But in this we can hardcode or define the angle in the program because we can always lift block at 0 degree with respect to horizontal cartesian plane.