Robot not being plotted on 3D

7 ビュー (過去 30 日間)
Mohsina Zafar
Mohsina Zafar 2019 年 1 月 6 日
コメント済み: Gustavo gomes 2023 年 5 月 29 日
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.

回答 (1 件)

Walter Roberson
Walter Roberson 2019 年 1 月 6 日
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 件のコメント
Jubil Mahadevan
Jubil Mahadevan 2020 年 1 月 19 日
God Bless you man!
Gustavo gomes
Gustavo gomes 2023 年 5 月 29 日
you are my savior! thank you so much!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeROS Toolbox についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by