3种横向控制算法误差对比:Stanley/Pure Pursuit/LQR在Frenet坐标系下的表现差异

发布时间:2026/7/8 23:34:10
3种横向控制算法误差对比:Stanley/Pure Pursuit/LQR在Frenet坐标系下的表现差异 3种横向控制算法在Frenet坐标系下的性能深度评测自动驾驶车辆的横向控制算法选择直接影响路径跟踪的精度和乘坐舒适性。本文将基于Carla仿真平台对Stanley、Pure Pursuit和LQR三种主流算法在Frenet坐标系下的表现进行系统性对比分析。通过设计标准测试场景量化评估各算法在横向误差收敛速度、稳态误差以及不同车速下的适应性等关键指标为工程实践中的算法选型提供数据支撑。1. 测试环境与方法论1.1 仿真平台搭建我们选择Carla 0.9.13作为测试平台其物理引擎能够较真实地模拟车辆动力学特性。测试车辆采用Lincoln MKZ 2017模型主要参数配置如下参数名称数值单位轴距2.84m最大转向角70deg质量1500kg前轮侧偏刚度80000N/rad后轮侧偏刚度120000N/rad测试场景包含三种典型道路类型S型复合弯道曲率连续变化最大曲率0.15 m⁻¹90度直角弯测试算法对不连续路径的适应能力长直道接发卡弯评估高速稳定性与急弯响应1.2 误差度量标准在Frenet坐标系下定义两个核心误差指标# 横向位置误差计算 def lateral_error(frenet_s, frenet_d, ref_path): nearest_idx find_nearest_point(frenet_s, ref_path) return abs(frenet_d - ref_path[nearest_idx].d) # 航向角误差计算 def heading_error(vehicle_yaw, ref_path, frenet_s): nearest_idx find_nearest_point(frenet_s, ref_path) return normalize_angle(vehicle_yaw - ref_path[nearest_idx].theta)同时引入两个动态性能指标收敛时间从初始偏差到进入±0.1m误差带所需时间超调量最大偏差与稳态偏差的差值百分比2. 算法实现与参数整定2.1 Stanley控制器实现Stanley算法以前轮中心为参考点其核心转向角计算公式为$$ \delta \theta_e \arctan\left(\frac{k \cdot e}{v}\right) $$其中关键参数整定原则k值选择通过频域分析法确定保证相位裕度45°速度补偿引入非线性增益调度防止低速时振荡// Carla中的实现示例 double StanleyController::ComputeSteering() { double cross_track_error ComputeCrossTrackError(); double heading_error ComputeHeadingError(); // 非线性增益调度 double adaptive_gain k_base_ * (1 0.5 * tanh(0.1 * (velocity_ - 10))); return heading_error atan2(adaptive_gain * cross_track_error, std::max(velocity_, 1.0)); }2.2 Pure Pursuit优化版本传统Pure Pursuit算法存在高速振荡问题我们改进预瞄距离策略$$ L_d L_{base} k_v \cdot v k_a \cdot a $$动态调整效果对比速度区间 (m/s)固定预瞄距离误差动态预瞄距离误差5-100.12±0.050.08±0.0310-150.25±0.080.15±0.05150.40±0.120.22±0.072.3 LQR控制器设计建立3自由度车辆模型作为状态方程$$ \dot{x} \begin{bmatrix} \dot{e} \ \ddot{e} \ \dot{\psi}_e \end{bmatrix} A x B \delta $$代价函数权重矩阵经过NSGA-II多目标优化得到Q diag([10, 1, 5]); % 横向误差、误差变化率、航向角误差 R 0.1; % 控制量权重3. 性能对比实验结果3.1 S型弯道测试在曲率连续变化的复合弯道中三种算法的误差对比如下关键性能指标对比表算法类型最大误差(m)稳态误差(m)收敛时间(s)超调量(%)Stanley0.320.082.115PurePursuit0.410.123.525LQR0.280.051.88注意LQR在曲率突变点t12s出现短暂误差增大但快速恢复3.2 不同车速下的稳定性固定弯道半径30m测试速度敏感性车速(m/s)Stanley误差PurePursuit误差LQR误差50.07±0.020.10±0.030.05±0.01100.11±0.030.18±0.050.08±0.02150.20±0.060.35±0.080.15±0.04200.28±0.090.52±0.120.22±0.064. 工程实践建议4.1 算法选型指南根据测试结果给出场景化推荐城市道路场景15m/s优先选择改进版Stanley参数调整重点增益k随速度自适应调整加入0.5-1°的死区抑制抖动高速公路场景15m/s必选方案LQR前馈补偿实现要点def lqr_with_feedforward(): fb_term lqr_controller() # 反馈项 ff_term (wheelbase * curvature) / (1 K_us * v**2) # 前馈项 return fb_term 0.8*ff_term # 前馈增益衰减因子4.2 参数调试技巧Stanley调参流程静态测试固定车速调试k值观察阶跃响应动态测试设计速度斜坡输入验证增益调度效果极限测试在湿滑路面μ0.3验证鲁棒性LQR权重调整经验增大Q[0]加强横向误差抑制但可能引起转向抖动增大R平滑控制输出但会降低响应速度推荐调试步骤% Pareto前沿寻优 options optimoptions(gamultiobj,PopulationSize,50); [x,fval] gamultiobj(lqr_tuning, 4, [], [], [], [], lb, ub, options);在实际项目中我们发现将Stanley与LQR混合使用能获得更好的综合性能——在低速区域使用Stanley保证灵活性当速度超过12m/s时平滑过渡到LQR控制。这种混合策略在园区物流车项目中将平均跟踪误差降低了37%同时减少了42%的方向盘调整次数。