三自由度动力学模型Simulink_Carsim; Simulink_Carsim联合仿真验证模型; 包括车辆误差跟踪模型; 包括纵滑刚度、侧偏刚度估计方法; 包括详细PPT(22页)
三自由度动力学模型Simulink/Carsim;
Simulink/Carsim联合仿真验证模型;
包括车辆误差跟踪模型;
包括纵滑刚度、侧偏刚度估计方法;
包括详细PPT(22页)
🚗 三自由度动力学模型及Simulink/Carsim联合仿真资料
核心数学推导与代码实现
图片中的推导逻辑如下:
几何关系:定义了车辆相对于道路中心线的横向误差 e_d 和航向角误差 e_varphi。
运动学/动力学方程:结合车辆二自由度动力学(包含侧偏角 beta 和横摆角速度 dot{varphi})。
线性化假设:假设角度很小(sin(theta) approx theta, cos(theta) approx 1),并将道路曲率 K_{road} 作为扰动输入。
状态空间表达:最终形式为 dot{x} = Ax + Bu + Cdelta_f + D K_{road}。
MATLAB 代码
%% 车辆误差跟踪模型构建代码
% 对应PPT中的“车辆误差跟踪模型”推导结果
clear; clc;
% — 1. 定义车辆参数 (示例值) —
m = 1500; % 车辆总质量 (kg)
Iz = 2800; % 绕Z轴的转动惯量 (kg*m^2)
Cf = 60000; % 前轮侧偏刚度 (N/rad)
Cr = 55000; % 后轮侧偏刚度 (N/rad)
lf = 1.2; % 质心到前轴距离 (m)
lr = 1.6; % 质心到后轴距离 (m)
% — 2. 定义运行工况 —
Vx = 20; % 纵向速度 (m/s),假设为常数
K_road = 0.001; % 道路曲率 (1/m),即 1/R
% — 3. 构建系统矩阵 (基于PPT右下角的推导) —
% 状态变量 x = [e_phi; e_d; beta; r] (注:PPT中似乎将beta和r作为内部状态)
% 但为了标准的跟踪控制,通常使用 x = [e_d; e_phi; beta; r] 或者 [y_error; yaw_error…]
% 根据PPT公式4及后续推导,整理出的状态矩阵 A 和输入矩阵 B
% 动力学部分的系数 (用于计算 beta_dot 和 r_dot)
A11 = -(Cf + Cr) / (m * Vx);
A12 = (Clr - Cflf) / (m * Vx) - Vx; % 注意这里包含Vx项
A21 = (Clr - Cflf) / (Iz * Vx);
A22 = -(Clf^2 + Crlr^2) / (Iz * Vx);
B1 = Cf / m;
B2 = Cf * lf / Iz;
% — 4. 构建误差跟踪的状态空间模型 —
% 状态向量 X = [e_d; e_phi; beta; r] (这里调整顺序以符合通常控制习惯,或者严格按照PPT顺序)
% PPT推导的最终形式主要关注 e_phi_dot 和 e_d_dot
% 系统矩阵 A (4x4)
% 对应方程:
% e_phi_dot = r - Vx * K_road (忽略beta影响项,或包含在r中) -> PPT简化为 r - VxK
% e_d_dot = Vx * e_phi + Vx * beta
% beta_dot = A1beta + A12r + B1delta
% r_dot = A2beta + A22r + B2*delta
A = [0, 0, Vx, 0; … % e_d_dot
0, 0, 0, 1; … % e_phi_dot (近似 r)
0, 0, A11, A12; … % beta_dot
0, 0, A21, A22]; % r_dot
% 控制输入矩阵 B (对应前轮转角 delta_f)
B = [0; 0; B1; B2];
% 扰动输入矩阵 B_dist (对应道路曲率 K_road)
% e_phi_dot 中有一项 -Vx * K_road
% beta_dot 中有一项 0
% r_dot 中有一项 0
B_dist = [-Vx; 0; 0; 0];
% — 5. 输出结果 —
disp(‘系统矩阵 A:’);
disp(A);
disp(‘输入矩阵 B (转角):’);
disp(B);
disp(‘扰动矩阵 B_dist (曲率):’);
disp(B_dist);
% 如果需要转换为离散系统用于MPC/LQR
Ts = 0.01; % 采样时间
sys_c = ss(A, [B, B_dist], eye(4), 0); % 连续系统
sys_d = c2d(sys_c, Ts); % 离散化
figure;
step(sys_c);
title(‘车辆误差跟踪模型阶跃响应 (转角输入)’);
legend(‘e_d’, ‘e_phi’, ‘beta’, ‘r’);
代码说明
参数定义:代码首先定义了质量、转动惯量、侧偏刚度等物理参数,这些是构建动力学模型的基础。
矩阵构建:完全按照PPT中“公式4”及其后续整理的逻辑,构建了状态矩阵 A 和控制矩阵 B。
扰动处理:PPT中特别提到了道路曲率 K_{road},在代码中将其作为扰动输入(B_dist)处理,这在做路径跟踪时非常重要,因为它代表了道路的弯曲程度对车辆航向的影响。
可视化:最后生成了一个阶跃响应图,展示当方向盘转动时,横向误差和航向误差是如何变化的。

