多项式轨迹--五次多项式轨迹

本文总字数:3641,阅读预计需要:9分钟

在轨迹规划中,规划起始点与终点的加速度连续非常重要,如果在终点或起始点的端点处,加速度有跳变,对于乘坐舒适性有很大影响。采用五次多项式进行轨迹规划时,需要六个条件才能求解出五次多项式的6个系数,因此很容易找出这6个边值条件,分别是起始点的位置、速度、加速度以及终点的位置、速度、加速度。

​ 五次多项式形式:q(t)表示与t0时刻相距(t-t0)距离时多项式的值

(1-1)q(t)=a0+a1(tt0)+a2(tt0)2+a3(tt0)3+a4(tt0)4+a5(tt0)5

​ 起始点及终止点的条件:

q(t0)=q0,q(t1)=q1q˙(t0)=v0,q˙(t1)=v1q¨(t0)=a0,q¨(t1)=a1

这里定义T = t1 − t0 ,求得多项式系数为h = q1 - q0。

(1-2){a0=q0a1=v0a2=12a0a3=12 T3[20 h(8v1+12v0)T(3a0a1)T2]a4=12 T4[30 h+(14v1+16v0)T+(3a02a1)T2]a5=12 T5[12 h6(v1+v0)T+(a1a0)T2]

例一:

t0=0,t1=8,q0=0,q1=10,v0=5,v1=10,a0=0,a1=0.

clc;
clear
%轨迹定义条件
%% 左图
% t0s时刻初始条件
t0=0; q0=0; v0=0; acc0=0;
%位置和速度(a)
t1=8; q1=10; v1=0; acc1=0;
%利用公式(1-2)求系数
h = q1 - q0;
T = t1 - t0;
a0 = q0;
a1 = v0;
a2 = 1.0/2 * acc0;
a3 = 1.0/(2*T*T*T) * (20*h-(8*v1+12*v0) * T + (acc1-3*acc0)/(T*T));
a4 = 1.0/(2*T*T*T*T) * (-30*h+(14*v1+16*v0) * T + (3*acc0-2*acc1)/(T*T));
a5 = 1.0/(2*T*T*T*T*T) * (12*h-6*(v1+v0) * T + (acc1-acc0)/(T*T));
%轨迹生成
t=t0:0.1:t1;
%位置
q=a0+a1*power((t-t0),1)+a2*power((t-t0),2)+a3*power((t-t0),3)+...
    a4*power(t-t0,4)+a5*power(t-t0,5);
%速度
v=a1+2*a2*power((t-t0),1)+3*a3*power((t-t0),2)+4*a4*power(t-t0,3)+...
    5*a5*power(t-t0,4);
%加速度
acc=2*a2+6*a3*power((t-t0),1)+12*a4*power(t-t0,2)+20*a5*power(t-t0,3);
%绘图
subplot(3,2,1)
plot(t,q,'r');
axis([0,8,0,11])
ylabel('position')
grid on
subplot(3,2,3)
plot(t,v,'b');
axis([0,8,-1,2.5])
ylabel('velocity')
grid on
subplot(3,2,5)
plot(t,acc,'g');
xlabel('(a)');
ylabel('acceleration')
grid on

%% 右图
%时间
t0=0;
t1=8;
%位置和速度(a)
q0=0;
q1=10;
v0=-5;
v1=0;
acc0=0;
acc1=0;
%利用公式(1-25)求系数
h=q1-q0;
T=t1-t0;
a0=q0;
a1=v0;
a2=1.0/2*acc0;
a3=1.0/(2*T*T*T)*(20*h-(8*v1+12*v0)*T+(acc1-3*acc0)*(T*T));
a4=1.0/(2*T*T*T*T)*((-30*h +(14*v1+16*v0)*T)+(3*acc0-2*acc1)*(T*T));
a5=1.0/(2*T*T*T*T*T)*(12*h-6*(v1+v0)*T+(acc1-acc0)*(T*T));
%轨迹生成
t=t0:0.1:10;
%位置
q=a0+a1*power((t-t0),1)+a2*power((t-t0),2)+a3*power((t-t0),3)+...
    a4*power(t-t0,4)+a5*power(t-t0,5);
%速度
v=a1+2*a2*power((t-t0),1)+3*a3*power((t-t0),2)+4*a4*power(t-t0,3)+...
    5*a5*power(t-t0,4);
%加速度
acc=2*a2+6*a3*power((t-t0),1)+12*a4*power(t-t0,2)+20*a5*power(t-t0,3);
%绘图
subplot(3,2,2)
plot(t,q,'r');
axis([0,8,-5,30])
ylabel('position')
grid on
subplot(3,2,4)
plot(t,v,'b');
ylabel('velocity')
grid on
subplot(3,2,6)
plot(t,acc,'g');
xlabel('(b)');
ylabel('acceleration')
grid on
posted @   北极星!  阅读(1649)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
历史上的今天:
2020-11-21 Python中 No module named解决方法
点击右上角即可分享
微信分享提示