分布式电动汽车稳定性控制技术:基于CarSim/Simulink联合仿真的LQR控制与二次规划...
分布式电动汽车稳定性控制 carsim/simulink联合仿真,控制车辆稳定性 上层采用lqr控制输出期望横摆力矩 下层才用二次规划输出制动力矩,并采用平均分配实现四轮力矩分配。 输入到轮毂电机中,实现四轮转矩控制。 有参考文献,可以改为trucksim(此模型需要一定的软件应用基础,没有基础的小白慎)
分布式驱动电动车这玩意儿最近几年火得不行,四个轮子能独立输出扭矩的特性,简直就是控制工程师的游乐场。今天咱们来盘一盘怎么用Carsim和Matlab/Simulink搞联合仿真,实现车辆的稳定性控制。先说好,这玩意儿需要点仿真软件操作底子,要是连Carsim的车辆模型参数都找不到的话,建议先打打基础再回来看。
先上整体架构:上层用LQR算出车辆需要的横摆力矩,下层用二次规划把力矩分配到四个轮毂电机。这里有个骚操作——上层控制只管宏观大局,下层分配负责微观落实,中间用制动力矩当翻译官。
先看LQR控制器部分。Matlab里写这个其实挺直球的:
Q = diag([10, 1, 0.1, 0.5]); % 状态权重矩阵
R = 0.01; % 控制量权重
[K,~,~] = lqr(A, B, Q, R);
desired_yaw_moment = -K * x_current;
这里权重矩阵Q的玄学调参是个技术活,建议先把横摆角速度的权重调高,毕竟咱们主要控制的是车辆旋转。有个坑要注意:LQR的数学模型最好是基于二自由度车辆模型改的,别直接用Carsim的全车模型,否则线性化的时候会怀疑人生。
接下来是下层的二次规划分配。举个简化的CVX优化代码:
cvx_begin
variable Fx(4)
minimize( norm(Fx) )
subject to
T_desired == [a1, a2, a3, a4] * Fx # 力矩分配约束
0 <= Fx <= F_max # 电机扭矩限制
cvx_end
这里a1~a4是和车轮位置相关的分配系数,实际项目里得考虑轮距轴距这些参数。有意思的是约束条件里的不等式,既要保证不突破电机最大扭矩,又要避免反向制动带来的抖动。

分布式电动汽车稳定性控制 carsim/simulink联合仿真,控制车辆稳定性 上层采用lqr控制输出期望横摆力矩 下层才用二次规划输出制动力矩,并采用平均分配实现四轮力矩分配。 输入到轮毂电机中,实现四轮转矩控制。 有参考文献,可以改为trucksim(此模型需要一定的软件应用基础,没有基础的小白慎)
力矩分配这块有个偷懒但实用的办法——平均分配。比如总需求扭矩是100Nm,直接给四个轮子各25Nm。虽然不够optimal,但胜在实时性好:
wheel_torque = desired_total_torque / 4 * ones(4,1);
实测发现,在低附着力路面这么搞反而比复杂算法更稳定,果然大道至简啊。
联合仿真的时候记得设置好Carsim的输入输出接口,特别是四轮扭矩的输入通道命名别搞混。曾经有个兄弟把左前轮和右后轮搞反了,车子在仿真里跳起了街舞...
进阶玩家可以把Carsim换成Trucksim,毕竟卡车重心高更容易失稳。不过Trucksim的轮胎模型参数设置更复杂,建议先拿乘用车模型练手。有个取巧的办法是把卡车当大号轿车来调参,当然这属于野路子了。
最后说个实战经验:仿真时给个阶跃方向盘输入,观察横摆角速度的超调量。要是LQR控制下超调超过20%,赶紧回去调Q矩阵的第三个权重参数,别问我怎么知道的——都是泪啊。

(注:具体参数涉及项目保密要求做了模糊化处理,想复现的同志得自己调参。理论细节可以参考《Vehicle Dynamics and Control》第6章,或者SAE 2017-01-1611这篇论文)
更多推荐

所有评论(0)