基于Prescan、CarSim和Simulink的弯道超车避撞联合仿真

prescan,carsim,simulink三软件联合仿真,实现弯道超车,避撞前方机动车,使用frent坐标系下五次多项式规划加模型预测控制,有横向轨迹跟踪对比图,仿真图。 可包调试运行。 需要安装软件版本为,matlab2020b以上,carsim2020.0,prescan8.5。

在自动驾驶领域,车辆的路径规划与避撞控制是关键技术。今天咱就来聊聊如何通过Prescan、CarSim和Simulink三软件联合仿真,实现弯道超车并避撞前方机动车,这里用到了Frent坐标系下五次多项式规划加模型预测控制,最后还有横向轨迹跟踪对比图和仿真图呈现哦,而且包调试运行。不过在开始前,得确保安装软件版本为matlab2020b以上,carsim2020.0,prescan8.5 。

一、整体思路

  1. Frent坐标系下五次多项式规划:在复杂的弯道场景中,传统笛卡尔坐标系不太方便描述车辆轨迹。Frent坐标系则以道路中心线为参考,能更灵活地规划路径。五次多项式因其具有足够的自由度,可以很好地满足起始点和终点的位置、速度及加速度等边界条件。

下面是简单示意如何构建五次多项式路径规划的代码(这里用Python示意,实际在项目中可能用Matlab语言结合相关库实现):

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

# 定义起始点和终点条件
start_s = 0
start_d = 0
start_d_dot = 0
start_d_ddot = 0
end_s = 100
end_d = 5
end_d_dot = 0
end_d_ddot = 0

# 构建五次多项式系数矩阵
A = np.array([
    [1, 0, 0, 0, 0, 0],
    [0, 1, 0, 0, 0, 0],
    [0, 0, 2, 0, 0, 0],
    [1, end_s, end_s**2, end_s**3, end_s**4, end_s**5],
    [0, 1, 2*end_s, 3*end_s**2, 4*end_s**3, 5*end_s**4],
    [0, 0, 2, 6*end_s, 12*end_s**2, 20*end_s**3]
])

b = np.array([start_d, start_d_dot, start_d_ddot, end_d, end_d_dot, end_d_ddot])

# 求解系数
coefficients = np.linalg.solve(A, b)

# 生成路径点
s_vals = np.linspace(start_s, end_s, 100)
d_vals = np.polyval(coefficients, s_vals)

plt.plot(s_vals, d_vals)
plt.xlabel('s (along the reference line)')
plt.ylabel('d (lateral distance)')
plt.title('五次多项式路径规划示例')
plt.show()

代码分析:这段代码首先定义了起始点和终点在Frent坐标系下的位置、速度和加速度信息。然后构建了一个系数矩阵 A 和条件向量 b,通过 np.linalg.solve 求解出五次多项式的系数。最后,在一定范围内生成路径点并绘制出路径。

  1. 模型预测控制(MPC):规划好路径后,得让车辆能沿着规划的轨迹行驶,这就用到MPC。MPC通过建立车辆的动力学模型,预测车辆未来的状态,并根据预测结果和目标轨迹不断优化控制输入(如方向盘转角、油门、刹车等)。

在Matlab中利用MPC工具箱实现简单的车辆横向控制的代码片段如下(简化示意):

matlab 复制代码
% 车辆参数
L = 2.8; % 轴距
Ts = 0.1; % 采样时间

% 离散化车辆动力学模型
A = [1 Ts 0 0; 0 1 0 0; 0 0 1 Ts; 0 0 0 1];
B = [0; Ts/L; 0; 1/L];
C = [1 0 0 0; 0 0 1 0];

sys = ss(A, B, C, 0, Ts);

% 定义MPC控制器
mpcObj = mpc(sys);
mpcObj.MV(1).RateMin = -0.1;
mpcObj.MV(1).RateMax = 0.1;
mpcObj.MV(1).Min = -0.5;
mpcObj.MV(1).Max = 0.5;
mpcObj.OV(1).SoftMax = 1;
mpcObj.OV(1).SoftMaxPenalty = 100;

