基于侧向力估计的车辆侧向速度高精度在线估计探索
基于侧向力估计的车辆侧向速度高精度在线估计(利用滑模观测器代替传统的轮胎模型,并搭建双卡尔曼滤波观测器实现侧向速度高精度在线估计)Carsim2020+matlab2020 1.基于车辆横摆二自由度模型搭建SMO观测器 2.以侧向力估计结果为已知量,侧向速度和横摆角速度为观测量实现基于EKF的侧向速度估计 3.基于侧向加速度和横摆角速度完成基于KF的侧向速度估计 4.在大侧向激励下,利用KF观测器;小侧向激励下,利用EKF观测器。

最近在研究车辆侧向速度高精度在线估计这个课题,采用的是滑模观测器(SMO)代替传统轮胎模型,并且搭建双卡尔曼滤波观测器来实现目标,用到的工具是Carsim2020和Matlab2020。下面就来详细唠唠整个过程。
基于车辆横摆二自由度模型搭建SMO观测器
首先,我们得搭建一个基于车辆横摆二自由度模型的SMO观测器。车辆横摆二自由度模型可以简化车辆的运动,把复杂的车辆运动抽象成侧向和横摆两个方向的运动,这样更方便我们进行研究。

基于侧向力估计的车辆侧向速度高精度在线估计(利用滑模观测器代替传统的轮胎模型,并搭建双卡尔曼滤波观测器实现侧向速度高精度在线估计)Carsim2020+matlab2020 1.基于车辆横摆二自由度模型搭建SMO观测器 2.以侧向力估计结果为已知量,侧向速度和横摆角速度为观测量实现基于EKF的侧向速度估计 3.基于侧向加速度和横摆角速度完成基于KF的侧向速度估计 4.在大侧向激励下,利用KF观测器;小侧向激励下,利用EKF观测器。

在Matlab里,我们可以这样写代码来实现这个SMO观测器:
% 车辆横摆二自由度模型参数设置
m = 1500; % 车辆质量
Iz = 2500; % 车辆绕z轴的转动惯量
lf = 1.2; % 质心到前轴的距离
lr = 1.3; % 质心到后轴的距离
Cf = 100000; % 前轮侧偏刚度
Cr = 110000; % 后轮侧偏刚度
% 滑模观测器参数
K = [10 0; 0 10]; % 增益矩阵
epsilon = 0.1; % 滑模增益
% 状态空间方程
A = [-2*(Cf+Cr)/(m*Vx) -2*(lf*Cf - lr*Cr)/(m*Vx^2) - 1;
-2*(lf*Cf - lr*Cr)/Iz -2*(lf^2*Cf + lr^2*Cr)/(Iz*Vx)];
B = [2*Cf/(m*Vx); 2*lf*Cf/Iz];
C = [1 0; 0 1];
% 滑模观测器设计
function [x_hat_dot] = SMO(x_hat, u, y, A, B, C, K, epsilon)
e = y - C*x_hat;
s = K*e;
x_hat_dot = A*x_hat + B*u + epsilon*sign(s);
end
代码分析:这段代码首先定义了车辆横摆二自由度模型的一些关键参数,像车辆质量、转动惯量、质心到前后轴的距离以及轮胎侧偏刚度等。然后设置了滑模观测器的增益矩阵和滑模增益。接着根据状态空间方程得到了系统矩阵A、输入矩阵B和输出矩阵C。最后定义了一个SMO函数,这个函数实现了滑模观测器的核心功能,通过计算误差e和滑模面s,来更新状态估计值的导数。
以侧向力估计结果为已知量,实现基于EKF的侧向速度估计
有了侧向力估计结果后,我们就可以把侧向速度和横摆角速度作为观测量,用扩展卡尔曼滤波(EKF)来估计侧向速度。
% EKF参数设置
Q = [0.1 0; 0 0.1]; % 过程噪声协方差矩阵
R = [0.5 0; 0 0.5]; % 测量噪声协方差矩阵
% EKF初始化
x_hat = [0; 0]; % 初始状态估计值
P = [1 0; 0 1]; % 初始协方差矩阵
% EKF主循环
for k = 1:length(t)
% 预测步骤
x_hat_minus = f(x_hat, u(k));
F = jacobian(f, x_hat);
P_minus = F*P*F' + Q;
% 更新步骤
y = h(x_hat_minus);
H = jacobian(h, x_hat_minus);
K = P_minus*H'/(H*P_minus*H' + R);
x_hat = x_hat_minus + K*(y_meas(k) - y);
P = (eye(2) - K*H)*P_minus;
end
代码分析:这里先设置了EKF的过程噪声协方差矩阵Q和测量噪声协方差矩阵R。然后对状态估计值和协方差矩阵进行了初始化。在主循环里,先进行预测步骤,通过状态转移函数f更新状态估计值,计算雅可比矩阵F,更新协方差矩阵P_minus。接着进行更新步骤,通过观测函数h计算观测值,计算雅可比矩阵H,得到卡尔曼增益K,最后更新状态估计值和协方差矩阵。
基于侧向加速度和横摆角速度完成基于KF的侧向速度估计
接下来,利用侧向加速度和横摆角速度,用卡尔曼滤波(KF)来估计侧向速度。
% KF参数设置
Q_kf = [0.05 0; 0 0.05]; % 过程噪声协方差矩阵
R_kf = [0.3 0; 0 0.3]; % 测量噪声协方差矩阵
% KF初始化
x_hat_kf = [0; 0]; % 初始状态估计值
P_kf = [1 0; 0 1]; % 初始协方差矩阵
% KF主循环
for k = 1:length(t)
% 预测步骤
x_hat_kf_minus = A_kf*x_hat_kf + B_kf*u_kf(k);
P_kf_minus = A_kf*P_kf*A_kf' + Q_kf;
% 更新步骤
y_kf = C_kf*x_hat_kf_minus;
K_kf = P_kf_minus*C_kf'/(C_kf*P_kf_minus*C_kf' + R_kf);
x_hat_kf = x_hat_kf_minus + K_kf*(y_meas_kf(k) - y_kf);
P_kf = (eye(2) - K_kf*C_kf)*P_kf_minus;
end
代码分析:和EKF类似,先设置了KF的过程噪声协方差矩阵Qkf和测量噪声协方差矩阵Rkf,对状态估计值和协方差矩阵进行初始化。在主循环里,进行预测步骤更新状态估计值和协方差矩阵,然后进行更新步骤,利用卡尔曼增益K_kf更新状态估计值和协方差矩阵。
不同侧向激励下观测器的选择
在实际应用中,大侧向激励下我们利用KF观测器,小侧向激励下利用EKF观测器。可以通过判断侧向激励的大小来选择合适的观测器。
for k = 1:length(t)
if abs(u(k)) > threshold % 大侧向激励
[x_hat_kf] = KF(x_hat_kf, u_kf(k), y_meas_kf(k), A_kf, B_kf, C_kf, Q_kf, R_kf);
else % 小侧向激励
[x_hat] = EKF(x_hat, u(k), y_meas(k), f, h, Q, R);
end
end
代码分析:在这个循环里,通过判断输入u(k)的绝对值是否大于阈值threshold,来决定使用KF观测器还是EKF观测器,这样可以根据不同的工况选择更合适的估计方法,提高侧向速度估计的精度。
通过以上这些步骤,我们就可以利用滑模观测器和双卡尔曼滤波观测器实现车辆侧向速度的高精度在线估计啦。在实际测试中,结合Carsim2020进行车辆动力学仿真,再用Matlab2020进行算法实现和数据分析,能得到很不错的效果。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)