Index exceeds the number of array elements (0).

2 ビュー (過去 30 日間)
Ryan DiTullio
Ryan DiTullio 2020 年 3 月 7 日
回答済み: Geoff Hayes 2020 年 3 月 7 日
Hey everyone. I need help with my code. The code worked fine when I only had 3 joints, but I needed to add a 4th joint and when I did that I started to get the error for T4 in line 40. Would someone please help! Thank you in advance:
clear;
clc;
disp('Joint 1');
disp('==================================');
angle1 = input('Please keyin theta_1 (degree): ');
d1 = input('Please keyin distance 1 (d): ');
al1 = input('Please keyin alpha_1 (degree): ');
disp('Joint 2');
disp('==================================');
angle2 = input('Please keyin theta_2 (degree): ');
d2 = input('Please keyin distance 2 (d): ');
al2 = input('Please keyin alpha_2 (degree): ');
disp('Joint 3');
disp('==================================');
angle3 = input('Please keyin theta_3 (degree): ');
d3 = input('Please keyin distance 3 (d): ');
al3 = input('Please keyin alpha_3 (degree): ');
disp('Joint 4');
disp('==================================');
angle4 = input('Please keyin theta_4 (degree): ');
d4 = input('Please keyin distance 4 (d): ');
al4 = input('Please keyin alpha_4 (degree): ');
theta1 = 0:angle1/100:angle1;
theta2 = 0:angle2/100:angle2;
theta3 = 0:angle3/100:angle3;
L = d2:(d3-d2)/100:d3;
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) p4(1)];
Y = [p0(2) p1(2) p2(2) p3(2) p4(2)];
Z = [p0(3) p1(3) p2(3) p3(3) p4(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

採用された回答

Geoff Hayes
Geoff Hayes 2020 年 3 月 7 日
Ryan - if line 40 is
T4=RobotConv(0, L(k), 0, 0);
then the error message must be because of the index k into array L. Since array L is only used here and initialized at line
L = d2:(d3-d2)/100:d3;
then I suspect that L is an empty array. You can confirm this by putting a break point at this line and using the MATLAB debugger to step through the code. Perhaps your choices of d2 and d3 are invalid here.

その他の回答 (1 件)

G A
G A 2020 年 3 月 7 日
lengths of L and framemax must be equal
try
L = d2:(d3-d2)/100:d3;
framemax = length(L);

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by