参考公式车身轮胎车辆参数模型总览DLC工况下与carsim模型作对比解耦纵向力加入轴荷转移四轮纵向力后模型对比横纵向耦合调试出现的问题问题一为了解决代数环而错误的加错了delay原因解释车辆的侧向动力学是一个极度敏感且刚性极高的物理闭环现实中连续系统前轮刚打一点转角 $\delta$ - 瞬间产生微小侧偏角 $\alpha$ - 瞬间产生侧向力 $F_y$ - 瞬间产生角加速度 $\dot{r}$ - 慢慢改变车身姿态。这是一个在同一时间点内平滑发生的事情。你的模型里被延迟了因为加了z^-1当系统在计算当前时刻 $t$ 的加速度时用的居然是上一个仿真步长 $t-1$ 的轮胎力灾难发生你的车打了一点方向产生了侧偏角但由于延迟当前时刻没算出力车身继续向外滑等到了下一个时刻上个时刻积攒的巨大侧偏角突然爆发出一个极大的轮胎力 $F_y$狠狠地把车往回拽由于拽得太猛车身瞬间产生反向侧偏角然后下一个时刻又产生巨大的反向力……这就是典型的“延迟引入相位滞后导致闭环系统发散/高频震荡”。所以真正为了解决代数环问题所加的delay不能在这里。原因我们绝对不能把延迟Delay/Memory加在主受力$F_y$或者运动学$\beta, r$回路上但我们可以且应该把它加在“载荷转移”回路上在真实的物理世界中由于悬架弹簧和减震器的存在车身姿态的改变点头/抬头是需要时间的载荷转移绝对不是瞬间完成的。解决方案在载荷回路上加一阶惯性或 Memory保留动态载荷特性如果你以后还要做带有加减速的联合工况必须保留载荷转移公式做法在图 9 中找到[d_Vx]信号走向calc_vertical_loads的那根连线。 在这根线上插入一个Memory模块。(进阶做法插入一个Transfer Fcn传递函数模块设为1 / (0.05s 1)完美模拟悬架 0.05 秒的迟滞特性)。问题二carsim里输入的是°所以前轮转角是-8~8°没有任何问题。但是三自由度模型的单位是弧度制单位区间应该是0.几。所以只有三自由度模型要做单位转换。问题三之前一直跑不通的原因是因为侧向力拉满了附着系数太低提供不了足够的侧向力。问题四最终解决轮胎模型输入的前轮转角居然但未没换算matlab function代码车体 function [dV, d_beta, d_gamma] vehicle_dynamics_2_1(Fxf, Fyf, Fxr, Fyr, delta, beta, r, V, m, a, b, Iz) % ######################################################################### % 根据图片 2 (式 2.1) 实现的 3-DOF 车辆动力学方程 % --- 数值安全防止除以 0 --- V_safe max(V, 0.05); % --- 1. 合速度变化率 V_dot --- dV (Fxf*cos(delta - beta) - Fyf*sin(delta - beta) Fxr*cos(beta) Fyr*sin(beta)) / m; % --- 2. 质心侧偏角变化率 beta_dot --- num_beta_2 Fxf*sin(delta - beta) Fyf*cos(delta - beta) - Fxr*sin(beta) Fyr*cos(beta); d_beta (num_beta_2 / (m * V_safe)) - r; % --- 3. 横摆角加速度 r_dot --- d_gamma (a * (Fxf*sin(delta) Fyf*cos(delta)) - b*Fyr) / Iz; end 纵向力计算考虑轴荷转移 function [Fzf, Fzr] calc_vertical_loads(m, g, a, b, h, L, ax) % ######################################################################### % 基于公式 (2.12) 和 (2.13) 计算车辆前后轴的动态垂直载荷 % % 输入参数 % m : 车辆总质量 (kg) % g : 重力加速度 (通常为 9.81 m/s^2) % a : 质心到前轴的距离 (m) % b : 质心到后轴的距离 (m) % h : 质心高度 (m) % L : 轴距 (m) - 注意L 通常等于 a b % ax : 车辆纵向加速度 (m/s^2) - 来自于三自由度模型的 d_Vx 输出 % % 输出参数 % Fzf: 前轴垂直载荷 (N) % Fzr: 后轴垂直载荷 (N) % ######################################################################### % --- 1. 计算理论垂直载荷 (公式 2.12 和 2.13) --- Fzf_calc m * (g * b - ax * h) / L; Fzr_calc m * (g * a ax * h) / L; % --- 2. 物理极限保护 --- % 极端加减速时某一侧车轮可能会离地垂直载荷理论上计算为负。 % 物理世界中轮胎离开地面后 Fz 为 0不提供任何摩擦力。 % 这里使用 max() 函数限制 Fz 的最小值为 0防止输入到 Fiala 模型中产生复数或错误。 Fzf max(Fzf_calc, 0); Fzr max(Fzr_calc, 0); end 侧偏角 function [alpha_f, alpha_r] tire_slip_angles_2_3(V, beta, r, delta, a, b) % ######################################################################### % 计算轮胎侧偏角 (使用 atan2 保证全象限/极端大侧偏角下的稳定性) % 输入: % V : 车辆速度幅值 % beta : 质心侧偏角 (rad) % r : 横摆角速度 (rad/s) - 【切记外部绝对不能连成 gamma!】 % delta: 前轮转角 (rad) % ######################################################################### % 计算车辆在坐标轴上的纵向和侧向速度分量 v_x V * cos(beta); v_y V * sin(beta); % 前轮侧偏角 alpha_f % 此时无需手动做分母保护atan2(Y, X) 原生支持 X0 的情况 alpha_f atan2((v_y a * r),v_x) - delta; % 后轮侧偏角 alpha_r alpha_r atan2((v_y - b * r), v_x); end 轮胎模型 function Fyi improved_fiala_tire(alpha, Fz, Fx, mu, Ca) % ######################################################################### % 基于图片的改进 Fiala 轮胎模型 (融合了纵向力对侧向力的影响) % 输入参数 % alpha : 轮胎侧偏角 (rad) % Fz : 轮胎垂直载荷 (N) % Fx : 轮胎纵向力 (N) - 新增输入 % mu : 路面附着系数 % Ca : 轮胎侧偏刚度 % ######################################################################### % 1. 垂直载荷保护防止车轮离地 (Fz0) 时导致除零错误 Fz_safe max(abs(Fz), 0.01); % 2. 计算改进因子 xi (对应新公式) mu_Fz mu * Fz_safe; % [保险 1]防止纵向力 Fx 由于数值波动稍微超过 mu*Fz 时导致根号内出现负数从而产生复数报错 inside_sqrt max((mu_Fz)^2 - Fx^2, 0); xi sqrt(inside_sqrt) / mu_Fz; % [保险 2]当轮胎完全用于制动/驱动 (Fx mu*Fz) 时xi 会变成 0。 % 此时轮胎已经无法提供任何侧向力。防止 xi0 进入后续公式的分母。 xi_safe max(xi, 1e-5); % 3. 计算辅助变量 z zi tan(alpha); % 4. 计算滑动临界点的正切值 tan_alpha_sli (3 * xi_safe * mu * Fz_safe) / Ca; % 5. 分段逻辑计算侧向力 Fyi (严格对应公式 2.2) if abs(zi) tan_alpha_sli % --- 弹性区/半滑动区 --- term1 -Ca * zi; term2 (Ca^2 / (3 * xi_safe * mu * Fz_safe)) * abs(zi) * zi; term3 -(Ca^2 / (27 * xi_safe^2 * mu^2 * Fz_safe^2)) * (zi^3); Fyi term1 term2 term3; else % --- 完全滑动区 --- Fyi -xi_safe * mu * Fz_safe * sign(alpha); end end