I define my robotic arm with following code

% Link('d', 0.15005, 'a', 0.0203, 'alpha', -pi/2)
L(1) = Link([0  0.15   0    pi/2     0], 'standard');
L(2) = Link([0  0     0.15   0       0], 'standard');
L(3) = Link([0  0     0.15   0       0], 'standard');
L(4) = Link([0  0     0.15   0       0], 'standard');
% set limits for joints
 L(1).qlim=[deg2rad(-45) deg2rad(45)];
 L(2).qlim=[deg2rad(-45) deg2rad(45)];
 L(3).qlim=[deg2rad(-60) deg2rad(60)];
 L(4).qlim=[deg2rad(-50) deg2rad(50)];
 %build the robot model
rob = SerialLink(L, 'name','rob');
qready = [0 0 0 0]; % initial position of robot

And I solve inverse kinematic and plot robotic arm with code

 Td = transl([0.05 0 -0.20]);
q = rob.ikine(Td, qready,[1 1 1 0 0 0]);

Its results are 0 -139.0348635 82.65184319 -1.286384217 which is four angles named theta1, theta2, theta3 and theta4 respectively. Now the point is I gave joint limit for theta2 as -45 to 45 degree but result output is -139 degree. Same case with theta3. Why it is so? Another thing is when I plot these angles robotic arm cross each other as shown in figure. I want to know what is wrong with code or I'm missing any thing.

enter image description here


1 Answer 1


In the documentation of the Robotics Toolbox by Peter Corke it is stated that the ikine() method does not regard motion limits. (Notes -> Joint limits are not considered in this solution.)

You can cosider using ikcon() instead.

Solving the inverse kinematics does not guarentee a colision free pose of the robot. That is only guaranteed if a colision check is carried out or if the joint limits are respected (adn set correctly).

Furthermore I would advise to check the exit flag of the method solving the inverse kinematics to make sure that indeed it has found a solution

  • $\begingroup$ Thanks @50k4, When I used ikcon(), angles are within limit but the points I entered and points at which finally end-effector reached is different. I tried to use mask matrix [1 1 1 0 0 0] with ikcon(), but it shows error Error using optimset (line 76) Cannot use OPTIMSET to alter options created using OPTIMOPTIONS. Use OPTIMOPTIONS instead. Error in SerialLink/ikcon (line 92) problem.options = optimset(problem.options, options); How to solve error prolblem using ikcon(). $\endgroup$ Jan 17, 2017 at 8:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.