四轮独立驱动电动汽车转矩分配控制 CarSim与Simulink联合 三自由度车辆模型(纵向、横向、横摆) 控制方法为离散LQR(包括连续系统的离散方法和求解方法) 带有完整详细的控制器、二自由度稳定性控制目标推导文档,不带 MATLAB版本为2018b CarSim版本为2018

四轮独立驱动电动车就像给车轮装上了独立开关,每个电机都能单独控制扭矩输出。这种结构在弯道里能玩出很多花样——通过调整四个轮子的扭矩分配,车辆横摆响应能像猎豹扑食一样精准。今天咱们就聊聊怎么用Matlab和CarSim联手调教这匹电动野兽。

先得搞明白车辆到底咋动的。三自由度模型把车辆运动拆成了三个方向:踩油门往前冲的纵向运动、左右晃的横向运动、还有原地打转的横摆运动。用状态方程表示就是:

% 三自由度状态方程参数
m = 1500;   % 整车质量(kg)
Iz = 2500;  % 横摆转动惯量(kg·m²)
lf = 1.2;   % 前轴到质心距离(m)
lr = 1.5;   % 后轴到质心距离(m)

这里有个坑要注意:CarSim输出的数据单位可能和咱们模型不匹配。有次仿真车辆突然原地托马斯回旋,查了半天发现是把英制单位的横摆角速度当国际单位用了...

接下来是控制器的重头戏——离散LQR设计。传统LQR在连续域玩积分,但实际ECU都是离散系统。咱们用零阶保持器做离散化:

% 连续系统离散化
sysc = ss(A, B, C, D);
Ts = 0.01;  % 10ms控制周期
sysd = c2d(sysc, Ts, 'zoh');

% LQR权重矩阵
Q = diag([10, 5, 2]);  % 状态量权重
R = eye(4)*0.1;        % 控制量权重
[Kd, S, e] = dlqr(sysd.A, sysd.B, Q, R);

这段代码里的门道在于Q矩阵的调节——横摆角速度权重大说明我们更看重车辆的转向响应。但别把R矩阵设太小,否则控制器会疯狂输出扭矩导致电机过热,别问我是怎么知道的...

四轮独立驱动电动汽车转矩分配控制 CarSim与Simulink联合 三自由度车辆模型(纵向、横向、横摆) 控制方法为离散LQR(包括连续系统的离散方法和求解方法) 带有完整详细的控制器、二自由度稳定性控制目标推导文档,不带 MATLAB版本为2018b CarSim版本为2018

联合仿真时CarSim和Simulink的通信设置是另一个容易翻车的地方。需要确保CarSim的输出端口和Simulink的S-Function对接正确:

% CarSim输出配置
VehicleDynamics = vsCD('open','Carsimfile.par');
vsCD('send', VehicleDynamics, 'OUTPUT_SIGNAL', {'YAW_RATE', 'LAT_ACC', 'LONG_ACC'});
vsCD('send', VehicleDynamics, 'SAMPLE_TIME', Ts);

调试时经常遇到数据不同步的问题,这时候可以祭出神器Simulink的Signal To Workspace模块,把关键信号实时拽到MATLAB里画图分析。

最后来个扭矩分配的骚操作——把LQR算出的总需求扭矩按轮胎负荷率分配:

% 轮胎负荷率分配算法
F_total = Kd * x_current; 
F_max = mu * Fz;  % 各轮垂向力
F_alloc = F_total .* Fz / sum(Fz);

这种分配策略在低附着力路面特别有用,能防止某个车轮打滑引发系统崩溃。不过实际项目中还要考虑电机外特性,别让控制器输出超出电机能力的扭矩值。

搞完这些把模型扔进CarSim跑个双移线工况,看着仿真动画里车辆丝滑过弯的样子,老司机都会露出姨母笑。当然,真车标定又是另一个故事了——路面接缝、温度变化、甚至电池SOC都会影响扭矩分配效果,但这正是控制的魅力所在不是吗?

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