I am writing this while waiting for my “Robot Analysis” class at 11 am. Any of you who has basic knowledge about robotics, especially the kinematics must has ever heard the word Denavit-Hartenberg transformation. Well, I am not going to write about this method, but the other method which was AFAIK found the latest around 1971, if I am not mistaken.
I am not going to explain the whole theory, I will just show you the homework and Matlab program that I wrote for this transformation type. In Screw transformation, the reference and final point is arbitrarily chosen, this makes this method different to DH method.
Ok. Here’s the question:
Here’s the answer:
First we find transformation matrix using screw method. The screw axes location of Scorbot manipulator is shown in Table 1, then we define the reference, target position and then we can find the transformation matrix. With this transformation matrix we can derive the inverse kinematics.
a) Reference Position
Table 1. Screw Axis Location of Scorbot Manipulator | ||
Joint i |
Si |
Soi |
1 |
(0, 0, 1) |
(0, 0, 0) |
2 |
(0, -1, 0) |
(a1, 0, 0) |
3 |
(0, -1, 0) |
(a1 + a2, 0, 0) |
4 |
(0, -1, 0) |
(a1 + a2 + a3, 0, 0) |
5 |
(1, 0, 0) |
(0, 0, 0) |
u_{0} = [0, 0, 1]^{T}, v_{0} = [0, -1, 0]^{T}, w_{0} = [1, 0, 0]^{T}
and p_{0} = [a1 + a2 + a3, 0, 0]^{ T}
b) Target Position
u = [u_{x}, u_{y}, u_{z}]^{T}, v = [u_{x}, u_{y}, u_{z}]^{T}, w_{0} = [w_{x}, w_{y}, w_{z}]^{T}
and p = [p_{x}, p_{y}, p_{z}]^{T}
c) Transformation Matrix
By using MatlabÂ® (See the attached code) the transformation matrices are found (Use the matlab code)
d) Inverse Kinematics
You can derive the inverse kinematics using the direct kinematics matrices calculated using the Matlab program, not that difficult, so I will leave this solution to you.
Matlab(R) 2007a source code:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Homework chapter 2 Number 11 % Book: Robot Analysis % Name: Bondhan Novandy % Student ID: 2007214012 % % Description: This file describe the screw tranformation, the input is the % screw axis location coordinate Si and Soi (table), the % output is the transformation matrix % % Dependency : None % Note : Tested on Matlab(R) 2007a % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [output] = screw_transform(val_sx, val_sy, val_sz, val_sox, val_soy, val_soz, symTheta, joint_type) global REVOLUTE PRISMATIC REVOLUTE = 0; PRISMATIC = 1; % Declare the symbolic variables syms a11 a12 a13 a14 a21 a22 a23 a24 a31 a32 a33 a34 a41 a42 a43 a44 syms Theta syms sx sy sz t syms sox soy soz sx = val_sx; sy = val_sy; sz = val_sz; sox = val_sox; soy = val_soy; soz = val_soz; Theta = 0; Theta = symTheta; if joint_type == REVOLUTE t = 0; % angle is not zero elseif joint_type == PRISMATIC % Theta is 0 then Sin(0) = 0 and Cos(0) = 1 Theta = 0; % t is not zero else error('Joint type is wrong! REVOLUTE = 0 and PRISMATIC = 1'); end % Formula according to 2.132 % Rotation matrix a11 = (sx^2 - 1) * (1 - cos(Theta)) + 1; a12 = sx * sy * (1 - cos(Theta)) - (sz * sin(Theta)); a13 = sx * sz * (1 - cos(Theta)) + (sy * sin(Theta)); a21 = sy * sx * (1 - cos(Theta)) + (sz * sin(Theta)); a22 = (sy^2 - 1) * (1 - cos(Theta)) + 1; a23 = sy * sz * (1 - cos(Theta)) - (sx * sin(Theta)); a31 = sz * sx * (1 - cos(Theta)) - (sy * sin(Theta)); a32 = sz * sy * (1 - cos(Theta)) + (sx * sin(Theta)); a33 = (sz^2 - 1) * (1 - cos(Theta)) + 1; a41 = 0; a42 = 0; a43 = 0; % Translation Matrix a14 = (t * sx) - (sox * (a11 - 1)) - (soy * a12) - (soz * a13); a24 = (t * sy) - (sox * a21) - (soy * (a22 - 1)) - (soz * a23); a34 = (t * sz) - (sox * a31) - (soy * a32) - (soz * (a33 - 1)); a44 = 1; % Transform matrix output = [a11 a12 a13 a14; a21 a22 a23 a24; a31 a32 a33 a34; a41 a42 a43 a44];
Man this brings me back, I created a robot arm control program that would move the 6dof using the NI NuDrive to control the 6 stepper motors. No servos but once you get the encoders hooked up It’s about all the same.
I ended up solving the equation w/ a lot less finess and using coencentric circles to determine motor positions for the endpoint requested and then articulated the hand as needed.
Hi Norm, I am new in robotics field. What is ‘concentric circles’? Is it one of the transformation method? How about the Jacobian?