基于 Carsim 2016 和 Simulink的无人车运动控制联合仿真(三)

2019 年 4 月 29 日 泡泡机器人SLAM

简介


该节将简要说明模型预测控制的基本原理



1、运动学模型

使用自行车模型作为运动学约束



2、优化问题建模


上图为模型预测控制的一个示意图,在当前位姿下,使用运动学模型对后续n个时刻的位姿进行估计,使用非线性优化器求解出cost最小的控制量v和delta

该模型假设速度恒定,即只进行横向的控制,需要进行纵向控制时,请参考优达学城上的方法


目标函数

其中:

P,Q,R 为权重矩阵

cte为无人车的横向误差

phi_errror为无人车的姿态误差


等式约束项

不等式约束项


3、单步的MATLAB程序


主程序

clc
clear all

NP = 10; %预测周期数
dt = 0.05; %预测周期

x_start = 0;
y_start = x_start + NP;
phi_start = y_start + NP;
cte_start = phi_start + NP;
ephi_start = cte_start + NP;
delta_start = ephi_start + NP;
% 状态变量和控制变量的总个数
m = 6 * NP ;
% 向量var10个表示10个时刻x_start,第1120个表示10个时刻y_start,第2130个表示10个时刻phi_start,后续以此类推
var = zeros(m,1);


% 损失函数
func = @(var)cost_function( var,NP,dt );
% 约束条件
nlcon = @(var)nonlconstrict( var,NP,dt );
% 各个约束的上下界
cl = zeros( 6*NP+1,1 );
cu = zeros( 6*NP+1,1 );
% 方向盘转角的上下界(弧度)
for i = (5*NP+1):6*NP
cl(i)
= -0.45;
cu(i) = 0.45;
end
% 求解的初始化
state_intial = zeros(m,1);
% 求解器的设置
opts = optiset('solver','IPOPT','display','iter','maxiter',50,'maxtime',0.5);
% Create OPTI Object
Opt = opti('fun',func,'nl',nlcon,cl,cu,'x0',state_intial,'options',opts);
% Solve the NLP problem
[A,fval,exitflag,info] = solve(Opt,state_intial)
% 向量A为所求的解


目标函数


function cost = cost_function(var,NP,dt)

x_start = 0
;
y_start = x_start + NP;
phi_start = y_start + NP;
cte_start = phi_start + NP;
ephi_start = cte_start + NP;
delta_start = ephi_start + NP;

cte = 0;
ephi = 0;
delta = 0;
for i = 1:1:NP
cte = cte + var( cte_start+i )^2;
ephi = ephi + var( ephi_start+i)^2;
end
for i = 1:1:NP-1
delta = delta + ( var( delta_start+i+1 ) - var( delta_start+i ) )^2;
end

cost = 1*cte + 1 * ephi + 100*delta;
end


约束函数


function c = nonlconstrict( var,NP,dt )

x_start = 0;
y_start = x_start + NP;
phi_start = y_start + NP;
cte_start = phi_start + NP;
ephi_start = cte_start + NP;
delta_start = ephi_start + NP;

x_0 = 0;
y_0 = 0;
phi_0 = 0;
v = 5;
delta_0 = 0;
lf = 3;

c = zeros( 6*NP+1,1 );
for i = 1:1:NP
if i == 1
c( x_start + i ) = var(x_start + i ) - x_0 - v * cos( phi_0 ) * dt;
c( y_start + i ) = var(y_start + i ) - y_0 - v * sin( phi_0 ) * dt;
c( phi_start + i ) = var(phi_start + i ) - phi_0 - v /lf * tan( delta_0 ) * dt;
c( cte_start + i ) = var(cte_start + i ) - 3 + v * sin(phi_0) * dt;
c( ephi_start + i ) = var(ephi_start + i) - 0 + v/lf * delta_0*dt;
c( delta_start + i )= var(delta_start + i);
c( delta_start + i + NP)= var(delta_start + i) - delta_0 ;

