Robot not being plotted on 3D

25 visualizaciones (últimos 30 días)
Mohsina Zafar
Mohsina Zafar el 6 de En. de 2019
Comentada: Gustavo gomes el 29 de Mayo de 2023
Hello,
I want to plot a robot but it is not coming to be. A 2-D plane is being generated instead of 3D space. Attached is the code of robot. Please guide in this regard.
syms q1 q2 q4 a1 a2 d3 d4 t
%q1,q2,d3,q4 variable angle
% a1 a2 , d4 length robot
assume(a1,'real');assume(a1>0);
assume(a2,'real');assume(a2>0);
assume(d3,'real');assume(d3>0);
assume(d4,'real');assume(d4>0);
assume(q1,'real');
assume(q2,'real');
assume(q4,'real');
%INPUT MATRIX DEVAVIT HARTENBERG
A_01=[cos(q1) -sin(q1) 0 a1*cos(q1); sin(q1) cos(q1) 0 a1*sin(q1); 0 0 1 0; 0 0 0 1];
A_12=[cos(q2) sin(q2) 0 a2*cos(q2); sin(q2) -cos(q2) 0 a2*sin(q2); 0 0 -1 0; 0 0 0 1];
A_23=[1 0 0 0; 0 1 0 0; 0 0 1 d3; 0 0 0 1];
A_34=[cos(q4) -sin(q4) 0 0; sin(q4) cos(q4) 0 0; 0 0 1 d4; 0 0 0 1];
%MATRIX LAST DENAVIT HARTENBERG
A_04=A_01*A_12*A_23*A_34;
A_02=simplify(A_01*A_12);
A_03=simplify(A_02*A_23);
disp('MATRIX LAST')
A_04=simplify(A_04)
rE=A_04(1:3,4) % FINAL POINT FOR ACTIVITIES
%ROBOTICS SYSTEM TOOLBOX-PEER CORKE
L(1)=Link([0,0,0.5,0,0]);
L(2)=Link([0,0,0.4,pi,0]);
L(3)=Link([0,0,0,0,1]);
L(3).qlim=[0,0.3];
L(4)=Link([0,0.1,0,0,0]);
rob=SerialLink(L);
t=[0:0.005:4];
j=length(t);
for i=1:j
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
xE(i)= 0.3+0.2*(1+sin(5*t(i))*cos(t(i)));
yE(i)= 0.3+0.2*(1+sin(5*t(i))*sin(t(i)));
zE(i)=-0.3;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
A=xE(i);
B=yE(i);
D=-0.4^2+xE(i).^2+yE(i).^2+0.5^2;
s1=(D.*B-A.*sqrt(A.^2+B.^2-D.^2))./(A.^2+B.^2);
c1=(D.*A+B.*sqrt(A.^2+B.^2-D.^2))./(A.^2+B.^2);
q1_num(:,i) = atan2(s1,c1);
s2= (yE(i) -0.5.*sin(q1_num(:,i)));
c2= (xE(i) -0.5.*cos(q1_num(:,i)));
q2_num(:,i)= atan2(s2,c2)-q1_num(:,i);
d3_num(:,i) = -zE(i)-0.1;
q4_num(:,1)= q1_num(:,i)+q2_num(:,i);
end
figure
clf
hold on
grid on
axis([-1,1,-1,1,-1,1])
for i=1:length(t)
plot(rob,[q1_num(1,i),q2_num(1,i),d3_num(1,i),q4_num(1,i)])
plot3(xE(i),yE(i),zE(i),'b.')
pause(1/1000) %video
end
The error I get is in this line:
plot(rob,[q1_num(1,i),q2_num(1,i),d3_num(1,i),q4_num(1,i)])
Error:
Index exceeds matrix dimensions.
Error in SerialLink/plot>create_robot (line 469)
d = norm( d(4:6)-d(1:3) ) / 72;
Error in SerialLink/plot (line 252)
handle = create_robot(robot, opt);
P.S: I am using robotics toolbox by Pete Corke.

Respuestas (1)

Walter Roberson
Walter Roberson el 6 de En. de 2019
hold on
grid on
axis([-1,1,-1,1,-1,1])
You had not plotted anything to that axis before that point. It defaulted to 2D. The "hold on" freezes that current view by default, so even though you pass in a 3D view to axis(), if you were to call axis() it would return only a 2D view. This matters because the SerialLink plot routine assumes you are in a 3D view.
The cure is to call view(3) before hold on
  3 comentarios
Jubil Mahadevan
Jubil Mahadevan el 19 de En. de 2020
God Bless you man!
Gustavo gomes
Gustavo gomes el 29 de Mayo de 2023
you are my savior! thank you so much!

Iniciar sesión para comentar.

Categorías

Más información sobre ROS Toolbox en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by