目录
一、总体模型结构(建议文件名 ChassisDomain_Intact.slx)
二、MATLAB 初始化脚本(init_ChassisDomain.m)
❹ IBC_Subsystem(集成制动 + ABS 简模)
基于Simulink的智能底盘域控(CDC+EPS+IBC)集成
一、总体模型结构(建议文件名 ChassisDomain_Intact.slx)
顶层建议这样组织:
[Const/Pulse] Pedal, Theta_sw
│
[CDC_Subsystem]
├──► DriveTrq_4W (To Plant / Motor Model)
├──► DeltaRef_eps ──► [EPS_Subsystem] ──► Delta_fw, T_ff
└──► BrkTrq_4W ──► [IBC_Subsystem] ──► T_brk_actual
▲ │
└──── [Vehicle_Bicycle] ◄──────────┘
(v_x, psi_dot, beta)
-
CDC_Subsystem:底盘域控协调(驱动/横摆/主动转向/制动分配)
-
EPS_Subsystem:电动助力转向(转角跟随 + 路感反馈)
-
IBC_Subsystem:集成制动(四轮分配 + ABS 简化)
-
Vehicle_Bicycle:简化自行车模型(提供 ψ̇_est, v_x)
二、MATLAB 初始化脚本(init_ChassisDomain.m)
%% ===== 底盘域控参数 =====
m = 1500; % kg
L = 2.7; % 轴距 m
Lf = 1.2; % 前轴到 CG
Lr = L - Lf; % 后轴到 CG
r_w = 0.32; % 车轮半径 m
G = 15; % 转向速比
lambda = 0.4; % 前轴扭矩比
Kyaw = 12; % Nm/(rad/s) 横摆增益
Kaf = 0.03; % rad/(rad/s) 主动前转向增益
K_asst = 2; % Nm/rad 助力增益(可改随 vx)
Tmax_whl = 300; % 单轮最大驱动 Nm
P_regen_max = 40000; % W 再生上限(示例)
eta_reg = 0.7; % 再生比例
SOC_max = 0.9;
SOC_min = 0.2;
%% ===== 车辆简化 =====
Caf = 60000; % N/rad 前轮侧偏刚度
Car = 80000; % N/rad 后轮侧偏刚度
Iz = 2500; % kg·m^2 横摆惯量
rho = 1.225; CdA = 0.35; f_roll = 0.012; g = 9.81;
%% ===== EPS =====
J_fw = 0.02; % kg·m^2 前轮惯
B_fw = 0.05; % Nm·s/rad
K_align = 800; % Nm/rad 回正刚度
B_align = 15; % Nm·s/rad
Kp_pos_eps = 80; % 转角位置 Kp
Ki_pos_eps = 2000; % 积分(可选)
%% ===== IBC =====
T_brk_max_whl = 1500; % Nm/轮 最大摩擦制动
s_max_abs = 0.20; % 滑移率上限
K_abs_dec = 0.85;
%% ===== 仿真 =====
Ts_ctrl = 1e-3; % 1ms 控制步
Ts_veh = 5e-4; % 车辆模型 0.5ms
%% ===== Bus Objects (可选但推荐) =====
% MotorCmd (4轮扭矩)
if ~exist('DriveTrq4W','var')
DriveTrq4W = Simulink.Bus;
DriveTrq4W.Elements(1)=Simulink.BusElement; DriveTrq4W.Elements(1).Name='T_FL'; DriveTrq4W.Elements(1).DataType='double';
DriveTrq4W.Elements(2)=Simulink.BusElement; DriveTrq4W.Elements(2).Name='T_FR'; DriveTrq4W.Elements(2).DataType='double';
DriveTrq4W.Elements(3)=Simulink.BusElement; DriveTrq4W.Elements(3).Name='T_RL'; DriveTrq4W.Elements(3).DataType='double';
DriveTrq4W.Elements(4)=Simulink.BusElement; DriveTrq4W.Elements(4).Name='T_RR'; DriveTrq4W.Elements(4).DataType='double';
assignin('base','DriveTrq4W',DriveTrq4W);
end
if ~exist('BrkTrq4W','var')
BrkTrq4W = Simulink.Bus;
BrkTrq4W.Elements(1)=Simulink.BusElement; BrkTrq4W.Elements(1).Name='Tb_FL'; BrkTrq4W.Elements(1).DataType='double';
BrkTrq4W.Elements(2)=Simulink.BusElement; BrkTrq4W.Elements(2).Name='Tb_FR'; BrkTrq4W.Elements(2).DataType='double';
BrkTrq4W.Elements(3)=Simulink.BusElement; BrkTrq4W.Elements(3).Name='Tb_RL'; BrkTrq4W.Elements(3).DataType='double';
BrkTrq4W.Elements(4)=Simulink.BusElement; BrkTrq4W.Elements(4).Name='Tb_RR'; BrkTrq4W.Elements(4).DataType='double';
assignin('base','BrkTrq4W',BrkTrq4W);
end
运行:
>> init_ChassisDomain
>> sim('ChassisDomain_Intact')
三、各 Subsystem 详细建模说明
❶ Vehicle_Bicycle(简化自行车)
输入
-
T_FL, T_FR, T_RL, T_RR(Nm) -
delta_fw(rad) -
T_brk_FL...(Nm)
输出
-
v_x,psi_dot,beta,omega_wheel(用于 ABS)
内部核心方程(Embedded MATLAB / Fcn):
function [vx_dot, psidot, beta, ax] = bike_eq( ...
T_FL,T_FR,T_RL,T_RR, delta_fw, Tbrk_sum, vx, psi_dot_prev, beta_prev,...
m,Lf,Lr,Caf,Car,Iz,rho,CdA,f_roll,g,rw,Ts)
% 纵向
F_drive = (T_FL+T_FR+T_RL+T_RR)/rw;
F_brk = Tbrk_sum/rw;
F_roll = f_roll*m*g;
F_air = 0.5*rho*CdA*vx^2;
ax = (F_drive - F_brk - F_roll - F_air)/m;
vx_dot = ax;
% 侧向
alpha_f = delta_fw - beta_prev - psi_dot_prev*Lf/vx;
alpha_r = -beta_prev - psi_dot_prev*Lr/vx;
Fyf = Caf*alpha_f;
Fyr = Car*alpha_r;
psidot = (Fyf*Lf - Fyr*Lr)/Iz;
beta = atan( (vx*beta_prev + (Fyf+Fyr)/m*Ts ) ./ max(vx,0.5) ); % 简易积分
end
在 Simulink 中用 MATLAB Function 块,4输入→T_sum,1→delta_fw,1→Tbrk_sum, 反馈 vx,psi_dot,betavia Unit Delay。
-
两个
Unit Delay(IC: vx=20, psi_dot=0, beta=0) -
输出
v_x,psi_dot,beta -
可额外输出
omega_wheel = vx/rw
❷ CDC_Subsystem(底盘域控协调)
Inport
-
Pedal(0~1) -
Theta_sw(rad) -
v_x,psi_dot_est -
T_regen_max_whl(可选)
Outport
-
DriveTrq4W(Bus) -
DeltaRef_eps(rad) -
BrkTrq4W(Bus, 初版可置 0) -
DeltaTyaw,psi_dot_des
内部逻辑(推荐 MATLAB Function 或普通 Math):
function [T_FL,T_FR,T_RL,T_RR, delta_ref, Dyaw, psi_dot_des] = ...
CDC_logic(Pedal, Theta_sw, vx, psi_dot_est, lambda, Kyaw, Kaf, G, L, Tmax_whl, lambda)
% 1) 总驱动扭矩(轮端)
T_total = Pedal * 4 * Tmax_whl; % 简单映射, sat later if want
% 2) 参考横摆率(Ackermann)
psi_dot_des = vx * tan(Theta_sw/G) / L;
% 3) 横摆误差 & 差扭
e_psi = psi_dot_des - psi_dot_est;
Dyaw = Kyaw * e_psi;
Dyaw = max(min(Dyaw, 80), -80); % 限幅
% 4) 四轮分配
T_front = lambda * T_total;
T_rear = (1-lambda) * T_total;
T_FL = T_front/2 + Dyaw/2;
T_FR = T_front/2 - Dyaw/2;
T_RL = T_rear /2 + Dyaw/2;
T_RR = T_rear /2 - Dyaw/2;
% 5) 主动前转向附加
delta_a = Kaf * e_psi;
delta_ref = Theta_sw/G + delta_a;
end
-
用 MATLAB Function 块包上述函数 → 4 Outports + Bus Creator →
DriveTrq4W -
若需制动请求:加 Inport
Brk_Pedal,算T_brk_total,Regen 分配,Bus Creator →BrkTrq4W -
初版可令
BrkTrq4W全零(Constant [0 0 0 0]→ Bus Creator)
❸ EPS_Subsystem(电动助力转向)
Inport
-
DeltaRef(rad) -
vx(车速) -
delta_fw_fb(回读实际前轮角,可用 Unit Delay)
Outport
-
delta_fw(rad) -
T_ff(Nm 路感反馈)
内部建议二阶转角跟踪 + 回正力矩:
-
误差
e_delta = DeltaRef - delta_fw -
电机转矩
T_mot = Kp_pos_eps * e_delta + T_assist-
T_assist = K_asst * abs(DeltaRef) * (1 - 0.5*vx/30)(随速减助)
-
-
回正
T_align = K_align*delta_fw + B_align*d(delta_fw)/dt -
二阶积分:
J_fw * domega_fw/dt = T_mot - T_align - B_fw*omega_fw omega_fw -> Integrator -> delta_fw-
第一个 Integrator IC=0 →
omega_fw -
第二个 Integrator IC=0 →
delta_fw
-
-
路感(简化):
T_ff = G * ( K_align*delta_fw + B_align*omega_fw )可加小库仑摩擦
0.15*sign(omega_fw)
→ 输出 delta_fw, T_ff
❹ IBC_Subsystem(集成制动 + ABS 简模)
Inport
-
Tb_Cmd(Bus BrkTrq4W) -
v_x -
omega_wheel(可从 Vehicle)
Outport
-
Tb_Act(Bus BrkTrq4W)
内部:
-
Demux 四轮
Tb_i_cmd -
对每个轮:
-
Tb_i = sat(Tb_i_cmd, 0, T_brk_max_whl)
-
-
算滑移率
s = (v_x - omega_wheel*r_w) / max(v_x,0.1)-
若任意
s > s_max_abs→scale = K_abs_dec(例 0.85),乘所有Tb_i
-
-
Bus Creator →
Tb_Act
实际 ESP 会独立算总减速度再分配;此简化够验信号链路与 ABS 缩矩。
四、运行 & 观测建议
-
输入信号示例:
-
Pedal:Step→ 0→0.5 @0s(或 Ramp) -
Theta_sw:Step→ 10°(=0.1745rad)` @0s -
v_x_init=20m/s(Vehicle IC)
-
-
Scope / To Workspace:
-
v_x,psi_dot,delta_fw -
T_FL,T_FR看 ΔTyaw 差异 -
Dyaw,delta_ref -
T_ff(路感)
-
-
验证:
-
转向时
T_FL≠T_FR差 =Dyaw -
delta_fw → delta_ref -
若加制动 Step →
Tb_Act出现 & ABS flag
-
集成&spm=1001.2101.3001.5002&articleId=161753932&d=1&t=3&u=66e6598de5744e57a268fc97b293023a)
209

被折叠的 条评论
为什么被折叠?



