分布式电动汽车稳定性控制 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这篇论文)

Logo

更多推荐