prescan,carsim,simulink三软件联合仿真,实现弯道超车,避撞前方机动车,使用frent坐标系下五次多项式规划加模型预测控制,有横向轨迹跟踪对比图,仿真图。 可包调试运行。 需要安装软件版本为,matlab2020b以上,carsim2020.0,prescan8.5。
在自动驾驶领域,车辆的路径规划与避撞控制是关键技术。今天咱就来聊聊如何通过Prescan、CarSim和Simulink三软件联合仿真,实现弯道超车并避撞前方机动车,这里用到了Frent坐标系下五次多项式规划加模型预测控制,最后还有横向轨迹跟踪对比图和仿真图呈现哦,而且包调试运行。不过在开始前,得确保安装软件版本为matlab2020b以上,carsim2020.0,prescan8.5 。
一、整体思路
- Frent坐标系下五次多项式规划:在复杂的弯道场景中,传统笛卡尔坐标系不太方便描述车辆轨迹。Frent坐标系则以道路中心线为参考,能更灵活地规划路径。五次多项式因其具有足够的自由度,可以很好地满足起始点和终点的位置、速度及加速度等边界条件。
下面是简单示意如何构建五次多项式路径规划的代码(这里用Python示意,实际在项目中可能用Matlab语言结合相关库实现):
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求解出五次多项式的系数。最后,在一定范围内生成路径点并绘制出路径。
- 模型预测控制(MPC):规划好路径后,得让车辆能沿着规划的轨迹行驶,这就用到MPC。MPC通过建立车辆的动力学模型,预测车辆未来的状态,并根据预测结果和目标轨迹不断优化控制输入(如方向盘转角、油门、刹车等)。
在Matlab中利用MPC工具箱实现简单的车辆横向控制的代码片段如下(简化示意):
% 车辆参数 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。接着离散化车辆动力学模型,得到状态空间矩阵A、B、C。然后利用这些信息创建MPC控制器对象mpcObj,并对控制输入(这里是方向盘转角相关量)设置了变化率限制、上下限等约束,对输出变量设置了软约束和惩罚系数。
二、三软件联合仿真设置
- Prescan:主要用于搭建场景,比如设置弯道、前方机动车等元素。在Prescan中创建一个包含弯道的道路场景,并放置目标车辆和前方障碍物车辆。同时,配置车辆的传感器,例如毫米波雷达,用于检测前方车辆的位置和速度等信息。
- CarSim:提供精确的车辆动力学模型。将Prescan中车辆的相关参数传递给CarSim,CarSim根据输入的控制信号(如方向盘转角、油门、刹车)计算车辆的实际运动状态,如位置、速度、加速度等,并将这些信息反馈给Prescan和Simulink。
- Simulink:作为控制算法实现的平台。将前面提到的Frent坐标系下五次多项式规划和MPC控制算法在Simulink中搭建模型。接收来自Prescan的传感器信息和CarSim的车辆状态信息,经过算法处理后输出控制信号给CarSim。
三、仿真结果
- 横向轨迹跟踪对比图:可以清晰看到规划轨迹与实际车辆行驶轨迹的对比。在理想情况下,实际轨迹应紧密跟随规划轨迹。如果存在偏差,可分析是算法参数问题还是车辆动力学模型与实际差异导致的。通过对比图能直观评估控制算法的跟踪性能。
- 仿真图:展示整个弯道超车避撞过程的动态画面。从车辆接近弯道、开始超车,到成功避开前方机动车的全过程,能更全面地观察车辆的运动状态和周围环境的变化。
总之,通过Prescan、CarSim和Simulink的联合仿真,结合Frent坐标系下五次多项式规划和模型预测控制,我们能够有效实现弯道超车并避撞前方机动车的功能,为自动驾驶技术的研究提供了有力的验证手段。而且包调试运行,大家可以放心上手实践。