3 Star 6 Fork 1

涂志明/UGV-Path-Tracking-Algorithm

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
UGV_Kinematics_MPC_V_Delta.m 2.23 KB
一键复制 编辑 原始数据 按行查看 历史
NUDT_UGV_GROUP 提交于 2020-05-02 17:17 . First Version
function [control_cmd,error,MPCprediction] = UGV_Kinematics_MPC_V_Delta(Reference,VehicleParams,AlgParams,Vehicle_State,Control_ref)
[error, target_index] = calc_nearest_point(Reference, Vehicle_State);
cx=Reference.cx;cy=Reference.cy;cyaw=Reference.cyaw;ds=Reference.ds;
xref=cx(target_index);yref=cy(target_index);yawref=cyaw(target_index);
v_ref=Control_ref(1);delta_ref=Control_ref(2);
v=Vehicle_State(5);
state_ref=[xref;yref;yawref;];
state_actual=Vehicle_State(1:3)';
xbar=state_actual-state_ref;
xbar(3)=wrapToPi(xbar(3));
Nx=AlgParams.Nx;Nu=AlgParams.Nu;Tsim=AlgParams.N;T=AlgParams.ts;
wheel_base=VehicleParams.wheel_base;
Ad=[0 0 -v_ref*sin(yawref);
0 0 v_ref*cos(yawref);
0 0 0;]*T+eye(Nx);
Bd=[cos(yawref) 0;
sin(yawref) 0;
tan(delta_ref)/wheel_base v_ref/wheel_base/(cos(delta_ref))^2;]*T;
Abar_cell=cell(Tsim,1);
Bbar_cell=cell(Tsim,Tsim);
for i=1:Tsim
Abar_cell{i,1}=Ad^i;
for j=1:Tsim
if i==j
Bbar_cell{i,j}=Ad^(i-j)*Bd;
else
Bbar_cell{i,j}=zeros(Nx,Nu);
end
end
end
Abar=cell2mat(Abar_cell);
Bbar=cell2mat(Bbar_cell);
Qbar=AlgParams.Qbar;
Rbar=AlgParams.Rbar;
H=2*(Bbar'*Qbar*Bbar+Rbar);
H=(H+H')*2;
f=2*(Bbar'*Qbar*Abar*xbar);
ub=kron(ones(Tsim,1),[VehicleParams.Vmax-v_ref;VehicleParams.max_steer_angle-delta_ref;]);
lb=kron(ones(Tsim,1),[VehicleParams.Vmin-v_ref;VehicleParams.min_steer_angle-delta_ref;]);
tic;
options=optimset('Algorithm','interior-point-convex','Display', 'iter');
[Ubar,~,exitflag,~]=quadprog(H,f,[],[],[],[],lb,ub,zeros(size(ub)),options);
if exitflag==1
MPCprediction = Abar*xbar+Bbar*Ubar;
MPCprediction = reshape(MPCprediction,Nx,Tsim);
ref_i = round(target_index + (1:Tsim)*v*T/ds);
ref_i(ref_i>length(cx)) = length(cx);
Xref = cx(ref_i);Yref = cy(ref_i);Yawref = cyaw(ref_i);
MPCprediction(1,:) = MPCprediction(1,:) + Xref;
MPCprediction(2,:) = MPCprediction(2,:) + Yref;
MPCprediction(3,:) = MPCprediction(3,:) + Yawref;
Ubar(1:2)=Ubar(1:2)+[0.0001;0.0001];
control_cmd = Ubar(1:2)+[v_ref;delta_ref];
end
end
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Matlab
1
https://gitee.com/zhi_ming_tu/UGV-Path-Tracking-Algorithm.git
git@gitee.com:zhi_ming_tu/UGV-Path-Tracking-Algorithm.git
zhi_ming_tu
UGV-Path-Tracking-Algorithm
UGV-Path-Tracking-Algorithm
master

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385