【MPC】实战:基于MPC的车辆自适应巡航控制 (ACC) 系统设计
目录
- 前言
- 一、定速巡航控制器
- 1.1 系统模型
- 1.2 MPC 控制器设计
- 1.2.1 鲁棒MPC
- 1.2.2 非线性MPC
- 二、固定车距巡航控制器
前言
ACC 简介:车辆自适应巡航控制系统(Adaptive Cruise Control, ACC)是一种智能驾驶辅助技术,通过雷达或摄像头实时监测前方路况,自动调整车速以保持安全行驶。当前方无车辆时,ACC 会按照驾驶员设定的目标车速进行定速巡航,减少驾驶疲劳;当检测到前方有车辆时,系统会自动调整车速,保持预设的安全车距,并在必要时减速甚至制动,确保行车安全。
一、定速巡航控制器
1.1 系统模型
设 v v v 为车辆的纵向速度, v r e s v_{res} vres 为目标速度,设 e = v − v r e s e=v-v_{res} e=v−vres, v ˙ r e s = 0 \dot{v}_{res} = 0 v˙res=0,有:
e ˙ ( t ) = v ˙ ( t ) − v ˙ r e s ( t ) = [ F ( t ) − F a e r o ( t ) − F r ( t ) ] / m \begin{align*} \dot{e}(t) &= \dot{v}(t) - \dot{v}_{res}(t) \\ &=[F(t) - F_{aero}(t) - F_{r}(t)]/m \end{align*} e˙(t)=v˙(t)−v˙res(t)=[F(t)−Faero(t)−Fr(t)]/m
其中 m = 1230 k g m = 1230kg m=1230kg 为车辆总质量, F F F 为总牵引力,
F a e r o = 1 2 ρ C d A F v 2 F_{aero} = \frac{1}{2} \rho C_dA_Fv^2 Faero=21ρCdAFv2 为空气阻力(设风速为 0 ), ρ = 1.206 k g / m 3 \rho = 1.206 kg/m^3 ρ=1.206kg/m3 为空气密度, C d ≈ 0.3 C_d \approx 0.3 Cd≈0.3 为空气阻力系数, A F = 1.6 m 2 A_F = 1.6 m^2 AF=1.6m2 为迎风面积,
F r = f m g F_r = fmg Fr=fmg 为滚动阻力, f = 0.004 + 2.5 × 1 0 − 5 v f = 0.004 + 2.5\times10^{-5}v f=0.004+2.5×10−5v 为滚阻系数, g = 9.8 m / s 2 g=9.8 m/s^2 g=9.8m/s2 为重力加速度。
设控制系统采样时间为 t s t_s ts,在 [ t 0 , t 0 + t s ] [t_0,~t_0+t_s] [t0, t0+ts] 时域内对两端做定积分,有:
∫ t 0 t 0 + t s e ˙ ( t ) d t = ∫ t 0 t 0 + t s [ F ( t ) − F a e r o ( t ) − F r ( t ) ] / m d t (A.1) \begin{align*} \int_{t_0}^{t_0+t_s} \dot{e}(t)~dt &= \int_{t_0}^{t_0+t_s} [F(t) - F_{aero}(t) - F_{r}(t)]/m~dt \end{align*} \tag{A.1} ∫t0t0+tse˙(t) dt=∫t0t0+ts[F(t)−Faero(t)−Fr(t)]/m dt(A.1)
由积分中值定理可知:
∫ t 0 t 0 + t s [ F ( t ) − F a e r o ( t ) − F r ( t ) ] / m d t = F ( ξ 1 ) − F a e r o ( ξ 2 ) − F r ( ξ 3 ) m t s \int_{t_0}^{t_0+t_s} [F(t) - F_{aero}(t) - F_{r}(t)]/m~dt = \frac{F(\xi_1) - F_{aero}(\xi_2) - F_{r}(\xi_3)}{m}t_s ∫t0t0+ts[F(t)−Faero(t)−Fr(t)]/m dt=mF(ξ1)−Faero(ξ2)−Fr(ξ3)ts
使用前向欧拉近似,有 F ( ξ 1 ) = F ( t 0 ) F(\xi_1) = F(t_0) F(ξ1)=F(t0), F a e r o ( ξ 2 ) = F a e r o ( t 0 ) F_{aero}(\xi_2) = F_{aero}(t_0) Faero(ξ2)=Faero(t0), F r ( ξ 3 ) = F r ( t 0 ) F_{r}(\xi_3) = F_{r}(t_0) Fr(ξ3)=Fr(t0),式 (A.1) 变为:
e ( t 0 + t s ) − e ( t 0 ) = F ( t 0 ) − F a e r o ( t 0 ) − F r ( t 0 ) m t s e(t_0+t_s) - e(t_0) = \frac{F(t_0) - F_{aero}(t_0) - F_{r}(t_0)}{m}t_s e(t0+ts)−e(t0)=mF(t0)−Faero(t0)−Fr(t0)ts
设 t 0 t_0 t0 时刻为状态 k k k,离散系统可写为:
e k + 1 = e k + t s m F k − F a e r o k + F r k m t s (A.2) e_{k+1} = e_k + \frac{t_s}{m}F_k - \frac{ F_{aero_k} + F_{r_k}}{m}t_s \tag{A.2} ek+1=ek+mtsFk−mFaerok+Frkts(A.2)
1.2 MPC 控制器设计
将系统 (A.2) 记为:
x k + 1 = A x k + B u k + D (A.3) x_{k+1} = Ax_k + Bu_k + D \tag{A.3} xk+1=Axk+Buk+D(A.3)
其中 x k = e k x_k = e_k xk=ek, u k = F k u_k = F_k uk=Fk, A = 1 A = 1 A=1, B = t s / m B = t_s/m B=ts/m, D = − ( F a e r o k + F r k ) t s / m D = - (F_{aero_k} + F_{r_k})t_s/m D=−(Faerok+Frk)ts/m,取 t s = 0.01 s t_s = 0.01s ts=0.01s.
为了加速平缓,且考虑路面附着极限,设总控制输入约束为:
− 0.4 m g ≤ u k ≤ 0.4 m g ≈ 4800 -0.4mg \le u_k \le 0.4mg \approx 4800 −0.4mg≤uk≤0.4mg≈4800
针对以上系统,显然我们有两种选择:(1)忽略非线性项,设计鲁棒MPC;(2)设计非线性MPC。
1.2.1 鲁棒MPC
(详细参考 【MPC】模型预测控制笔记 (5):抗干扰鲁棒MPC)
定义名义系统为:
z k + 1 = A z k + B v k (A.4) z_{k+1} = Az_k + Bv_k \tag{A.4} zk+1=Azk+Bvk(A.4)
定义误差为 r k = x k − z k r_k = x_k-z_k rk=xk−zk,设最终控制输入 u k = v k − K r k u_k = v_k - Kr_k uk=vk−Krk,误差状态方程为:
e k + 1 = ( A − B K ) e k + D e_{k+1} = (A-BK)e_k + D ek+1=(A−BK)ek+D
取 Q = 500 Q = 500 Q=500, R = 0.0001 R = 0.0001 R=0.0001,使用LQR计算得最优增益 K = 2216 K=2216 K=2216.
计算得终端代价权重 P = 27755 P = 27755 P=27755.
设控制器在误差 ∣ r k ∣ < 0.5 m / s |r_k|<0.5 m/s ∣rk∣<0.5m/s 下工作, ∣ K e ∣ < 1108 |Ke|<1108 ∣Ke∣<1108.
故设MPC控制约束为:
− 3692 ≤ v k ≤ 3692 -3692\le v_k \le 3692 −3692≤vk≤3692
取控制时域 N = 50 N = 50 N=50,在无约束下,无约束MPC计算得到的最优反馈增益 K m p c = [ 1 0 0 ⋯ 0 ] ( H T Q H + R ) − 1 H T Q G ≈ 235 K_{mpc} = [1~0~0~\cdots~0](\mathcal{H}^T \mathcal{Q} \mathcal{H} + \mathcal{R})^{-1}\mathcal{H}^T \mathcal{Q} \mathcal{G} \approx 235 Kmpc=[1 0 0 ⋯ 0](HTQH+R)−1HTQG≈235.
显然,在名义系统中,整个数域都是不变集,取不变集 Ω = [ − 10 , 10 ] \Omega = [-10,10] Ω=[−10,10],以满足 − K m p c Ω -K_{mpc}\Omega −KmpcΩ 在控制约束范围内。
根据以上约束设计终端不等式MPC.
通过Simulink-Carsim联合仿真:
function [vk, rk] = accRobustMPC(xCur, H, G, Qp, Rp, N, A, B)persistent lb ub tmpReshape tmpAin tmpbin options zCur V;if isempty(zCur)lb = -3692*ones(N,1);ub = -lb;tmpReshape = kron(ones(1, N-1), zeros(1));tmpReshape = [tmpReshape, eye(1)];tmpAin = [1; -1];tmpbin = [10; 10];options = optimoptions('quadprog','Algorithm', 'active-set', 'MaxIterations', 200, 'Display','none');zCur = xCur;V = zeros(N, 1);endHp = 2 * (H' * Qp * H + Rp);fp = 2 * zCur' * G' * Qp * H;Hp = 0.5 * (Hp + Hp');Ain = tmpAin * tmpReshape * H;bin = tmpbin - tmpAin * tmpReshape * G * zCur;V = quadprog(Hp, fp, Ain, bin, [], [], lb, ub, V, options);vk = V(1);zCur = A*zCur + B*vk;rk = xCur - zCur;end
设初始车速为 25 m / s 25m/s 25m/s,目标跟踪车速为 30 m / s 30m/s 30m/s,有以下结果:
名义系统 (A.4) 中状态 z k z_k zk趋于 0,但我们把模型中非线性项都视为了扰动,真实系统可稳定但误差不趋于0,最终有界.。
1.2.2 非线性MPC
详细参考 【MPC】模型预测控制笔记 (7):非线性MPC 设计非线性MPC:
function uk = nonlinearMPC(xCur, vRes, N)persistent lb ub UX;if isempty(ub)lb = -4800*ones(2*N,1);ub = -lb;UX = zeros(2*N, 1);endoptions = optimoptions('fmincon', 'Algorithm', 'sqp', 'Display', 'none');nonlconFun = @(UX) nonlcon(UX, xCur, vRes);UX = fmincon(@objfun, UX, [], [], [], [], lb, ub, nonlconFun, options);uk = UX(1);
end%% 代价函数
function f = objfun(UX) % XU = [u0, u1, ..., u(N-1), x1, x2, .., xN]N = length(UX)/2;U = UX(1:N);X = UX(N+1:end);% 定义权重矩阵Q = 500;R = 0.0001;Qp = kron(eye(N), Q);Rp = kron(eye(N), R);f = X'*Qp*X + U'*Rp*U;
end
%% 非线性约束
function [c,ceq] = nonlcon(UX, xCur, vRes)N = length(UX)/2;n = 1; % x维数p = 1; % u维度U = UX(1:N);X = UX(N+1:end);c = []; % 非线性不等式约束ceq = zeros(n*(N), 1); % 非线性等式约束ceq(1:n) = X(1:n) - model(xCur, U(1:p), vRes); % x1k = f(x0k, u0k);for i = 2:Nceq( (i-1)*n + 1 : i*n ) = X( (i-1)*n+1 : i*n) - model( X((i-2)*n+1 : (i-1)*n), U((i-1)*p + 1:i*p), vRes);end
endfunction xPlus = model(xCur, uCur, vRes)v = xCur + vRes;D = -(0.5*1.206*0.3*1.6*v^2 + (0.004 + 2.5e-5*v)*1230*9.8)*0.01/1230;xPlus = xCur + 0.01/1230*uCur + D;
end
得以下结果:
二、固定车距巡航控制器
未完待续…(又该忙了,感谢大家的支持与关注)