归一化7次多项式速度规划

一、问题描述

  给定插补长度 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} vmaxvlimamaxalimjmaxjlim(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)=35u484u5+70u620u7s(u)=140u3420u4+420u5140u6s(u)=420u21680u3+2100u4840u5s(u)=840u5040u2+8400u34200u4(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)=420u21680u3+2100u4840u5=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)3420(1/2)4+420(1/2)5140(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)=840u5040u2+8400u34200u4=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)=84010080u+25200u216800u3=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} TvlimLs(u)TalimLs(u) T3jlimLs(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} Tmax(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

归一化7次多项式
归一化7次多项式实例化

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值