一、问题描述
给定插补长度
L
L
L,速度限制
v
l
i
m
v_{lim}
vlim,加速度限制
a
l
i
m
a_{lim}
alim,加加速度限制
j
l
i
m
j_{lim}
jlim,计算总运动时间
T
T
T,规划归一化7次多项式
s
(
u
)
s(u)
s(u) (
u
=
t
/
T
u=t/T
u=t/T为归一化变量),使其满足以下条件:
{
s
(
0
)
=
0
s
′
(
0
)
=
0
s
′
′
(
0
)
=
0
s
′
′
′
(
0
)
=
0
s
(
1
)
=
1
s
′
(
1
)
=
0
s
′
′
(
1
)
=
0
s
′
′
′
(
1
)
=
0
(1)
\begin{cases} s(0)=0 \\ s'(0)=0 \\ s''(0)=0 \\ s'''(0)=0 \\ s(1)=1 \\ s'(1)=0 \\ s''(1)=0 \\ s'''(1)=0 \\ \tag 1 \end{cases}
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧s(0)=0s′(0)=0s′′(0)=0s′′′(0)=0s(1)=1s′(1)=0s′′(1)=0s′′′(1)=0(1)
并使得,7次多项式轨迹
l
(
t
)
l(t)
l(t)的最大速度
v
m
a
x
v_{max}
vmax,最大加速度
a
m
a
x
a_{max}
amax,最大加加速度
j
m
a
x
j_{max}
jmax满足:
{
v
m
a
x
≤
v
l
i
m
a
m
a
x
≤
a
l
i
m
j
m
a
x
≤
j
l
i
m
(2)
\begin{cases} v_{max}\leq v_{lim} \\ a_{max}\leq a_{lim} \\ j_{max}\leq j_{lim} \\ \tag 2 \end{cases}
⎩⎪⎨⎪⎧vmax≤vlimamax≤alimjmax≤jlim(2)
二、推导步骤
设归一化7次多项式为:
s
(
u
)
=
a
0
+
a
1
u
+
a
2
u
2
+
a
3
u
3
+
a
4
u
4
+
a
5
u
5
+
a
6
u
6
+
a
7
u
7
,
u
∈
[
0
,
1
]
(3)
s(u)=a_0+a_1u+a_2u^2+a_3u^3+a_4u^4+a_5u^5+a_6u^6+a_7u^7,u\in[0,1]\tag 3
s(u)=a0+a1u+a2u2+a3u3+a4u4+a5u5+a6u6+a7u7,u∈[0,1](3)
一阶导数为:
s
′
(
u
)
=
a
1
+
2
a
2
u
+
3
a
3
u
2
+
4
a
4
u
3
+
5
a
5
u
4
+
6
a
6
u
5
+
7
a
7
u
6
(4)
s'(u)=a_1+2a_2u+3a_3u^2+4a_4u^3+5a_5u^4+6a_6u^5+7a_7u^6\tag 4
s′(u)=a1+2a2u+3a3u2+4a4u3+5a5u4+6a6u5+7a7u6(4)
二阶导数为:
s
′
′
(
u
)
=
2
a
2
+
6
a
3
u
+
12
a
4
u
2
+
20
a
5
u
3
+
30
a
6
u
4
+
42
a
7
u
5
(5)
s''(u)=2a_2+6a_3u+12a_4u^2+20a_5u^3+30a_6u^4+42a_7u^5\tag 5
s′′(u)=2a2+6a3u+12a4u2+20a5u3+30a6u4+42a7u5(5)
三阶导数为:
s
′
′
′
(
u
)
=
6
a
3
+
24
a
4
u
+
60
a
5
u
2
+
120
a
6
u
3
+
210
a
7
u
4
(6)
s'''(u)=6a_3+24a_4u+60a_5u^2+120a_6u^3+210a_7u^4\tag 6
s′′′(u)=6a3+24a4u+60a5u2+120a6u3+210a7u4(6)
根据式(1)得:
{
a
0
=
0
a
1
=
0
a
2
=
0
a
3
=
0
a
0
+
a
1
+
a
2
+
a
3
+
a
4
+
a
5
+
a
6
+
a
7
=
1
a
1
+
2
a
2
+
3
a
3
+
4
a
4
+
5
a
5
+
6
a
6
+
7
a
7
=
0
2
a
2
+
6
a
3
+
12
a
4
+
20
a
5
+
30
a
6
+
42
a
7
=
0
6
a
3
+
24
a
4
+
60
a
5
+
120
a
6
+
210
a
7
=
0
(7)
\begin{cases} a_0=0 \\ a_1=0 \\ a_2=0 \\ a_3=0 \\ a_0+a_1+a_2+a_3+a_4+a_5+a_6+a_7=1 \\ a_1+2a_2+3a_3+4a_4+5a_5+6a_6+7a_7=0 \\ 2a_2+6a_3+12a_4+20a_5+30a_6+42a_7=0 \\ 6a_3+24a_4+60a_5+120a_6+210a_7=0 \\ \tag 7 \end{cases}
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧a0=0a1=0a2=0a3=0a0+a1+a2+a3+a4+a5+a6+a7=1a1+2a2+3a3+4a4+5a5+6a6+7a7=02a2+6a3+12a4+20a5+30a6+42a7=06a3+24a4+60a5+120a6+210a7=0(7)
由上式解得:
a
0
=
0
,
a
1
=
0
,
a
2
=
0
,
a
3
=
0
,
a
4
=
35
,
a
5
=
−
84
,
a
6
=
70
,
a
7
=
−
20
a_0=0,a_1=0,a_2=0,a_3=0,a_4=35,a_5=-84,a_6=70,a_7=-20
a0=0,a1=0,a2=0,a3=0,a4=35,a5=−84,a6=70,a7=−20
归一化7次多项式为:
{
s
(
u
)
=
35
u
4
−
84
u
5
+
70
u
6
−
20
u
7
s
′
(
u
)
=
140
u
3
−
420
u
4
+
420
u
5
−
140
u
6
s
′
′
(
u
)
=
420
u
2
−
1680
u
3
+
2100
u
4
−
840
u
5
s
′
′
′
(
u
)
=
840
u
−
5040
u
2
+
8400
u
3
−
4200
u
4
(8)
\begin{cases} s(u)=35u^4-84u^5+70u^6-20u^7 \\ s'(u)=140u^3-420u^4+420u^5-140u^6 \\ s''(u)=420u^2-1680u^3+2100u^4-840u^5 \\ s'''(u) = 840u-5040u^2+8400u^3-4200u^4 \tag 8 \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧s(u)=35u4−84u5+70u6−20u7s′(u)=140u3−420u4+420u5−140u6s′′(u)=420u2−1680u3+2100u4−840u5s′′′(u)=840u−5040u2+8400u3−4200u4(8)
令二阶导数
s
′
′
(
u
)
=
420
u
2
−
1680
u
3
+
2100
u
4
−
840
u
5
=
0
s''(u)=420u^2-1680u^3+2100u^4-840u^5=0
s′′(u)=420u2−1680u3+2100u4−840u5=0,解得
u
=
0
,
0
,
1
/
2
,
1
,
1
u=0,0,1/2,1,1
u=0,0,1/2,1,1,由于
s
′
(
0
)
=
s
′
(
1
)
=
0
s'(0)=s'(1)=0
s′(0)=s′(1)=0,故在两端点处的速度不是最大速度,此时归一化7次多项式的速度最大值为:
s
m
a
x
′
(
u
)
=
s
′
(
1
/
2
)
=
140
(
1
/
2
)
3
−
420
(
1
/
2
)
4
+
420
(
1
/
2
)
5
−
140
(
1
/
2
)
6
=
2.1875
s_{max}'(u)=s'(1/2)=140(1/2)^3-420(1/2)^4+420(1/2)^5-140(1/2)^6=2.1875
smax′(u)=s′(1/2)=140(1/2)3−420(1/2)4+420(1/2)5−140(1/2)6=2.1875。
令三阶导数
s
′
′
′
(
u
)
=
840
u
−
5040
u
2
+
8400
u
3
−
4200
u
4
=
0
s'''(u)=840u-5040u^2+8400u^3-4200u^4=0
s′′′(u)=840u−5040u2+8400u3−4200u4=0,解得
u
=
0
,
0.2764
,
0.7236
,
1
u=0,0.2764,0.7236,1
u=0,0.2764,0.7236,1,由于
s
′
′
(
0
)
=
s
′
′
(
1
)
=
0
s''(0)=s''(1)=0
s′′(0)=s′′(1)=0,故在两端点处的加速度不是最大加速度,归一化7次多项式的加速度最大值为:
s
m
a
x
′
′
(
u
)
=
m
a
x
(
∣
s
′
′
(
0.2764
)
∣
,
∣
s
′
′
(
0.7236
)
∣
)
=
7.5132
s_{max}''(u)=max(|s''(0.2764)|,|s''(0.7236)|)=7.5132
smax′′(u)=max(∣s′′(0.2764)∣,∣s′′(0.7236)∣)=7.5132。
令四阶导数
s
′
′
′
′
(
u
)
=
840
−
10080
u
+
25200
u
2
−
16800
u
3
=
0
s''''(u)=840-10080u+25200u^2-16800u^3=0
s′′′′(u)=840−10080u+25200u2−16800u3=0,解得
u
=
0.1127
,
0.5
,
0.8873
u=0.1127,0.5,0.8873
u=0.1127,0.5,0.8873。归一化7次多项式的加加速度最大值为:
s
m
a
x
′
′
′
(
u
)
=
m
a
x
(
∣
s
′
′
′
(
0.1127
)
∣
,
∣
s
′
′
′
(
0.5
)
∣
,
∣
s
′
′
′
(
0.8873
)
∣
)
=
52.5
s_{max}'''(u)=max(|s'''(0.1127)|,|s'''(0.5)|,|s'''(0.8873)|)=52.5
smax′′′(u)=max(∣s′′′(0.1127)∣,∣s′′′(0.5)∣,∣s′′′(0.8873)∣)=52.5。
因为:
l
(
t
)
=
L
s
(
u
)
(9)
l(t)=Ls(u)\tag 9
l(t)=Ls(u)(9)
两边对
t
t
t求导得:
v
(
t
)
=
L
s
′
(
u
)
d
u
d
t
=
L
T
s
′
(
u
)
(10)
v(t)=Ls'(u)\frac{du}{dt}=\frac{L}{T}s'(u)\tag {10}
v(t)=Ls′(u)dtdu=TLs′(u)(10)
上式两边对
t
t
t再求导得:
a
c
c
(
t
)
=
L
T
s
′
′
(
u
)
d
u
d
t
=
L
T
2
s
′
′
(
u
)
(11)
acc(t)=\frac{L}{T}s''(u)\frac{du}{dt}=\frac{L}{T^2}s''(u)\tag {11}
acc(t)=TLs′′(u)dtdu=T2Ls′′(u)(11)
上式两边对
t
t
t再求导得:
j
e
r
k
(
t
)
=
L
T
2
s
′
′
′
(
u
)
d
u
d
t
=
L
T
3
s
′
′
′
(
u
)
(12)
jerk(t)=\frac{L}{T^2}s'''(u)\frac{du}{dt}=\frac{L}{T^3}s'''(u)\tag {12}
jerk(t)=T2Ls′′′(u)dtdu=T3Ls′′′(u)(12)
为满足式(2),则对于所有
u
∈
[
0
,
1
]
u\in[0,1]
u∈[0,1]有:
{
L
T
s
′
(
u
)
≤
v
l
i
m
L
T
2
s
′
′
(
u
)
≤
a
l
i
m
(13)
\begin{cases} \frac{L}{T}s'(u)\leq v_{lim} \\ \\ \frac{L}{T^2}s''(u)\leq a_{lim} \\ \tag {13} \end{cases}
⎩⎪⎨⎪⎧TLs′(u)≤vlimT2Ls′′(u)≤alim(13)
上式写成:
{
T
≥
L
s
′
(
u
)
v
l
i
m
T
≥
L
s
′
′
(
u
)
a
l
i
m
T
≥
L
s
′
′
′
(
u
)
j
l
i
m
3
(14)
\begin{cases} T\geq\frac{Ls'(u)}{v_{lim}} \\ \\ T\geq\sqrt{\frac{Ls''(u)}{a_{lim}} }\\ \\ T\geq\sqrt[3]{\frac{Ls'''(u)}{j_{lim}} }\\ \tag {14} \end{cases}
⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧T≥vlimLs′(u)T≥alimLs′′(u)T≥3jlimLs′′′(u)(14)
为使上式恒成立,有:
T
≥
m
a
x
(
L
s
m
a
x
′
(
u
)
v
l
i
m
,
L
s
m
a
x
′
′
(
u
)
a
l
i
m
,
L
s
m
a
x
′
′
′
(
u
)
j
l
i
m
3
)
=
m
a
x
(
2.1875
L
v
l
i
m
,
7.5132
L
a
l
i
m
,
52.5
L
j
l
i
m
3
)
(15)
T\geq max(\frac{Ls_{max}'(u)}{v_{lim}},\sqrt{\frac{Ls_{max}''(u)}{a_{lim}} },\sqrt[3]{\frac{Ls_{max}'''(u)}{j_{lim}} })\\ = max(\frac{2.1875L}{v_{lim}},\sqrt{\frac{7.5132L}{a_{lim}} },\sqrt[3]{\frac{52.5L}{j_{lim}} })\tag {15}
T≥max(vlimLsmax′(u),alimLsmax′′(u),3jlimLsmax′′′(u))=max(vlim2.1875L,alim7.5132L,3jlim52.5L)(15)
T
T
T取等号以达到时间最短的速度规划。
三、MATLAB代码
clc;
clear;
close all;
syms us ue ps pe vs ve as ae js je real
%% 通用7次多项式
a = [1, us, us^2, us^3, us^4, us^5, us^6, us^7
0, 1, 2*us, 3*us^2, 4*us^3, 5*us^4, 6*us^5, 7*us^6
0, 0, 2, 6*us, 12*us^2, 20*us^3, 30*us^4, 42*us^5
0, 0, 0, 6, 24*us, 60*us^2, 120*us^3, 210*us^4
1, ue, ue^2, ue^3, ue^4, ue^5, ue^6, ue^7
0, 1, 2*ue, 3*ue^2, 4*ue^3, 5*ue^4, 6*ue^5, 7*ue^6
0, 0, 2, 6*ue, 12*ue^2, 20*ue^3, 30*ue^4, 42*ue^5
0, 0, 0, 6, 24*ue, 60*ue^2, 120*ue^3, 210*ue^4] \ [ps; vs; as; js; pe; ve; ae; je];
a = [simplify(a(1)), simplify(a(2)), simplify(a(3)), simplify(a(4)), ...
simplify(a(5)), simplify(a(6)), simplify(a(7)), simplify(a(8))]'
%% 归一化7次多项式
us = 0;
ue = 1;
ps = 0;
pe = 1;
vs = 0;
ve = 0;
as = 0;
ae = 0;
js = 0;
je = 0;
a = eval(a)
deltaU = 0.01;
u = 0 : deltaU : 1;
s = a(1) + a(2) * u + a(3) * u.^2 + a(4) * u.^3 + a(5) * u.^4 + a(6) * u.^5 + a(7) * u.^6 + a(8) * u.^7;
v = a(2) + 2 * a(3) * u + 3 * a(4) * u.^2 + 4 * a(5) * u.^3 + 5 * a(6) * u.^4 + 6 * a(7) * u.^5 + 7 * a(8) * u.^6;
acc = 2 * a(3) + 6 * a(4) * u + 12 * a(5) * u.^2 + 20 * a(6) * u.^3 + 30 * a(7) * u.^4 + 42 * a(8) * u.^5;
jerk = 6 * a(4) + 24 * a(5) * u + 60 * a(6) * u.^2 + 120 * a(7) * u.^3 + 210 * a(8) * u.^4;
figure(1)
set(gcf, 'color', 'w')
subplot(4, 1, 1)
plot(u, s)
hold on
plot([0 1], [1 1], 'r--')
plot([1 1], [0 1], 'r--')
title('归一化7次多项式位置曲线')
xlabel('u')
ylabel('s(u)')
box off
subplot(4, 1, 2)
plot(u, v)
hold on
plot(0.5, 2.1875, 'ro')
plot([0 0.5], [2.1875 2.1875], 'r--')
plot([0.5 0.5], [0 2.1875], 'r--')
title('归一化7次多项式速度曲线')
xlabel('u')
ylabel('s''(u)')
box off
subplot(4, 1, 3)
plot(u, acc)
hold on
plot(0.2764, 7.5132, 'ro')
plot([0 0.2764], [7.5132 7.5132], 'r--')
plot([0.2764 0.2764], [0 7.5132], 'r--')
plot(0.7236, -7.5132, 'ro')
plot([0 0.7236], [-7.5132 -7.5132], 'r--')
plot([0.7236 0.7236], [0 -7.5132], 'r--')
plot([0 1], [0 0], 'g--')
title('归一化7次多项式加速度曲线')
xlabel('u')
ylabel('s''''(u)')
box off
subplot(4, 1, 4)
plot(u, jerk)
hold on
plot(0.5, -52.5, 'ro')
plot([0 0.5], [-52.5 -52.5], 'r--')
plot([0.5 0.5], [0 -52.5], 'r--')
title('归一化7次多项式加加速度曲线')
plot([0 1], [0 0], 'g--')
xlabel('u')
ylabel('s''''''(u)')
box off
%% 归一化7次多项式实例化
L = 100; %mm
vlim = 200; %mm/s
alim = 1500; %mm/s^2
jlim = 15000; %mm/s^3
dt = 0.001; %s
T = max([(2.1875 * L) / vlim, sqrt(7.5132 * L / alim), (52.5 * L / jlim)^(1/3)]);
t = 0 : dt : T;
u = t / T;
if abs(t(end) - T) > 1.0e-8
t = [t, T];
u = [u, 1];
end
s = a(1) + a(2) * u + a(3) * u.^2 + a(4) * u.^3 + a(5) * u.^4 + a(6) * u.^5 + a(7) * u.^6 + a(8) * u.^7;
v = a(2) + 2 * a(3) * u + 3 * a(4) * u.^2 + 4 * a(5) * u.^3 + 5 * a(6) * u.^4 + 6 * a(7) * u.^5 + 7 * a(8) * u.^6;
acc = 2 * a(3) + 6 * a(4) * u + 12 * a(5) * u.^2 + 20 * a(6) * u.^3 + 30 * a(7) * u.^4 + 42 * a(8) * u.^5;
jerk = 6 * a(4) + 24 * a(5) * u + 60 * a(6) * u.^2 + 120 * a(7) * u.^3 + 210 * a(8) * u.^4;
pos = L * s;
vel = (L / T) * v;
acc = (L / T^2) * acc;
jerk = (L / T^3) * jerk;
figure(2)
set(gcf, 'color', 'w')
subplot(4, 1, 1)
plot(t, pos)
hold on
plot([0 T], [L L], 'r--')
plot([T T], [0 L], 'r--')
title('7次多项式位置曲线')
xlabel('t/s')
ylabel('pos/mm')
box off
subplot(4, 1, 2)
plot(t, vel)
hold on
plot(0.5*T, 2.1875*L/T, 'ro')
plot([0 0.5*T], [2.1875*L/T 2.1875*L/T], 'r--')
plot([0.5*T 0.5*T], [0 2.1875*L/T], 'r--')
title('7次多项式速度曲线')
xlabel('t/s')
ylabel('vel/ mm/s')
box off
subplot(4, 1, 3)
plot(t, acc)
hold on
plot(0.2764*T, 7.5132*(L / T^2), 'ro')
plot([0 0.2764*T], [7.5132*(L / T^2) 7.5132*(L / T^2)], 'r--')
plot([0.2764*T 0.2764*T], [0 7.5132*(L / T^2)], 'r--')
plot(0.7236*T, -7.5132*(L / T^2), 'ro')
plot([0 0.7236*T], [-7.5132*(L / T^2) -7.5132*(L / T^2)], 'r--')
plot([0.7236*T 0.7236*T], [0 -7.5132*(L / T^2)], 'r--')
plot([0 T], [0 0], 'g--')
title('7次多项式加速度曲线')
xlabel('t/s')
ylabel('acc/ mm/s^2')
box off
subplot(4, 1, 4)
plot(t, jerk)
hold on
plot(0.5*T, -52.5*(L / T^3), 'ro')
plot([0 0.5*T], [-52.5*(L / T^3) -52.5*(L / T^3)], 'r--')
plot([0.5*T 0.5*T], [0 -52.5*(L / T^3)], 'r--')
plot([0 T], [0 0], 'g--')
title('7次多项式加加速度曲线')
xlabel('t/s')
ylabel('jerk/ mm/s^3')
box off