Carsim Simulink自动驾驶仿真基于MPC的速度控制
Posted 薯一个蜂蜜牛奶味的愿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Carsim Simulink自动驾驶仿真基于MPC的速度控制相关的知识,希望对你有一定的参考价值。
本人也是刚开始探索,大家一起讨论一起进步!
项目介绍:
教程为北理工的无人驾驶车辆模型预测控制第2版,代码为开源代码。所用的仿真软件为Carsim2020.0和MatlabR2021a。使用MPC控制思想对车辆进行速度控制,并给出仿真结果。
效果如下:
基于MPC的速度控制
Carsim的基本配置
Carsim一共可以分为三大部分:
- 前处理:涉及对车型的选择和对工况的设置
- 计算:可以使用Carism直接计算,也可以外接其他计算软件,比如Matlab。
- 后处理:将运行的结果表现成动画和图像。
具体分布如下:
车型的选择
车型选择E-Class SUV,最好开一个新的Dataset。
工况设置
新开一个Dataset。因为我们需要在MATLAB中控制汽车,不需要模型自身施加驱动力和制动力所以驱动控制和制动控制设置为无。挡位选择自动升档。本项目无横向控制,所以转向盘选择”Driver path follower“控制。道路设置长一点,仿真设置120s,具体参数设置如下:
Carsim与Matlab的接口设置
在设置完前处理之后,准备使用MATLAB中的Simulink对其进行控制和计算。在计算那一栏的Model中选择Model:Simulink
。之后建立一个新的Dataset。具体设置如下:
这里的输入设置为IMP_THROTTLE_ENGINE
(油门输入)、IMP_PCON_BK
制动主缸压力[MPa]。
输出设置为车速和加速度:
设置好之后点击:Send to Simulink
Matlab 框架搭建
在使用Carsim发送过去数据之后,点击MATLAB中的Simulink,此时的Library Browser
中应该会出现Carsim S-Function
:
将Carsim S-Functioin
拖入Simulink模块,同时在User-Defined Functions
中找到S-Function
并拖入Simulink模块。构建如下图所示的框架:
这里稍微解释一下这个框架:
我们希望使用MPC对汽车的速度进行控制。对于MPC,我们的输入是自己设定的期望速度,汽车当前的速度和加速度,这些量暂且统一称为决策变量,根据这些变量,MPC计算之后会给出相应的控制,让汽车去调整到我们期望的速度,这里的控制是油门和制动主缸压力,这样就构成了一个反馈。因为在使用MPC的时候,我们还希望看一些其他量的变化,所以在MPC模块的输出不仅仅是两个控制量,还会有其他的量,使用Terminator
模块将不需要输入进Carsim模块终止掉。使用To Workspace
模块将MPC所有输出模块导入到MATLAB里面,方便画图。
如果不需要看其他参数,可以直接构建如下框架:
MPC速度控制理论
问题描述
汽车的速度控制可以参考下图(来自北理工的书):其可以分为上位控制器和下位控制器。
在机器人控制中可以分为底层控制-感知-决策
。感知方面其实我们默认是做好的,而且本例也不涉及。这个上位控制可以理解为决策,根据车辆的当前速度加速度状态和期望的速度,判断该如何进行加速度的选择。下位控制器可以理解为底层控制,当车辆做出决策给出应当进行的控制的时候,需要准确的进行这个控制实现。
速度跟踪MPC建模
车辆的纵向控制可以使用一阶惯性系统来表示:
a
˙
=
K
τ
d
(
a
d
e
s
−
a
)
\\dota=\\fracKτ_d(a_des-a)
a˙=τdK(ades−a)
其中
K
=
1
K=1
K=1为系统的增益;
τ
d
τ_d
τd为时间常数。将上式和速度加速度关系写成矩阵形式,变成状态方程:
x
˙
=
A
x
+
B
u
\\dotx=Ax+Bu
x˙=Ax+Bu
展开表示为:
(
v
˙
a
˙
)
=
(
0
1
0
−
1
τ
d
)
(
v
a
)
+
(
0
K
τ
d
)
a
d
e
s
\\left( \\beginarrayc \\dotv \\\\ \\dota \\endarray \\right)= \\left( \\beginarrayccc 0 &1\\\\ 0 & \\frac-1τ_d \\endarray \\right) \\left( \\beginarrayc v \\\\ a \\endarray \\right)+ \\left( \\beginarrayc 0 \\\\ \\fracKτ_d \\endarray \\right)a_des
(v˙a˙)=(001τd−1)(va)+(0τdK)ades
使用前向欧拉法,进行离散:
x
(
k
+
1
)
=
A
k
x
(
k
)
+
B
k
u
(
k
)
x(k+1)=A_kx(k)+B_ku(k)
x(k+1)=Akx(k)+Bku(k)
展开表示为:
(
v
(
k
+
1
)
a
(
k
+
1
)
)
=
(
1
T
s
0
1
−
T
s
τ
d
)
(
v
(
k
)
a
(
k
)
)
+
(
0
K
T
s
τ
d
)
a
d
e
s
(
k
)
\\left( \\beginarrayc v(k+1) \\\\ a(k+1) \\endarray \\right)= \\left( \\beginarrayccc 1 &T_s\\\\ 0 & 1-\\fracT_sτ_d \\endarray \\right) \\left( \\beginarrayc v(k) \\\\ a(k) \\endarray \\right)+ \\left( \\beginarrayc 0 \\\\ \\fracKT_sτ_d \\endarray \\right)a_des(k)
(v(k+1)a(k+1))=(10Ts1−τdTs)(v(k)a(k))+(0τdKTs)ades(k)
速度
v
v
v作为系统的输出,输出方程可以表示为:
y
(
k
)
=
C
x
(
k
)
,
C
=
[
1
0
]
y(k)=Cx(k),C=[1 0]
y(k)=Cx(k),C=[1 0]
以上就是模型预测控制中的模型建立。
系统的控制目标定义为:速度跟踪精度,同时还要避免过大的加速度和冲击。
J
=
∑
i
=
1
N
p
(
y
p
(
k
+
i
∣
k
)
−
y
r
e
f
(
k
+
i
∣
k
)
)
2
+
∑
i
=
1
N
c
(
Δ
u
(
k
+
i
)
)
2
J = \\sum_i=1^N_p(y_p(k+i|k)-y_ref(k+i|k))^2+ \\sum_i=1^N_c(Δu(k+i))^2
J=i=1∑Np(yp(k+i∣k)−yref(k+i∣k))2+i=1∑Nc(Δu(k+i))2
系统的约束为加速度及其变化率;
u
m
i
n
≤
u
(
k
+
i
)
≤
u
m
a
x
,
i
=
0
,
1
,
.
.
.
,
N
e
−
1
Δ
u
m
i
n
≤
Δ
u
(
k
+
i
)
≤
Δ
u
m
a
x
,
i
=
0
,
1
,
.
.
.
,
N
c
−
1
u_min≤u(k+i)≤u_max,i=0,1,...,N_e-1\\\\[1.5mm] Δu_min≤Δu(k+i)≤Δu_max,i=0,1,...,N_c-1
目录
2.2自动增益控制(Automatic Gain Control)
以上是关于Carsim Simulink自动驾驶仿真基于MPC的速度控制的主要内容,如果未能解决你的问题,请参考以下文章
将 Cpar 文件导入 2019 版的 Carsim 后,无法打开 video+plot 是什么问题?