Bspine trajectory planning

本文展示了一种基于B样条曲线的运动规划算法实现,通过定义节点向量、初始和末尾速度与加速度,生成平滑的位移、速度、加速度和Jerk曲线。算法使用MATLAB进行编程,通过求解线性方程组获得控制点坐标,进而得到连续且平滑的轨迹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

clc;clear;close;

t= [0,5,7,8,10,15,18];
q= [3, 2, 0, -2, -5, 0, 6, 12, 0, -3, 8]';

n=size(q,1)-1;

p=4;
NodeVector=[0, 0, 0, 0, 0, 2.5, 6, 7.5, 9, 12.5, 16.5, 18, 18, 18, 18, 18];
v0=2;
vn=-3;

a0=0;
an=0;

Base = zeros(n+1, 1)';


for a=1:size(t,2)
    
   for b=p+1:size(NodeVector,2)-p
       if t(a)>=NodeVector(b) && t(a)<NodeVector(b+1)||(a==size(t,2)&&t(a)==NodeVector(b))
            i=b;
       end
   end
   
   u=t(a);
   if u==18
      i=i-1; 
   end
    [B,D]= MyBaseFun(i, p , u, NodeVector);
    Base(a,1:size(B,2))=B';
    
end

i=5;
u=t(1);
der=3;
[B,D]= MyBaseFun(i, p , u, NodeVector);
[Ders]=MyDersBasisFuns( i,u,p,B,D,der,NodeVector);

Ders=[Ders,zeros(size(Ders,1),size(Base,2)-size(Ders,2))]
   
i=11;
u=t(size(t,2));
der=3;
[B,D]= MyBaseFun(i, p , u, NodeVector);
[Ders2]=MyDersBasisFuns( i,u,p,B,D,der,NodeVector);

A=[Base(1,:);Ders(2,:);Ders(3,:);Base(2:size(Base,1)-1,:);Ders2(3,:);Ders2(2,:);Base(size(Base,1),:)]

Point=inv(A)*q
Point=Point'

n=size(Point,2)-1;
d=1;
for u = min(t) :0.1: max(t)
  
    for k=p+1:size(NodeVector,2)-p
       if u>=NodeVector(k) && u<NodeVector(k+1)||(u==max(t))
            i=k;
       end
    end
    
   if u==18
      i=i-1; 
   end
   
    [B,D]= MyBaseFun(i, p , u, NodeVector);
    [Ders]=MyDersBasisFuns( i,u,p,B,D,der,NodeVector);
    Ders=[Ders,zeros(size(Ders,1),size(Base,2)-size(Ders,2))]
    Base2(1:size(B,2),1)=B';
    Base2=[Base2;zeros(size(Base,2)-size(Base2,1),1)];
    Ptemp = Point * Base2;
    Vtemp=Point*Ders(2,:)';
    Atemp=Point*Ders(3,:)';
    Jtemp=Point*Ders(4,:)';
    ut(d)=u;
    pt(d)=Ptemp;
    vt(d)=Vtemp;
    at(d)=Atemp;
    jt(d)=Jtemp;  
    d=d+1;
end

figure('name','BSpine位移曲线');

plot(ut,pt);

figure('name','BSpine速度曲线');

plot(ut,vt);

figure('name','BSpine加速度曲线');

plot(ut,at);

figure('name','BSpine Jerk曲线');

plot(ut,jt);

 

结果

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值