分布式驱动电动汽车车辆状态估计探索:无迹卡尔曼观测器的应用

张开发
2026/4/3 22:16:03 15 分钟阅读
分布式驱动电动汽车车辆状态估计探索:无迹卡尔曼观测器的应用
基于分布式驱动电动汽车的车辆状态估计采用的是无迹卡尔曼ukf观测器可估计包括纵向速度质心侧偏角横摆角速度以及四个车轮角速度七个状态 模型中第一个模块是四轮驱动电机第二个模块是carsim输出的真实参数包括汽车所受横向力纵向力驱动力矩等第三个模块是基于dugoff计算轮胎力模块该模块可以计算纵向力和横向力 第四个模块是关于ukf的车辆状态估计可估计包括纵向速度横摆角速度质心侧偏角以及四个车轮角速度七个状态 模型和代码完全是由自己亲手编写可供自己参考和学习 本模型是基于simulink与carsim联合仿真ckf是由s function进行编写提供相关文献在电动汽车领域车辆状态估计对于提升车辆性能和安全性至关重要。今天就来聊聊我基于分布式驱动电动汽车做的车辆状态估计研究采用的是无迹卡尔曼UKF观测器它可对纵向速度、质心侧偏角、横摆角速度以及四个车轮角速度这七个关键状态进行估计。模型模块剖析四轮驱动电机模块这是整个系统动力输出的起始点负责为车辆提供动力。在Simulink中我们可以通过搭建相关的电机模型来模拟其输出特性。比如简单的直流电机模型假设电机的电压方程为$V R\cdot I L\cdot\frac{dI}{dt} Ke\cdot\omega$其中$V$是输入电压$R$是电阻$I$是电流$L$是电感$Ke$是反电动势常数$\omega$是电机角速度。在Simulink里可以通过使用各种模块搭建出这个方程的模型实现对电机输出的模拟。Carsim输出真实参数模块Carsim可是个强大的工具它能输出汽车所受横向力、纵向力、驱动力矩等真实参数。这就好比给我们的模型提供了一个可靠的“现实参考”。在实际应用中我们可以通过接口将Carsim的数据引入到Simulink环境中。例如在Matlab脚本里可以使用相关的函数来调用Carsim的数据像这样% 假设已经配置好Carsim与Matlab的接口 data callCarsimFunction(); % 这里的callCarsimFunction是自定义的获取Carsim数据的函数 lateralForce data.lateralForce; longitudinalForce data.longitudinalForce; drivingTorque data.drivingTorque;这些数据为后续模块的计算提供了基础。基于Dugoff计算轮胎力模块这个模块很关键它能够计算轮胎的纵向力和横向力。Dugoff模型基于轮胎的滑移率等参数来计算轮胎力。在代码实现上以纵向力计算为例假设滑移率为$s$垂直载荷为$F_z$可以有类似这样的代码片段function Fx calculateLongitudinalForce(s, F_z) % Dugoff模型中的一些参数 mu0 1.0; % 峰值附着系数 kappa 0.1; % 与轮胎特性相关的参数 Fx mu0 * F_z * s / (1 kappa * abs(s)); end这里简单模拟了基于Dugoff模型计算纵向力的过程横向力计算类似但涉及到更复杂的侧向滑移相关参数。UKF车辆状态估计模块重头戏来了这个模块利用UKF算法估计纵向速度、横摆角速度、质心侧偏角以及四个车轮角速度这七个状态。在Simulink中我通过S - function来编写UKF算法。下面是简化版的UKF核心代码思路以Matlab代码为例% UKF初始化 function ukfInit() % 状态向量初始化 x zeros(7, 1); % 7个状态纵向速度、质心侧偏角、横摆角速度、四个车轮角速度 % 协方差矩阵初始化 P eye(7); % 过程噪声协方差 Q eye(7) * 0.01; % 观测噪声协方差 R eye(7) * 0.1; end % UKF预测步骤 function [x_pred, P_pred] ukfPredict(x, P, Q) % 状态转移函数假设为简单线性实际可能更复杂 A eye(7); x_pred A * x; P_pred A * P * A Q; end % UKF更新步骤 function [x_update, P_update] ukfUpdate(x_pred, P_pred, z, R) % 计算sigma点 n size(x_pred, 1); lambda 3 - n; X [x_pred repmat(x_pred, 1, 2 * n) chol((lambda n) * P_pred) * [-eye(n); eye(n)]]; % 时间更新 Y zeros(size(X)); for k 1:2 * n 1 Y(:, k) stateTransitionFunction(X(:, k)); % 状态转移函数 end % 计算预测均值和协方差 x_bar sum(Y, 2) / (2 * n 1); P_bar zeros(n); for k 1:2 * n 1 P_bar P_bar (Y(:, k) - x_bar) * (Y(:, k) - x_bar) / (2 * n 1); end P_bar P_bar Q; % 测量更新 H measurementFunctionJacobian(x_bar); % 测量函数雅可比矩阵 S H * P_bar * H R; K P_bar * H / S; x_update x_bar K * (z - measurementFunction(x_bar)); P_update (eye(n) - K * H) * P_bar; end这里的状态转移函数stateTransitionFunction和测量函数measurementFunction需要根据实际的车辆模型来具体定义measurementFunctionJacobian是测量函数的雅可比矩阵计算函数。联合仿真与总结本模型基于Simulink与Carsim联合仿真这种方式能很好地结合两者优势。Simulink方便搭建各种控制和估计模型Carsim提供高精度的车辆动力学真实参数。整个模型和代码都是我亲手编写一方面是为了深入理解车辆状态估计的原理和实现过程另一方面也方便自己后续参考和学习。基于分布式驱动电动汽车的车辆状态估计采用的是无迹卡尔曼ukf观测器可估计包括纵向速度质心侧偏角横摆角速度以及四个车轮角速度七个状态 模型中第一个模块是四轮驱动电机第二个模块是carsim输出的真实参数包括汽车所受横向力纵向力驱动力矩等第三个模块是基于dugoff计算轮胎力模块该模块可以计算纵向力和横向力 第四个模块是关于ukf的车辆状态估计可估计包括纵向速度横摆角速度质心侧偏角以及四个车轮角速度七个状态 模型和代码完全是由自己亲手编写可供自己参考和学习 本模型是基于simulink与carsim联合仿真ckf是由s function进行编写提供相关文献同时研究过程中参考了不少相关文献如[文献名称1]、[文献名称2]等这些文献为UKF算法在车辆状态估计中的应用提供了理论基础和实践指导。希望我的这些分享能给对电动汽车车辆状态估计感兴趣的朋友一些启发。

更多文章