ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

自动驾驶轨迹跟踪:MPC、PID、Stanley与PP算法对比

自动驾驶轨迹跟踪:MPC、PID、Stanley与PP算法对比

1. 项目背景与核心目标

车辆横向轨迹跟踪是自动驾驶和线控转向系统的关键技术,直接影响行驶安全性和舒适性。这个项目通过Simulink与Carsim联合仿真平台,对比研究MPC、PID、Stanley和PP四种控制算法在轨迹跟踪中的性能表现。作为一名从事车辆控制算法开发多年的工程师,我认为这种多算法对比研究对实际工程选型具有重要参考价值。

联合仿真的优势在于:Carsim提供高精度的车辆动力学模型,能准确模拟真实车辆行为;Simulink则提供灵活的控制算法开发环境。二者结合既保证了仿真的真实性,又便于算法快速迭代。项目最终产出包括完整的仿真模型和详细的联合运行说明文档,这对想入门车辆控制算法开发的工程师来说是个很好的学习资源。

2. 仿真平台搭建与配置

2.1 工具链选型与配置

我们选择Carsim 2019作为车辆动力学仿真工具,搭配Matlab/Simulink R2022b进行控制算法开发。这个组合在业内被广泛使用,主要考虑以下几点:

  • Carsim的车辆模型经过大量实测数据验证,可信度高
  • Simulink的模块化设计便于算法快速实现和调试
  • 两者之间的接口成熟稳定,数据交互实时性好

注意:安装时要确保Carsim和Matlab的版本兼容性,建议参考官方文档的版本匹配表。我们遇到过因版本不匹配导致接口通信失败的问题。

2.2 车辆动力学建模

采用经典的二自由度车辆模型(自行车模型)作为控制算法设计的基础,包含:

  • 横向运动方程:m(v̇ + ur) = Fyf + Fyr
  • 横摆运动方程:Izṙ = aFyf - bFyr

其中关键参数包括:

  • m:车辆质量(kg)
  • Iz:横摆转动惯量(kg·m²)
  • a,b:前后轴到质心的距离(m)
  • Fyf,Fyr:前后轮侧向力(N)

这个简化模型在保证主要动力学特性的同时,大大降低了计算复杂度,适合实时控制。

2.3 联合仿真框架设计

仿真系统采用三层架构:

  1. 参考轨迹层:生成标准测试轨迹(双移线、圆周等)
  2. 控制算法层:实现四种控制算法
  3. 车辆动力学层:Carsim运行高精度车辆模型

数据流向为:Carsim输出车辆状态→Simulink计算控制指令→Carsim接收指令并更新车辆状态,形成闭环。在调试时,建议先单独测试各层功能,再逐步集成。

3. 控制算法实现细节

3.1 MPC控制器设计

模型预测控制的核心是滚动优化,我们的实现步骤如下:

  1. 预测模型:基于二自由度模型离散化得到状态空间方程 x(k+1) = Ax(k) + Bu(k) y(k) = Cx(k)

  2. 目标函数设计: J = Σ(||y(k+i)-r(k+i)||²_Q + ||Δu(k+i)||²_R) 其中Q、R为权重矩阵,需要根据控制需求调整

  3. 约束条件:

    • 转向角范围:-30° ≤ δ ≤ 30°
    • 转向角速度:|Δδ| ≤ 10°/s
  4. 优化求解:使用Matlab的quadprog函数在线求解

经验分享:MPC的预测时域和采样周期需要仔细权衡。我们最终选择预测时域2s,采样周期0.05s,在精度和计算量之间取得了较好平衡。

3.2 PID控制器实现

PID控制器的设计要点:

  1. 误差定义:

    • 横向误差ey:车辆质心到参考轨迹的垂直距离
    • 航向误差eψ:车辆航向与参考轨迹方向的夹角
  2. 控制律: δ = Kpey + Ki∫eydt + Kd*dey/dt

  3. 参数整定方法:

    • 先调Kp使系统快速响应但不震荡
    • 再调Kd抑制超调
    • 最后调Ki消除稳态误差

我们通过试凑法得到的参数为:Kp=0.3, Ki=0.05, Kd=0.1。PID的优势是结构简单,但需要针对不同车速分别调参。

3.3 Stanley控制器开发

Stanley算法基于几何原理,实现步骤如下:

  1. 计算航向误差eψ和横向误差ey
  2. 转向角由两部分组成: δ = eψ + arctan(k*ey/v) 其中k为增益系数,v为车速
  3. 加入前馈项补偿路径曲率: δff = L/R L为轴距,R为转弯半径

关键点是增益k的选择,我们通过仿真确定k=2.5时在各种速度下都能保持稳定。

3.4 PP控制器实现

预瞄控制器的设计要点:

  1. 预瞄距离计算: ld = l0 + kv*v 典型值l0=5m, kv=0.2

  2. 预瞄点误差计算: ey = yref(ld) - yvehicle

  3. 控制律: δ = Kpey + Kψψ̇ 其中ψ̇为横摆角速度反馈

预瞄距离与车速的自适应关系是PP控制的精髓,需要根据车辆动态特性仔细调整参数。

4. 仿真结果对比分析

4.1 测试场景设置

我们设计了三类测试场景:

  1. 双移线测试:60km/h,评估瞬态响应
  2. 圆周测试:半径50m,评估稳态精度
  3. 随机曲率测试:评估算法适应性

每种场景下都记录横向误差、航向误差和控制量变化。

4.2 性能指标对比

算法最大横向误差(m)RMS横向误差(m)最大航向误差(°)计算时间(ms)
MPC0.080.030.515
PID0.200.102.01
Stanley0.150.071.22
PP0.120.051.03

从数据可以看出:

  • MPC精度最高但计算量大
  • PID最简单但性能一般
  • Stanley和PP在精度和计算量上取得了较好平衡

4.3 典型问题与解决方案

  1. Carsim-Simulink通信延迟:

    • 现象:控制指令滞后导致系统不稳定
    • 解决:调整仿真步长为0.01s,启用实时同步选项
  2. MPC求解失败:

    • 现象:quadprog返回无解
    • 解决:松弛约束条件,增加迭代次数
  3. PID控制器震荡:

    • 现象:车辆轨迹出现高频摆动
    • 解决:降低Kp,增加Kd
  4. 预瞄距离选择:

    • 现象:PP控制在高车速时发散
    • 解决:调整预瞄距离公式中的kv参数

5. 工程应用建议

根据我们的实践经验,不同算法的适用场景如下:

  1. MPC:适用于高精度要求的自动驾驶场景,如自动泊车、紧密编队等。需要较强的计算平台支持。

  2. PID:适合对成本敏感的批量应用,如商用车车道保持系统。优点是易于实现和调试。

  3. Stanley:适合高速场景,如高速公路自动驾驶。几何特性使其对车速变化鲁棒。

  4. PP:适合追求舒适性的乘用车应用,如自适应巡航中的车道居中。

在实际项目中,可以考虑算法组合使用。例如高速用Stanley,低速用MPC,通过仲裁器平滑切换。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进