Построение позиции графика стыка робота не работает - PullRequest
1 голос
/ 15 апреля 2011

Я хочу написать команду для отображения уравнения положения робота и его графика. Это моя команда, но она не отображала график:

clear;
clc;

% initial position
theta1s=-150;
theta2s=-80;
theta3s=-50;
theta4s=-100;
theta5s=-180;

% final position
theta1f=20;
theta2f=100;
theta3f=80;
theta4f=50;
theta5f=180;

% time taken for movement
tf=input('time=')

% acceleration for every link
acc1=(4.*(20-(-150)))./(tf^2)
acc2=(4.*(100-(-80)))./(tf^2)
acc3=(4.*(80-(-50)))./(tf^2)
acc4=(4.*(50-(-100)))./(tf^2)
acc5=(4.*(180-(-180)))./(tf^2)

% blending time for every link
tb1=((0.5.*(tf))-(0.5.*(sqrt((((tf^2).*acc1)-(4.*(20-(-150))))./acc1))))
t = 0;
for x = 0:tf;
    t = t + 0.1;
    if 0<t<=tb1;
        y = theta1s+((0.5.*acc1).*(t^2));
    elseif tb1<t<=tf-tb1;
        y = (theta1s-((0.5.*acc1).*(tb1^2)))+(acc1.*tb1.*t);
    else tf-tb1<t<=tf;
        y = theta1s-((0.5.*acc1).*(tf.*t)^2);
    end

    plot(x,y,'r')
    title('Position Versus Time');
    xlabel('time in s');
    ylabel('position in m');
    grid on;
    drawnow;  
end

disp(y);

1 Ответ

1 голос
/ 15 апреля 2011

Вы можете заменить plot (x, y, 'r') на plot (x, y, 'r *').Таким образом, вы сможете увидеть отдельные точки.Также вам нужно будет добавить функцию «Hold on» после графика, чтобы иметь возможность наложения графиков для всех итераций.

Если вы хотите рисовать линии, но не отдельные точки, вам лучше переместить визуализацию из цикла,Вот модифицированный код:

clear;
clc;

% initial position
theta1s=-150;
theta2s=-80;
theta3s=-50;
theta4s=-100;
theta5s=-180;

% final position
theta1f=20;
theta2f=100;
theta3f=80;
theta4f=50;
theta5f=180;

% time taken for movement
tf=input('time=')

% acceleration for every link
acc1=(4.*(20-(-150)))./(tf^2)
acc2=(4.*(100-(-80)))./(tf^2)
acc3=(4.*(80-(-50)))./(tf^2)
acc4=(4.*(50-(-100)))./(tf^2)
acc5=(4.*(180-(-180)))./(tf^2)

% blending time for every link
tb1=((0.5.*(tf))-(0.5.*(sqrt((((tf^2).*acc1)-(4.*(20-(-150))))./acc1))))
t = 0;

% allocate memory for array
y = zeros(1, tf+1);

for x = 0:tf;
    t = t + 0.1;
    if 0<t<=tb1;
        y(x+1) = theta1s+((0.5.*acc1).*(t^2));
    elseif tb1<t<=tf-tb1;
        y(x+1) = (theta1s-((0.5.*acc1).*(tb1^2)))+(acc1.*tb1.*t);
    else tf-tb1<t<=tf;
        y(x+1) = theta1s-((0.5.*acc1).*(tf.*t)^2);
    end
end

plot(0:tf,y,'r')
title('Position Versus Time');
xlabel('time in s');
ylabel('position in m');
grid on;
drawnow;

disp(y);
...