匀加速运动控制

clc,clear all;


%******************************************
%main
%
%循环计算走到目标点;
%
%*****************************************

%init param;
FR=60;
%case1
% Xi=[0,0];
Xi=[0,0];
Xf=[300,0];
 %Xf=[100,0];
CP=[200,200];
%plot param
i=0;
%位移和速度
SX=Xi(1);
SV=Xi(2);
d=SX-Xf(1);
%每个周期的循环计算;
%while(d>0.05 | d<-0.05 )
while((SV>3 | SV<-3 ) | SX<Xf(1))
Xi(1)=SX;
Xi(2)=SV;
[Phx,Phv] =zero_pathspeed(Xi,Xf,FR,CP);

%update current pos
SV=Phv;
SX=SX+Phx;
d=SX-Xf(1);
i=i+1;
pv(i)=SV;
px(i)=SX;
end

close all
figure(1);
plot(pv,'r');
hold on
plot(px,'b');

 

 

 

 

 

function [pathx,pathv] = zero_pathspeed(xi,xf,fr,ccp)
%***************************************:
%计算下一周期速度和角速度的
%input:
%param1-init state:Sx',Sy',Vx',Vy',Vw'当前速度和位移、角速度;
%param2-final state
%param3-Frame rate
%param4-capacity:Vx.max,ax.max,vw.max,aw.max;
%
%output:
%param1-当前时刻位移
%param2-当前时刻速度
%
%***************************************

vmax=ccp(1);amax=ccp(2);
t1=0;a1=0;s1=0;v1=0;
s0=xi(1);v0=xi(2);
sf=xf(1);vf=xf(2);
%起点到终点的距离
wf=sf-s0;

%case1,2.1,2.2,2.3,3

if (v0<0)
t1=-v0/amax;
a1=amax;
v1=v0+a1/fr;
s1=v0/fr+amax/2/fr/fr;
elseif (v0>=0 & v0<vmax & wf>(v0*v0)/(2*amax))
%s2=v0*()/amax+()*()/2/amax;
va=sqrt(wf*amax+v0*v0/2);
t11=(vmax-v0)/amax;
t22=(va-v0)/amax;
%case a 能达到vmax
if(t11<t22)
a1=amax;
t1=t11;
v1=v0+a1/fr;
if(v1>vmax)
    v1=vmax;
end
s1=v0/fr+amax/2/fr/fr;
%case b 能达到va
else
a1=amax;
t1=t22;
v1=v0+a1/fr;
if(v1>va) v1=va;
end
s1=v0/fr+amax/2/fr/fr;
end

elseif (v0==vmax & wf>(v0*v0)/(2*amax))
a1=0;
t1=wf/vmax-vmax/2/amax;
v1=vmax;
s1=v0/fr;
elseif (v0>0 & v0<=vmax & (wf-v0*v0/2/amax)<0.5)
a1=-amax;
t1=v0/amax;
v1=v0+a1/fr;
s1=v0/fr+a1/2/fr/fr;
elseif(v0>vmax)
a1=-amax;
t1=(v0-vmax)/amax;
v1=v0+a1/fr;
fprintf('elseif /n');
s1=v0/fr+a1/2/fr/fr;
else
fprintf('else /n');
v0=v0
v1=v1
wf=wf
end

pathx=s1;
pathv=v1;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值