Skip to the content.

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:

20210727_130156

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:

xbox layout

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

image

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.

image

Autonomous Implementation

To skip theory head to code click here.

Here I'll be showing two ways of implementing inverse kinematic(IK) sollution.

  1. Mathematical IK sollution, which is easy to solve for upto 4-DOF 4R manipulators.
  2. 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

Top View


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.

img2

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

img5

SOL2 IS MIRROR IMAGE OF SOL1

img6

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

img7



img8img9


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

img10img10 1

img10 1img10


img10 3img10

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.