机器人运动学轨迹规划(一)

对于一个机器人系统,一般都会经历加速、匀速、减速的运动过程。在整个运动过程中,速度随时间的变化曲线称为速度曲线。常见的速度曲线主要有:梯形曲线(T型)、S型曲线(S)、多项式曲线等。

对于一个梯形速度曲线,主要包括匀加速、匀速、匀减速过程。对于S型速度曲线,一般主要包括加加速、匀加速、减加速、匀速、加减速、匀减速、减减速,一共7段,所以一般又称为7段式。

同梯形速度曲线相比,S型速度曲线对电机和传动系统的冲击伤害会更小,但是在相同的最大速度和最大加速度喜爱,S型速度曲线在运动相同的位移下,其时间要更长。

下图一(figure1)和图二(figure2)分别是在运动相同的距离,设定相同的最大速度和最大加速度条件下的梯形速度曲线和S型速度曲线。在本文里,设定最大速度V=50mm/s,最大加速度a=10mm/s2, 运动距离L=500mm, 对于S型速度曲线而言,设定最大加加速度(又称jerk,加速度的导数)aa=4mm/s3。

机器人运动学轨迹规划(一)_第1张图片     机器人运动学轨迹规划(一)_第2张图片

可以看出,figure2运行相同的距离比figure1要长。但正如上文所介绍,梯形曲线相对于S型曲线对电机的冲击要大的多,上面两图的Matlab代码如下:

clc;clear;
%% input parameters
V = 50;    %% max speed
a = 10;     %% max acceleration
L = 500;  %% Distance
aa =4;     %% jerk aa = d(a)/dt    for s-curve speed mode
%% trapezoidal method(T style speed curve)
s1 = V*V/2/a;
t1 = V/a;
s2 = L-2*s1;
t2 = s2/V;
T = 2*t1+t2;
t = 0:0.01:t1;
v1 = a*t;
figure(1)
plot(t,v1);
hold on; grid on;
b = [t1,t1+t2];
c = [V,V];
d = [t1+t2,T];
e = [V,0];
line(b,c);
hold on;
line(d,e);
hold on;
axis([0,1.5*T,0,1.5*V]);
xlabel('time[s]');
ylabel('speed[mm/s]');
title('T-curve speed mode');

%% S-curve speed method
t_s1 = a/aa;
v_s1 = a*a/2/aa;
v_s2 = V-2*v_s1;
t_s2 = v_s2/a;
t_s3 = t_s1;
s_s1 = aa*t_s1*t_s1*t_s1/6;
s_s2 = v_s1*t_s2+aa*t_s1*t_s2/2;
s_s3 = (v_s1+v_s2)*t_s1+aa*t_s1*t_s1*t_s1/3;
s_s4 = L-2*(s_s1+s_s2+s_s3);
t_s4 = s_s4/V;
t_s5 = t_s3;
t_s6 = t_s2;
t_s7 = t_s1;
v_s5 = v_s2+v_s1;
v_s6 = v_s1;
s_s5 = s_s3;
s_s6 = s_s2;
s_s7 = s_s1;
t_s = 0:0.01:t_s1;
v_s = aa*t_s.^2/2;
figure(2);
plot(t_s,v_s);
hold on; grid on;
t_s = 0:0.01:t_s2;
v_s = v_s1+aa*t_s1*t_s;
plot(t_s1+t_s,v_s);
hold on;
t_s = 0:0.01:t_s3;
v_s = (v_s1+aa*t_s1*t_s2)+aa*t_s1*t_s-(aa*t_s.^2)/2;
plot(t_s1+t_s2+t_s,v_s);
hold on;
X = [t_s1+t_s2+t_s3,t_s1+t_s2+t_s3+t_s4];
Y = [V,V];
line(X,Y);
t_s = 0:0.01:t_s5;
v_s = V-aa*t_s.^2/2;
plot(t_s1+t_s2+t_s3+t_s4+t_s,v_s);
hold on;
t_s = 0:0.01:t_s6;
v_s = v_s5-aa*t_s5*t_s;
plot(t_s1+t_s2+t_s3+t_s4+t_s5+t_s,v_s);
hold on;
t_s = 0:0.01:t_s7;
v_s = v_s6-aa*t_s5*t_s+aa*t_s.^2/2;
plot(t_s1+t_s2+t_s3+t_s4+t_s5+t_s6+t_s,v_s);
hold on;
T_s = t_s1+t_s2+t_s3+t_s4+t_s5+t_s6+t_s7;
axis([0,1.5*T_s,0,1.5*V]);
xlabel('time[s]');
ylabel('speed[mm/s]');
title('S-curve speed mode');






上面的代码仅仅是画出了两条曲线。要想实现轨迹规划(位移、速度、加速度等于时间的关系),还需用到插补,并且对于S型速度曲线而言,并不是在所有的情况下,都有7段。例如没有匀速段,或者达不到设定的最大加速度或者最大速度等。这部分内容会在运动学轨迹规划(二)中介绍。

你可能感兴趣的:(机器人学,Matlab)