目录
前言
在【滑模控制】从理论到实战(1):理论基础中,介绍了滑模控制器的设计步骤(基于趋近律设计)。
本文将开始进入实战,设计基于滑模控制的FSAE牵引力控制系统(TCS)。
以下内容将包括动力学建模、控制器设计,以及如何使用MATLAB进行公式推导。
牵引力控制系统:当车辆轮胎与地面的摩擦力不足,车轮容易失去牵引力,导致打滑现象。当车轮转速过快时,车辆无法有效地加速或保持稳定行驶。牵引力控制系统通过监测车轮转速并对失去牵引力的车轮进行干预,减少或避免打滑,帮助车辆稳定行驶,提高车辆在不同路况下的适应性和稳定性。
系统建模
忽略滚动阻力等较小外力的影响,对车轮进行受力分析:
有:
J ω ˙ = T d − F x R e (1) J\dot{\omega}=T_d-F_xR_e \tag{1} Jω˙=Td−FxRe(1)
其中,
v
x
v_x
vx为车轮纵向速度,
J
J
J为车轮转动惯量,
ω
\omega
ω为车轮转速,
T
d
T_d
Td为驱动力矩(系统输入),
F
x
F_x
Fx为地面对轮胎的纵向力,
R
e
R_e
Re为车轮等效半径。
为了描述车轮的滑转程度,定义在驱动下的滑移率
λ
\lambda
λ为:
λ = ω R e − v x v x = ω R e v x − 1 \lambda=\frac{\omega R_e-v_x}{v_x} = \frac{\omega R_e}{v_x}-1 λ=vxωRe−vx=vxωRe−1
轮胎纵向力与载荷、滑移率有着以下曲线关系(横轴为滑移率,纵轴为轮胎纵向力,不同颜色曲线对应不同载荷):
如图所示,在一定载荷下,滑移率约在0.8~0.25的范围内达到最大的轮胎纵向力(牵引力),更大的滑移率反而会使牵引力下降。
在FSAE中,为了使赛车拥有最佳的加速性能,在加速过程中需要避免过大的驱动力使轮胎打滑,控制滑移率在特定范围内。
控制器设计
(1)滑模面与趋近律设计
牵引力控制系统的控制目标为控制滑移率到达某一目标值,以发挥出轮胎的最大纵向力。
定义误差为:
e = λ d − λ e=\lambda_d-\lambda e=λd−λ
注意到,误差的一阶导数显含控制输入
T
d
T_d
Td(详见下文MATLAB推导)。
故设滑模面为:
s = e s=e s=e
有:
s ˙ = λ ˙ d − λ ˙ \dot{s}=\dot{\lambda}_d - \dot{\lambda} s˙=λ˙d−λ˙
路面条件和载荷一般不会剧烈变化,为了简化计算,可设 λ ˙ d = 0 \dot{\lambda}_d=0 λ˙d=0,得:
s ˙ = − λ ˙ (4) \dot{s}=-\dot{\lambda} \tag{4} s˙=−λ˙(4)
注意到此时
s
˙
\dot{s}
s˙可与控制输入
T
d
T_d
Td建立方程,可在设计趋近律后求解得控制律
T
d
T_d
Td。
设计趋近律为:
s ˙ = − k 1 s g n ( e ) − k 2 e (5) \dot{s} = -k_1 \mathrm{sgn}(e) - k_2e \tag{5} s˙=−k1sgn(e)−k2e(5)
(2)使用MATLAB进行公式推导
求解 λ ˙ \dot{\lambda} λ˙:
syms m mu Re J
syms omega(t) vx(t)
lambda = omega*Re/vx - 1;
d_lambda = diff(lambda, t);
得:
λ ˙ = R e ω v x − R e ω ˙ v x v x 2 (2) \dot{\lambda}=\frac{R_e\, \omega }{v_x}-\frac{R_e\,\dot{\omega} \, v_x}{{v_x}^2} \tag{2} λ˙=vxReω−vx2Reω˙vx(2)
联立式(1)、式(2)消去 ω ˙ \dot{\omega} ω˙:
syms T Fx x
equ1 = J*x == T - Fx*Re; % x == d_omega
d_omega = solve(equ1, x);
d_lambda1 = subs(d_lambda, diff(omega(t), t), d_omega);
得:
λ ˙ = R e ( T − F x R e ) J v x − R e ω v ˙ x v x 2 (3) \dot{\lambda}=\frac{R_e\,\left(T-F_x\,R_e\right)}{J\,v_x}-\frac{R_e\,\omega\, \dot{v}_x}{{v_x}^2} \tag{3} λ˙=JvxRe(T−FxRe)−vx2Reωv˙x(3)
联立式(3)-(5)求解控制律:
syms k1 k2 e
equ2 = -d_lambda1 == -k1*sign(e)-k2*e;
syms d_vx
equ2 = subs(equ2, diff(vx(t), t), d_vx); % 存在导数diff时求解会出错,将diff(vx(t), t)记为d_vx
u = solve(equ2, T);
得:
T d = F x R e 2 v x + J k 1 s g n ( e ) v x 2 + J R e v ˙ x ω + J e k 2 v x 2 R e v x (6) T_d = \frac{F_x\,{R_e}^2\,v_x+J\,k_{1}\,\mathrm{sgn}\left(e\right)\,{v_x}^2+J\,R_e\,\dot{v}_x\,\omega+J\,e\,k_{2}\,{v_x}^2}{R_e\,v_x} \tag{6} Td=RevxFxRe2vx+Jk1sgn(e)vx2+JRev˙xω+Jek2vx2(6)
注意到式(6)中还包含未知量 F x F_x Fx, F x F_x Fx可通过魔术公式等轮胎模型得到较为准确的估计,但这在实车中对车辆状态的实时感知有很高的要求,而从上一篇理论基础中可感受到滑模控制鲁棒性之强大(可适应完全未知的 f ( x ) f(x) f(x)), F x F_x Fx可粗略地计算为:
F x = μ F z F_x=\mu F_z Fx=μFz
式中,
μ
\mu
μ为路面附着系数,
F
z
F_z
Fz为轮胎载荷,轮胎载荷也可进一步建模计算,此处不再展开。
或:
F x = ξ m A x F_x=\xi mA_x Fx=ξmAx
式中,
m
m
m为整车质量,
A
x
A_x
Ax为车辆的纵向加速度,
ξ
\xi
ξ为将合力
F
=
m
A
x
F=mA_x
F=mAx分配到目标驱动轮的系数,可结合具体情况分析。
在下文中将对比
F
x
F_x
Fx的准确度对控制效果的影响。
(3)系统稳定性分析
联立式(3)(4)(6)反求 s ˙ \dot{s} s˙:
d_error = -subs(d_lambda1, T, u);
d_error = -subs(d_error, d_vx, diff(vx(t), t));
d_error = simplify(d_error);
pretty(d_error)
得:
s ˙ = − k 1 s g n ( e ) − k 2 e \dot{s} = -k_1 \mathrm{sgn}(e) - k_2e s˙=−k1sgn(e)−k2e
其实就是先前设计得趋近律。
设李雅普诺夫函数
V
(
s
)
=
1
2
s
2
V(s)=\frac{1}{2}s^2
V(s)=21s2,有
V
˙
(
s
)
=
s
s
˙
\dot{V}(s)=s\dot{s}
V˙(s)=ss˙,显然满足:
(1)
V
(
s
)
V(s)
V(s)正定
(2)
V
˙
(
s
)
\dot{V}(s)
V˙(s)负定
(3)当
∣
∣
s
∣
∣
→
∞
||s|| \to \infty
∣∣s∣∣→∞,
V
(
s
)
→
∞
V(s) \to \infty
V(s)→∞
故系统渐近稳定,有当
t
→
∞
t \to \infty
t→∞,
s
→
0
s \to 0
s→0。
此处滑模面
s
=
e
s=e
s=e比较特殊,但同样可使误差趋向于0。
可尝试使用
s
=
e
˙
+
c
e
s=\dot{e}+ce
s=e˙+ce作为滑模面,可预见的是,公式将更加复杂,并引入了更高阶的状态导数,如
v
¨
x
\ddot{v}_x
v¨x、
ω
¨
\ddot{\omega}
ω¨,在实车部署时将对车辆状态感知带来挑战。
仿真与分析
仿真将通过CarSim与Simulink联合仿真进行。
(1)代码实现
式(6)给出了TCS的目标转矩(记为 T t T_{t} Tt),但在车辆运行中TCS应只在车手给出的驱动转矩(记为 T r T_r Tr)过大时才介入,且 T t ≥ 0 T_{t} \ge 0 Tt≥0,最终输出的转矩 T d T_d Td为:
T d = m i n ( T r , m a x ( T t , 0 ) ) T_d=\mathrm{min}(T_r, \mathrm{max}(T_t,0)) Td=min(Tr,max(Tt,0))
在Simulink建立仿真模型:
(2)仿真结果分析
上帝模式(使用CarSim提供的准确 F x F_x Fx)
将参数
k
2
k_2
k2设为500,
k
1
k_1
k1设为0,假设车手进行全力加速(设
T
r
=
800
T_r=800
Tr=800Nm),得到的控制效果如下:
(图中kappa为滑移率、目标滑移率为0.12,error为误差,Torque为驱动轮输出的扭转)
将参数
k
2
k_2
k2设为500,
k
1
k_1
k1设为100,假设车手进行全力加速(设
T
r
=
800
T_r=800
Tr=800Nm),得到的控制效果如下:
可见,系统建模足够准确时,
k
1
k_1
k1设为0,即不引入滑模等速趋近项
s
˙
1
=
−
k
1
s
g
n
(
e
)
\dot{s}_1=-k_1 \mathrm{sgn}(e)
s˙1=−k1sgn(e)也可取得很好的效果(类似于反演控制器),
而
k
1
k_1
k1设为100后,即引入滑模等速趋近项
s
˙
1
=
−
k
1
s
g
n
(
e
)
\dot{s}_1=-k_1 \mathrm{sgn}(e)
s˙1=−k1sgn(e)(也称滑模项,滑模控制的灵魂),出现了滑模控制常见的抖动问题,且剧烈跳变的控制动作需要我们关注和优化。
常规模式(设 F x F_x Fx为常值)
将参数
k
2
k_2
k2设为500,
k
1
k_1
k1设为0,假设车手进行全力加速(设
T
r
=
800
T_r=800
Tr=800Nm),得到的控制效果如下:
将参数
k
2
k_2
k2设为500,
k
1
k_1
k1设为100,假设车手进行全力加速(设
T
r
=
800
T_r=800
Tr=800Nm),得到的控制效果如下:
对比可见引入滑模等速趋近项
s
˙
1
=
−
k
1
s
g
n
(
e
)
\dot{s}_1=-k_1 \mathrm{sgn}(e)
s˙1=−k1sgn(e)的优越性,滑模控制强大的鲁棒性可兼容不准确的系统模型。
注意:本文TCS存在参数、抖动问题等必须优化的地方,应用时需针对特定车辆进行优化。尤其在实车部署时需注意安全!在实车中,影响驱动力矩的控制策略具有危险性,任意的BUG可能会造成严重后果,部署控制策略前应针对实车进行充分的验证与评估,实验时做好防护工作,谨防失控!
结语:在中国大学生方程式赛事中,一些强队拥有研究生成员来进行整车控制策略开发,但大部分车队还是靠本专科阶段的学生进行设计,其实现已有许多书籍、文献给出了相关控制器设计方案,对于初学阶段的本专科学生而言,可能还比较缺乏查找和翻阅相关专业资料的能力,希望本文能给大家在车辆控制的路上提供帮助。
未来计划:
写博客还是比较耗时间,如果能为大家提供帮助的话,后续将陆续分享整车动力学建模、基于LQR/MPC的自动驾驶控制算法等。
如果觉得文章对您有帮助,可以通过打赏功能为控制老哥加鸡腿>>欢迎大家点赞、关注、在评论区留言讨论<<