基于Simulink的智能底盘域控(CDC+EPS+IBC)集成

目录

一、总体模型结构(建议文件名 ChassisDomain_Intact.slx)

二、MATLAB 初始化脚本(init_ChassisDomain.m)

三、各 Subsystem 详细建模说明

❶ Vehicle_Bicycle(简化自行车)

❷ CDC_Subsystem(底盘域控协调)

❸ EPS_Subsystem(电动助力转向)

❹ 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)

内部:

  1. Demux 四轮 Tb_i_cmd

  2. 对每个轮:

    • Tb_i = sat(Tb_i_cmd, 0, T_brk_max_whl)

  3. 算滑移率 s = (v_x - omega_wheel*r_w) / max(v_x,0.1)

    • 若任意 s > s_max_absscale = K_abs_dec(例 0.85),乘所有 Tb_i

  4. Bus Creator → Tb_Act

实际 ESP 会独立算总减速度再分配;此简化够验信号链路与 ABS 缩矩。


四、运行 & 观测建议

  • 输入信号示例

    • PedalStep→ 0→0.5 @0s(或 Ramp)

    • Theta_swStep→ 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


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蘑菇二号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值