代码分析:这里先定义了车辆的基本参数,如轴距 L 和采样时间 Ts。接着离散化车辆动力学模型,得到状态空间矩阵 ABC。然后利用这些信息创建MPC控制器对象 mpcObj,并对控制输入(这里是方向盘转角相关量)设置了变化率限制、上下限等约束,对输出变量设置了软约束和惩罚系数。

二、三软件联合仿真设置

  1. Prescan:主要用于搭建场景,比如设置弯道、前方机动车等元素。在Prescan中创建一个包含弯道的道路场景,并放置目标车辆和前方障碍物车辆。同时,配置车辆的传感器,例如毫米波雷达,用于检测前方车辆的位置和速度等信息。
  2. CarSim:提供精确的车辆动力学模型。将Prescan中车辆的相关参数传递给CarSim,CarSim根据输入的控制信号(如方向盘转角、油门、刹车)计算车辆的实际运动状态,如位置、速度、加速度等,并将这些信息反馈给Prescan和Simulink。
  3. Simulink:作为控制算法实现的平台。将前面提到的Frent坐标系下五次多项式规划和MPC控制算法在Simulink中搭建模型。接收来自Prescan的传感器信息和CarSim的车辆状态信息,经过算法处理后输出控制信号给CarSim。

三、仿真结果

  1. 横向轨迹跟踪对比图:可以清晰看到规划轨迹与实际车辆行驶轨迹的对比。在理想情况下,实际轨迹应紧密跟随规划轨迹。如果存在偏差,可分析是算法参数问题还是车辆动力学模型与实际差异导致的。通过对比图能直观评估控制算法的跟踪性能。
  2. 仿真图:展示整个弯道超车避撞过程的动态画面。从车辆接近弯道、开始超车,到成功避开前方机动车的全过程,能更全面地观察车辆的运动状态和周围环境的变化。

总之,通过Prescan、CarSim和Simulink的联合仿真,结合Frent坐标系下五次多项式规划和模型预测控制,我们能够有效实现弯道超车并避撞前方机动车的功能,为自动驾驶技术的研究提供了有力的验证手段。而且包调试运行,大家可以放心上手实践。

prescan,carsim,simulink三软件联合仿真,实现弯道超车,避撞前方机动车,使用frent坐标系下五次多项式规划加模型预测控制,有横向轨迹跟踪对比图,仿真图。 可包调试运行。 需要安装软件版本为,matlab2020b以上,carsim2020.0,prescan8.5。

相关推荐
UTwelve18 小时前
【UE】如何手搓一个完美贴合地形的 Mesh Decal(面片贴花)
ue5·材质·贴图·着色器
threelab18 小时前
挑战AI辅助从零构建3D模型编辑器:01基于Vue3 + Three.js的现代化架构设计
javascript·人工智能·3d·前端框架·着色器
♡すぎ♡5 天前
ShaderLab:可互动水面(基于RenderTexture,实时生成动态扰动)
计算机图形学·贴图·opengl·着色器
郑寿昌7 天前
UE5与UE6在Lumen和Nanite的差异解析
游戏引擎·图形渲染·着色器
threelab8 天前
Three.js 动态旋转同心圆着色器 | 三维可视化效果
开发语言·javascript·着色器
♡すぎ♡9 天前
ShaderLab:海面——顶点变换,程序化生成无需贴图
计算机图形学·opengl·着色器
UTwelve16 天前
【UE】Gerstner Waves 水体模拟 4 :[颜色构成阶段3、4] - 实现NAP+CDOM
ue5·着色器
Yasin Chen16 天前
Unity TMP_SDF 分析(五)片元着色器
unity·游戏引擎·着色器
AIminminHu18 天前
OpenGL渲染与几何内核那点事-项目实践理论补充(一-3-(10):从“像素画师”到“硅基神明”:一个CAD开发者穿越GPU着色器管线的十年进化史)
着色器·片段着色器·顶点着色器·opengl 1.0·顶点/片段着色器
AIminminHu21 天前
OpenGL渲染与几何内核那点事-项目实践理论补充(一-3-(7):从“显卡不听话”到“GPU秒懂你”:一个CAD老兵的着色器驯服史))
着色器·编译流程·着色器语言 glsl·创建着色器对象·glcreateshader·gluseprogram·glcreateprogram