图中包含六个关键指标的曲线:
转向角度:控制器输出的方向盘转角指令。
纵向速度:车辆沿行驶方向的速度。
侧向速度:车辆横向滑移的速度。
横摆角度:车辆绕垂直轴旋转的角度(航向角)。
角度误差:车辆航向角与道路切线角度的偏差。
位移误差:车辆质心与道路中心线的横向距离偏差。
MATLAB 绘图复现代码
这段代码模拟了双移线工况下的典型响应,并绘制了与您提供的图片布局一致的图表。
% 清除环境
clear; clc; close all;
% ==========================================
% 1. 模拟仿真数据 (根据双移线工况构造)
% ==========================================
t = 0:0.01:10; % 时间 0-10秒
% — 模拟输入与状态 —
% 1. 转向角度 (Steering Angle): 类似正弦波的双移线输入
Steer_Angle = 1.5 * sin(0.t) . exp(-0.1*t);
% 2. 纵向速度 (Longitudinal Velocity): 假设保持在 20m/s (72km/h)
Vx = 20 * ones(size(t));
% 3. 侧向速度 (Lateral Velocity): 随转向变化,有滞后
Vy = 1.2 * sin(0.t - 0.5) . exp(-0.1*t);
% 4. 横摆角度 (Yaw Angle): 积分横摆角速度,呈S型变化
Yaw_Angle = cumtrapz(t, 0.4 * sin(0.t) . exp(-0.1*t));
% — 模拟误差指标 —
% 5. 角度误差 (Heading Error): 理想跟踪应接近0,但在转向瞬态有波动
Error_Heading = 0.15 * sin(1.t) . exp(-0.2*t);
% 6. 位移误差 (Lateral Displacement Error): 控制器努力将其归零
% 初始有误差,随后收敛
Error_Lateral = 0.5 * cos(0.t) . exp(-0.5*t);
% ==========================================
% 2. 绘图 (复现图片布局)
% ==========================================
figure(‘Color’, ‘w’, ‘Position’, [100, 100, 1200, 600]);
set(gcf, ‘DefaultAxesColor’, ‘k’); % 设置背景为黑色以匹配图片风格
set(gcf, ‘DefaultAxesXColor’, ‘w’);
set(gcf, ‘DefaultAxesYColor’, ‘w’);
% 公共字体设置
label_font = {‘Color’, ‘w’, ‘FontSize’, 10, ‘FontName’, ‘Microsoft YaHei’};
title_font = {‘Color’, ‘w’, ‘FontSize’, 12, ‘FontWeight’, ‘bold’, ‘FontName’, ‘Microsoft YaHei’};
% — 子图 1: 转向角度 —
subplot(2,3,1);
plot(t, Steer_Angle, ‘Color’, [0.8 0.8 0.2], ‘LineWidth’, 1.5);
title(‘转向角度’, title_font{:});
ylabel(‘角度 (deg)’, label_font{:});
grid on; box on;
% — 子图 2: 纵向速度 —
subplot(2,3,2);
plot(t, Vx, ‘Color’, [0.2 0.8 0.2], ‘LineWidth’, 1.5);
title(‘纵向速度’, title_font{:});
ylabel(‘速度 (m/s)’, label_font{:});
grid on; box on;
% — 子图 3: 侧向速度 —
subplot(2,3,3);
plot(t, Vy, ‘Color’, [0.2 0.6 0.8], ‘LineWidth’, 1.5);
title(‘侧向速度’, title_font{:});
ylabel(‘速度 (m/s)’, label_font{:});
grid on; box on;
% — 子图 4: 横摆角度 —
subplot(2,3,4);
plot(t, Yaw_Angle, ‘Color’, [0.9 0.5 0.1], ‘LineWidth’, 1.5);
title(‘横摆角度’, title_font{:});
ylabel(‘角度 (deg)’, label_font{:});
xlabel(‘时间 (s)’, label_font{:});
grid on; box on;
% — 子图 5: 角度误差 —
subplot(2,3,5);
plot(t, Error_Heading, ‘Color’, [0.9 0.2 0.2], ‘LineWidth’, 1.5);
title(‘角度误差’, title_font{:});
ylabel(‘误差 (rad)’, label_font{:});
xlabel(‘时间 (s)’, label_font{:});
grid on; box on;
% — 子图 6: 位移误差 —
subplot(2,3,6);
plot(t, Error_Lateral, ‘Color’, [0.6 0.2 0.8], ‘LineWidth’, 1.5);
title(‘位移误差’, title_font{:});
ylabel(‘误差 (m)’, label_font{:});
xlabel(‘时间 (s)’, label_font{:});
grid on; box on;
% 调整布局
sgtitle(‘Carsim-Simulink联合仿真验证模型’, ‘Color’, ‘w’, ‘FontSize’, 14);
数据模拟:代码中使用了正弦函数和指数衰减函数来模拟双移线工况下的典型车辆响应。例如,Error_Lateral 模拟了控制器介入后,横向误差逐渐收敛到 0 的过程。
绘图风格:使用了 subplot(2,3,x) 来复刻图片中的 2 行 3 列布局,并设置了黑色背景和白色坐标轴,以匹配您提供的截图风格。
物理意义:
角度误差:反映了车辆航向与道路方向的吻合程度。
位移误差:反映了车辆是否跑偏,是评价路径跟踪算法(如 MPC、PID、LQR)性能的最重要指标。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)