else
c( x_start + i ) = var(x_start + i ) - var(x_start + i-1 ) - v * cos( var(phi_start + i-1) ) * dt;
c( y_start + i ) = var(y_start + i ) - var(y_start + i-1) - v * sin( var(phi_start + i-1) ) * dt;
c( phi_start + i ) = var(phi_start + i ) - var(phi_start + i-1) - v/lf * tan( var(delta_start + i-1) ) * dt;
c( cte_start + i ) = var(cte_start + i ) - 3 + v * sin( var(phi_start+i-1) ) * dt;
c( ephi_start + i ) = var(ephi_start + i) - 0 + v/lf * var(delta_start + i-1) * dt;
c( delta_start + i )= var(delta_start + i);
end
end
end


参考资料

https://github.com/ksakmann/CarND-MPC-Project

https://github.com/jeremy-shannon/CarND-MPC-Project


欢迎来到泡泡论坛,这里有大牛为你解答关于SLAM的任何疑惑。

有想问的问题,或者想刷帖回答问题,泡泡论坛欢迎你!

泡泡网站:www.paopaorobot.org

泡泡论坛:http://paopaorobot.org/bbs/


泡泡机器人SLAM的原创内容均由泡泡机器人的成员花费大量心血制作而成,希望大家珍惜我们的劳动成果,转载请务必注明出自【泡泡机器人SLAM】微信公众号,否则侵权必究!同时,我们也欢迎各位转载到自己的朋友圈,让更多的人能进入到SLAM这个领域中,让我们共同为推进中国的SLAM事业而努力!

商业合作及转载请联系liufuqiang_robot@hotmail.com

登录查看更多
16

相关内容

模型预测控制是一类特殊的控制。它的当前控制动作是在每一个采样瞬间通过求解一个有限时域开环最优控制问题而获得。过程的当前状态作为最优控制问题的初始状态,解得的最优控制序列只实施第一个控制作用。这是它与那些使用预先计算控制律的算法的最大不同。本质上模型预测控制求解一个开环最优控制问题。它的思想与具体的模型无关,但是实现则与模型有关。
最新《深度学习自动驾驶》技术综述论文,28页pdf
专知会员服务
153+阅读 · 2020年6月14日
【UCLA】基于深度神经网络的工业大模型预测控制,36页ppt
基于视觉的三维重建关键技术研究综述
专知会员服务
154+阅读 · 2020年5月1日
专知会员服务
84+阅读 · 2019年12月13日
MIT新书《强化学习与最优控制》
专知会员服务
270+阅读 · 2019年10月9日
【泡泡一分钟】通过学习轮式里程计和IMU误差的定位
泡泡机器人SLAM
132+阅读 · 2019年9月12日
无人驾驶开源仿真平台整理
智能交通技术
25+阅读 · 2019年5月9日
基于 Carsim 2016 和 Simulink的无人车运动控制联合仿真(四)
【机器人】机器人PID控制
产业智能官
10+阅读 · 2018年11月25日
李克强:智能车辆运动控制研究综述
厚势
20+阅读 · 2017年10月17日
Meta-Learning with Implicit Gradients
Arxiv
13+阅读 · 2019年9月10日
Learning to Importance Sample in Primary Sample Space
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
Arxiv
11+阅读 · 2018年5月13日
Arxiv
3+阅读 · 2018年4月9日
Arxiv
3+阅读 · 2015年5月16日
VIP会员
相关资讯
【泡泡一分钟】通过学习轮式里程计和IMU误差的定位
泡泡机器人SLAM
132+阅读 · 2019年9月12日
无人驾驶开源仿真平台整理
智能交通技术
25+阅读 · 2019年5月9日
基于 Carsim 2016 和 Simulink的无人车运动控制联合仿真(四)
【机器人】机器人PID控制
产业智能官
10+阅读 · 2018年11月25日
李克强:智能车辆运动控制研究综述
厚势
20+阅读 · 2017年10月17日
相关论文
Meta-Learning with Implicit Gradients
Arxiv
13+阅读 · 2019年9月10日
Learning to Importance Sample in Primary Sample Space
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
Arxiv
11+阅读 · 2018年5月13日
Arxiv
3+阅读 · 2018年4月9日
Arxiv
3+阅读 · 2015年5月16日
Top
微信扫码咨询专知VIP会员