基于carsim与Simulink联合仿真的车辆换道轨迹规划与轨迹跟踪模型
具体内容包括:
-
cpar文件和simulink文件,并有联合仿真步骤的演示操作视频
-
carsim+simulink联合仿真实实现换道超车,包含换道决策,路径规划和轨迹跟踪,有直道和弯道超车两种。
-
包含路径规划算法+mpc轨迹跟踪算法可以适用于弯道道路,弯道车道保持,弯道变道86
-
carsim内规划轨迹可视化,道路环境可以自定义,资料包里面有视频教学和算法讲解。
以下是一个基于 CarSim 和 Simulink 联合仿真的车辆换道轨迹规划与轨迹跟踪模型的实现。该模型包括以下部分: -
换道轨迹规划:在 Simulink 中生成平滑的换道轨迹。
-
轨迹跟踪控制:使用 PID 控制器或 MPC(模型预测控制)实现轨迹跟踪。
-
CarSim 仿真:通过 CarSim 提供高精度的车辆动力学模型。
1. 系统概述
功能
- 轨迹规划:生成平滑的换道轨迹(如五次多项式或正弦函数)。
- 轨迹跟踪:通过控制器使车辆跟随规划的轨迹。
- 联合仿真:Simulink 生成控制输入,CarSim 模拟车辆动力学行为。
关键技术
- 轨迹规划:五次多项式插值、正弦函数等。
- 轨迹跟踪控制:PID 控制器、MPC 控制器等。
- 联合仿真接口:通过 Simulink-CarSim 接口实现数据交互。
—
2. MATLAB/Simulink 实现
主程序文件 (main_trajectory_planning_tracking.m
)
clc; clear; close all;
% 初始化参数
dt = 0.01; % 时间步长
T = 10; % 仿真时间
t = 0:dt:T; % 时间向量
% 换道轨迹规划
laneChangeTrajectory = planLaneChangeTrajectory(t);
% 将轨迹传递给 Simulink
simin.time = t';
simin.signals.values = laneChangeTrajectory';
simin.signals.dimensions = [2, 1]; % [横向位置, 纵向位置]
% 设置 Simulink 参数
set_param('VehicleTrajectoryTracking', 'SimulationCommand', 'update');
set_param('VehicleTrajectoryTracking', 'StopTime', num2str(T));
% 运行 Simulink 模型
sim('VehicleTrajectoryTracking');
% 获取仿真结果
simout = out.simout.Data; % 从 Simulink 输出获取轨迹跟踪结果
% 绘图
figure;
plot(laneChangeTrajectory(:, 1), laneChangeTrajectory(:, 2), 'r--', 'LineWidth', 1.5);
hold on;
plot(simout(:, 1), simout(:, 2), 'b-', 'LineWidth', 1.5);
xlabel('纵向位置 (m)');
ylabel('横向位置 (m)');
legend('规划轨迹', '实际轨迹');
title('车辆换道轨迹规划与跟踪');
grid on;
—
换道轨迹规划函数 (planLaneChangeTrajectory.m
)
function trajectory = planLaneChangeTrajectory(t)
% 规划换道轨迹
% 输入: 时间向量 t
% 输出: 轨迹 [x, y] (纵向位置, 横向位置)
% 参数
v = 20; % 车速 (m/s)
laneWidth = 3.5; % 车道宽度 (m)
T = max(t); % 总时间
% 纵向位置 (匀速行驶)
x = v * t';
% 横向位置 (五次多项式插值)
coeffs = [0, 0, 0, 10*laneWidth/T^3, -15*laneWidth/T^4, 6*laneWidth/T^5];
y = polyval(coeffs, t');
% 轨迹矩阵
trajectory = [x, y];
end
Simulink 模型 (VehicleTrajectoryTracking.slx
)
1. 输入信号
- 使用
From Workspace
模块加载规划的轨迹数据(simin
)。 - 输入信号格式为
[时间, 横向位置, 纵向位置]
。
2. 轨迹跟踪控制器
- PID 控制器:
- 使用两个 PID 控制器分别控制横向和纵向误差。
- 参数需要根据实际车辆模型进行调整。
- MPC 控制器(可选):
- 使用 MATLAB 的 MPC Toolbox 设计模型预测控制器。
- 需要提供车辆的动力学模型作为预测模型。
3. CarSim 接口
- 使用
Simscape Multibody
或CarSim S-Function
模块与 CarSim 进行联合仿真。 - 将 Simulink 的控制输入(如方向盘转角、油门、刹车)传递给 CarSim。
- 从 CarSim 获取车辆状态(如位置、速度、加速度)。
PID 控制器实现 (pidController.m
)
function controlInput = pidController(error, errorSum, lastError, Kp, Ki, Kd, dt)
% PID 控制器
% 输入:
% error: 当前误差
% errorSum: 累积误差
% lastError: 上一次误差
% Kp, Ki, Kd: PID 参数
% dt: 时间步长
% 输出:
% controlInput: 控制输入
% 计算 PID 控制输入
P = Kp * error;
I = Ki * errorSum * dt;
D = Kd * (error - lastError) / dt;
controlInput = P + I + D;
end
3. 功能说明
-
换道轨迹规划:
- 使用五次多项式生成平滑的换道轨迹,确保轨迹的连续性和可跟踪性。
-
轨迹跟踪控制:
- PID 控制器:简单易实现,适合线性系统。
- MPC 控制器:考虑多变量约束和未来动态,适合复杂场景。
-
CarSim 仿真:
- 提供高精度的车辆动力学模型,模拟真实车辆行为。
- 支持复杂的道路条件和环境干扰。
4. 实验结果
运行上述代码后,程序会生成以下内容:
- 规划轨迹:
- 显示理想的换道轨迹。
- 实际轨迹:
- 显示车辆在 CarSim 中的实际运动轨迹。
- 误差分析:
- 分析横向和纵向误差,评估轨迹跟踪性能。
5. 注意事项
-
MATLAB 工具箱依赖:
- 需要安装 Simulink、CarSim 接口、Control System Toolbox 和 MPC Toolbox。
-
参数调整:
- 根据实际车辆参数和仿真需求调整 PID 或 MPC 控制器的参数。
-
扩展功能:
- 可以引入障碍物检测与避障算法,增强换道安全性。
- 支持多车道换道和复杂道路条件。
希望这段代码能够帮助你完成基于 CarSim 和 Simulink 的车辆换道轨迹规划与轨迹跟踪模型!