车辆状态估计,容积卡尔曼滤波CKF车辆状态估计,容积卡尔曼滤波CKF (1)
车辆状态估计,容积卡尔曼滤波CKF车辆状态估计,容积卡尔曼滤波CKF
针对乘用车进行车辆运动状态参数估计,采用CKF容积卡尔曼滤波算法,对车辆的纵向车速、侧向速度、横摆角速度、质心侧偏角、各轮侧向力进行估计157
内部附带carsim模型、算法模型、说明文档
📜 MATLAB 绘图复现代码
将以下代码复制到 MATLAB 编辑器中运行即可:
%% 1. 初始化环境
clc; clear; close all;
% 设置全局字体,模仿 Simulink Scope 风格
set(0, ‘DefaultAxesFontSize’, 10);
set(0, ‘DefaultTextFontSize’, 10);
%% 2. 模拟数据生成 (模拟多关节/多通道正弦跟踪)
t = linspace(0, 4, 1000); % 时间轴 0-4秒
% 定义 8 个子图的信号特征 (频率和幅值各不相同,模仿图中情况)
% 格式: [频率Hz, 幅值]
params = [
1.0, 1.5; % Subplot 1 (左上被遮挡部分)
1.5, 3.0; % Subplot 2
2.0, 6000; % Subplot 3 (大数值,可能是电流或力矩)
2.0, 6000; % Subplot 4
1.5, 3.0; % Subplot 5
1.5, 3.0; % Subplot 6
1.5, 3.0; % Subplot 7
2.5, 1000; % Subplot 8
];
% 预分配数据存储
num_plots = size(params, 1);
data_ref = zeros(length(t), num_plots);
data_act = zeros(length(t), num_plots);
% 生成带有微小误差的跟踪数据
for i = 1:num_plots
freq = params(i, 1);
amp = params(i, 2);
% 参考信号 (理想正弦) data_ref(:, i) = amp * sin(2 * pi * freq * t); % 实际信号 (加入极小的相位滞后和幅值衰减,模拟真实控制效果) phase_lag = 0.02; % 轻微滞后 amp_error = 0.98; % 轻微幅值误差 noise = 0.01 * amp * randn(size(t)); % 添加微量噪声 data_act(:, i) = amp * amp_error * sin(2 * pi * freq * (t - phase_lag)) + noise;end
%% 3. 绘图 (模仿 Simulink Scope 布局)
figure(‘Color’, ‘w’, ‘Position’, [100, 100, 1200, 800]);
% 使用 subplot 创建 2行4列 布局 (假设左侧还有一列被截断,这里画完整的8个)
for i = 1:num_plots
subplot(2, 4, i);
% 绘制参考值 (青色/浅蓝) plot(t, data_ref(:, i), 'c-', 'LineWidth', 1.5); hold on; % 绘制实际值/估计值 (深红/紫色) plot(t, data_act(:, i), [0.6 0.1 0.3], '-', 'LineWidth', 1.5); % 自定义深红色 grid on; box on; % 添加图例 (模仿图中右上角的小框) if i == 1 || i == 2 % 仅在部分图中显示图例以免太乱,或者全部显示 legend('Ref', 'Est', 'Location', 'northeast'); end % 设置坐标轴范围 (自动适应) ylim_auto = max(abs(data_ref(:, i))) * 1.2; ylim([-ylim_auto, ylim_auto]);end
sgtitle(‘Simulation Results: Tracking Performance’, ‘FontSize’, 14);
💡 代码解析
数据模拟:
我构建了 params 矩阵来定义不同子图的频率和幅值。注意看第 3、4 个子图,我设置了较大的幅值(6000),这对应了你原图中中间几个波形数值很大的情况(可能是电机电流或力矩)。
data_act 加入了微小的相位滞后(phase_lag)和噪声,这样红线就不会完全覆盖蓝线,从而体现出“跟踪”的效果,这与原图一致。
颜色匹配:
参考值使用了 ‘c-’ (Cyan,青色),对应原图中的浅蓝色线。
实际值使用了 [0.6 0.1 0.3] (深紫红色),对应原图中的深色线。
