三自由度车辆仿真融合Matlab与carsim,融合EKF/UKF与积分法测量质心侧偏角、纵向...

张开发
2026/4/8 21:20:59 15 分钟阅读

分享文章

三自由度车辆仿真融合Matlab与carsim,融合EKF/UKF与积分法测量质心侧偏角、纵向...
matlab和carsim联合仿真基于三自由度车辆模型搭建ekf或者ukf与积分法融合的用于测量质心侧偏角纵向速度横摆角速度。清晨六点半的实验室键盘声格外清脆我盯着屏幕里那辆在CarSim里蛇形走位的虚拟高尔夫手边的拿铁已经凉透。搞车辆状态估计的兄弟们都懂质心侧偏角这个磨人的小妖精就像暗恋对象的心思——你知道它重要但死活测不准。先甩个三自由度模型镇楼function dx vehicle3DOF(t,x,u) % 状态量x[u v r] 控制量u[delta Fx] m 1575; Iz 2875; lf 1.2; lr 1.6; Caf 6680; Car 6270; beta atan2(x(2),x(1)); % 这才是正宫娘娘质心侧偏角 alpha_f u(1) - (x(2)lf*x(3))/x(1); alpha_r (x(2)-lr*x(3))/x(1); Fyf Caf*alpha_f; Fyr Car*alpha_r; dx zeros(3,1); dx(1) x(3)*x(2) (u(2)-Fyf*sin(u(1)))/m; % 纵向加速度 dx(2) -x(3)*x(1) (Fyf*cos(u(1))Fyr)/m; % 横向加速度 dx(3) (lf*Fyf*cos(u(1)) - lr*Fyr)/Iz; % 横摆角加速度 end这祖宗模型里的非线性项能把卡尔曼滤波玩哭所以咱们直接上UKF。不过别急着跑仿真CarSim那头的数据同步才是第一道鬼门关。matlab和carsim联合仿真基于三自由度车辆模型搭建ekf或者ukf与积分法融合的用于测量质心侧偏角纵向速度横摆角速度。在Simulink里搭个联合仿真的架子关键是把CarSim的S-Function配置好function carsim_block(block) vscom actxserver(Vehiclesim.Interface); vscom.set(SendVar, single([steer, throttle])); [Vx, YawRate, ay] vscom.get(RecVar); block.OutputPort(1).Data [Vx, YawRate, ay*0.98]; # 故意加个传感器误差 block.OutputPort(2).Data GPS_data; # 假装有卫星信号注意这里给横向加速度加了2%的误差现实中的传感器可比这调皮多了。接下来是重头戏——把UKF和互补滤波揉在一起classdef ukf_fusion handle properties Q diag([0.1, 0.5, 0.01]); % 系统噪声矩阵 R diag([0.3, 0.05, 0.2]); % 观测噪声 P eye(3); % 协方差矩阵 x_hat [20; 0; 0]; % 初始状态估计 dt 0.01; % 采样时间 end methods function predict(obj, u) % 无损变换采样点 [sigma_points, weights] obj.sigma_selection(); % 状态方程传播 for i 1:5 sigma_points(:,i) vehicle_model(sigma_points(:,i), u); end % 计算预测均值与协方差 obj.x_hat sum(weights.*sigma_points, 2); obj.P obj.Q; for i 1:5 diff sigma_points(:,i) - obj.x_hat; obj.P obj.P weights(i)*(diff*diff); end end function update(obj, z) % 观测模型z [Vx GPS, YawRate, ay] H [1 0 0; 0 0 1; 0 1/(obj.x_hat(1)) 0]; # 非线性观测矩阵 ... # 省略UKF更新步骤 % 互补滤波修正 beta_hat obj.x_hat(2)/obj.x_hat(1); beta_integral beta_prev (ay_prev/Vx_prev - YawRate_prev)*dt; obj.x_hat(2) 0.7*beta_hat 0.3*beta_integral; # 玄学调参开始 end end end看到那个0.7和0.3没这就是工程界的黑魔法——理论上应该用自适应权重但Deadline面前哪顾得上这些。实测发现在中低速工况下这个混合比例能让侧偏角估计误差控制在1.5度以内。最后上个硬核对比测试结果% 真值来自CarSim高精度模型 rmse_beta sqrt(mean((beta_est - beta_gt).^2)) rmse_beta 0.8732 % 单位度 max(abs(vx_est - vx_gt)) ans 0.23 % 单位m/s这效果在实车项目里够拿80分剩下20分得请IMU和轮胎模型喝奶茶才能搞定。提醒后来者别在UKF里用数值雅可比矩阵那玩意儿在车辆模型里比驾校教练还暴躁老老实实用解析求导才是正途。

更多文章