探索分布式驱动车辆状态估计模型的联合仿真之旅
分布式驱动车辆状态估计模型基于Carsim和simulink联合仿真首先建立分布式驱动车辆轮边电机模型并使用pid对目标速度进行跟踪随后在使用级联滑模观测器(ASMO)和车轮运动模型对轮胎力进行观测的基础上使用UKF SRCKF算法对侧向车速纵向车速横摆角速度质心侧偏角进行估计。最近在研究分布式驱动车辆状态估计模型通过 Carsim 和 Simulink 的联合仿真能得到许多有意思的成果今天就来跟大家分享分享。建立轮边电机模型与 PID 速度跟踪在这个模型构建过程中首先得建立分布式驱动车辆轮边电机模型。轮边电机直接驱动车轮这为车辆提供了更精准的动力控制。以简单的直流电机模型为例其基本的电压平衡方程为\[U iR L\frac{di}{dt} e\]其中 \(U\) 是电机输入电压\(i\) 是电流\(R\) 是电阻\(L\) 是电感\(e\) 是反电动势。在 Simulink 里构建这个模型就需要按照这个方程搭建相应的模块。而对于目标速度跟踪PID 控制器是个很好用的工具。PID 控制器的输出 \(u(t)\) 由比例P、积分I、微分D三部分组成公式如下\[u(t)Kp e(t)Ki \int{0}^{t} e(\tau)d\tau Kd \frac{de(t)}{dt}\]这里 \(e(t)\) 是目标速度与当前速度的误差\(Kp\)、\(Ki\)、\(K_d\) 分别是比例、积分、微分系数。在代码实现上Matlab 代码可以类似这样写% 设定PID参数 Kp 0.5; Ki 0.1; Kd 0.05; % 初始化误差和积分项 prev_error 0; integral 0; % 假设的目标速度和当前速度 target_speed 100; % km/h current_speed 80; % km/h for n 1:100 % 模拟时间步 error target_speed - current_speed; integral integral error; derivative error - prev_error; control_signal Kp * error Ki * integral Kd * derivative; % 根据control_signal调整电机输入这里省略具体调整代码 prev_error error; % 更新当前速度这里省略具体更新代码 end这段代码简单模拟了 PID 控制器在速度跟踪中的运行逻辑不断计算误差并调整控制信号以让当前速度逼近目标速度。轮胎力观测与状态估计在对轮胎力进行观测时用到了级联滑模观测器ASMO和车轮运动模型。滑模观测器利用系统的不连续控制使系统状态在滑模面上滑动从而实现对未知量的观测。分布式驱动车辆状态估计模型基于Carsim和simulink联合仿真首先建立分布式驱动车辆轮边电机模型并使用pid对目标速度进行跟踪随后在使用级联滑模观测器(ASMO)和车轮运动模型对轮胎力进行观测的基础上使用UKF SRCKF算法对侧向车速纵向车速横摆角速度质心侧偏角进行估计。以简单的一阶系统滑模观测器为例假设系统方程为 \(\dot{x} ax bu d\)其中 \(d\) 是干扰。滑模观测器的设计如下\[\hat{\dot{x}} a\hat{x} bu K\text{sgn}(x - \hat{x})\]这里 \(\hat{x}\) 是估计值\(K\) 是滑模增益\(\text{sgn}\) 是符号函数。在 Simulink 中搭建时要根据这个结构来连接各个模块实现观测功能。在对侧向车速、纵向车速、横摆角速度、质心侧偏角进行估计时使用了 UKFUnscented Kalman Filter和 SRCKFSpherical Radial Cubature Kalman Filter算法。UKF 算法通过对状态变量进行采样利用无味变换来近似非线性系统的均值和协方差。以下是简单的 UKF 算法 Matlab 伪代码框架% 初始化参数 x_hat zeros(n,1); % 状态估计 P eye(n); % 估计协方差 % 设定过程噪声和观测噪声协方差 Q eye(n); R eye(m); % 时间更新 sigma_points UT(x_hat, P); for i 1:2n1 x_pred x_pred Wm(i) * f(sigma_points(:,i)); P_pred P_pred Wc(i) * (f(sigma_points(:,i)) - x_pred) * (f(sigma_points(:,i)) - x_pred); end P_pred P_pred Q; % 测量更新 y_hat zeros(m,1); for i 1:2n1 y_hat y_hat Wm(i) * h(sigma_points(:,i)); end P_yy zeros(m,m); P_xy zeros(n,m); for i 1:2n1 P_yy P_yy Wc(i) * (h(sigma_points(:,i)) - y_hat) * (h(sigma_points(:,i)) - y_hat); P_xy P_xy Wc(i) * (sigma_points(:,i) - x_pred) * (h(sigma_points(:,i)) - y_hat); end P_yy P_yy R; K P_xy / P_yy; z z_measured - y_hat; x_hat x_pred K * z; P P_pred - K * P_yy * K;这里通过一系列的计算实现了状态的预测和更新。SRCKF 算法则是在一些复杂系统中有更好的表现它基于球径向容积规则来计算积分从而更准确地估计系统状态。通过 Carsim 和 Simulink 的联合仿真利用上述的模型和算法我们能够对分布式驱动车辆的状态进行较为精确的估计为车辆的进一步控制和优化提供了有力的支持。希望这篇博文能给对这方面感兴趣的朋友一些启发。