Index exceeds the number of array elements (0).

24 次查看(过去 30 天)
I keep getting the error mentioned above. Index exceeds the number of array elements (0). Error (line 46) T4=RobotConv (0,L(k),0,0);
I have been trying to fix this but cannot get it to work. Does anyone have any tips on this?
clc;
clear all;
display('Joint 1');
display('=======================');
angle1=input('Please key in theta_1 (degree):');
d1=input('Please key in distance_1 (d):');
al1=input('Please key in alpha_1 (degree):');
display('Joint 2');
display('=======================');
angle2=input('Please key in theta_2 (degree):');
d2=input('Please key in distance_2 (d):');
al2=input('Please key in alpha_2 (degree):');
display('Joint 3');
display('=======================');
angle3=input('Please key in theta_3 (degree):');
d3=input('Please key in the minimum distance_3 (d):');
d4=input('Please key in the maximum distance_3 (d):');
al3=input('Please key in alpha_3 (degree):');
display('Joint 4');
display('=======================');
angle4=input('Please key in theta_4 (degree):');
d4=input('Please key in distance_4 (d):');
al4=input('Please key in alpha_4 (degree):');
L1=min(d3);
L2=max(d4);
L3=d4;
theta1=0:angle1/100:angle1;
theta2=0:angle2/100:angle2;
theta3=0:angle3/100:angle3;
L=L2:(L3-L2)/100:L3;
framemax=100;
M=moviein(framemax);
set(gcf,'Position',[100 100 640 480]);
for k=1:framemax
T1=RobotConv(theta1(k), d1, 0, al1);
T2=RobotConv(theta2(k), d2, 0, al2);
T3=RobotConv(theta3(k), d3, 0, al3);
T4=RobotConv(0, L(k), 0, 0);
p0=[0 0 0];
p1=RobotPosition(T1);
p2=RobotPosition(T1*T2);
p3=RobotPosition(T1*T2*T3);
p4=RobotPosition(T1*T2*T3*T4);
figure(1)
X=[p0(1) p1(1) p2(1) p3(1)];
Y=[p0(2) p1(2) p2(2) p3(2)];
Z=[p0(3) p1(3) p2(3) p3(3)];
subplot(221),plot3(X,Y,Z,'o-')
axis([-10 10 -10 10 0 10]);
grid
subplot(222),plot(X,Y,'o-')
axis([-10 10 -10 10]);
title('X-Y')
grid
subplot(223),plot(X,Z,'o-')
axis([-10 10 0 10]);
title('X-Z')
grid
subplot(224),plot(Y,Z,'o-')
axis([-10 10 0 10]);
title('Y-Z')
grid
M(k)=getframe(gcf);
end
function P = RobotPosition(T)
x = T(1,4);
y = T(2,4);
z = T(3,4);
P = [x y z];
end
function T = RobotConv(theta,d,a,alpha)
rad = pi/180;
M_theta = [cos(theta*rad) -sin(theta*rad) 0 0;sin(theta*rad) cos(theta*rad) 0 0;0 0 1 0;0 0 0 1];
M_d = [1 0 0 0;0 1 0 0;0 0 1 d;0 0 0 1];
M_a = [1 0 0 a;0 1 0 0;0 0 1 0;0 0 0 1];
M_alpha = [1 0 0 0;0 cos(alpha*rad) -sin(alpha*rad) 0;0 sin(alpha*rad) cos(alpha*rad) 0; 0 0 0 1];
T=M_theta*M_d*M_a*M_alpha;
end

回答(1 个)

Rushil
Rushil 2025-1-27,6:37
Hi Preston
Since the error occurs in the following line (in Line 46), it may be due to accessing the k” th index of “L”:
T4=RobotConv(0, L(k), 0, 0);
The array “L” is initialized using “L2” and ”L3” (in Line 37) as follows:
L=L2:(L3-L2)/100:L3;
The error probably occurs due to “L” being an empty array. Perhaps you can investigate the size of “L”, and further, the values of “L2” and “L3”.
Moreover, a problem very similar to this has been discussed at the following link:
I hope you are able to resolve the problem and proceed.
larush

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

产品


版本

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by