1. 自动驾驶中的局部规划算法概述
在自动驾驶系统中,路径规划通常分为全局规划和局部规划两个层次。全局规划负责从起点到终点的整体路线生成,而局部规划则处理实时环境中的动态避障和轨迹优化。当车辆遇到突然出现的行人、其他车辆或道路施工等意外情况时,局部规划算法需要在毫秒级时间内重新计算安全可行的路径。
目前主流的局部规划算法包括TEB(Timed Elastic Band)、DWA(Dynamic Window Approach)和EGOplanner等。这些算法各有特点,适用于不同的自动驾驶场景。TEB算法通过弹性带模型优化时空轨迹,DWA采用动态窗口法在速度空间进行搜索,而EGOplanner则是一种基于梯度优化的高效规划器。它们都需要处理几个核心问题:如何平衡路径的最优性与安全性?如何在不同动态环境下保持稳定性?以及如何满足车辆的运动学约束?
提示:选择局部规划算法时,必须考虑车辆的运动学模型。轮式车辆与履带式车辆的算法参数设置会有显著差异。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. TEB算法原理与自动驾驶应用
2.1 TEB的核心工作机制
TEB算法将车辆轨迹视为一条由连续位姿点组成的"弹性带",每个位姿点包含位置坐标和时间戳。算法通过优化以下目标函数来调整这条带子:
- 路径长度最短(效率)
- 与障碍物距离最大(安全)
- 满足车辆运动学约束(可行性)
- 加速度/加加速度平滑(舒适性)
在自动驾驶中,TEB特别适合处理以下场景:
- 狭窄空间中的多障碍物避让(如停车场)
- 需要精确时间控制的场景(如通过绿灯路口)
- 非结构化道路上的动态避障
2.2 实际调参经验分享
在实车调试TEB算法时,有几个关键参数需要特别注意:
-
障碍物权重(obstacle_weight):
- 城市道路建议值:50-100
- 高速公路建议值:30-50
- 调整原则:环境越复杂,权重应越高
-
时间最优权重(time_optimal_weight):
yaml复制optimization: time_optimal_weight: 0.5 # 典型初始值这个参数控制算法对行驶时间的重视程度。实测表明,超过1.0可能导致轨迹抖动。
-
最大速度约束:
python复制max_vel_x = 2.0 # m/s (约7.2km/h) max_vel_theta = 0.5 # rad/s需要根据车辆类型和场景动态调整。我们在园区自动驾驶项目中发现,将最大转向速度限制在0.5rad/s以下可显著提高稳定性。
常见问题:当TEB轨迹出现"锯齿状"抖动时,通常需要检查以下三项:
- 障碍物代价函数的曲率权重是否过高
- 优化迭代次数是否充足(建议≥50次)
- 时间离散分辨率是否合理(dt_ref通常设为0.3-0.5s)
3. DWA算法深度解析
3.1 动态窗口法的数学基础
DWA算法通过在速度空间(v,ω)中采样可行速度对,并对每个采样点进行轨迹模拟和评分。其核心步骤如下:
-
速度空间离散化:
python复制v_samples = np.linspace(v_min, v_max, num=20) w_samples = np.linspace(-w_max, w_max, num=40) -
动态窗口计算:
- 考虑车辆制动距离:
v_window = [v_current - a_max*dt, v_current + a_max*dt] - 考虑障碍物距离:
v_admissible = sqrt(2 * dist_obs * a_max)
- 考虑车辆制动距离:
-
轨迹评分函数:
python复制
score = α*heading + β*dist + γ*velocity其中heading代表目标方向对齐度,dist是到最近障碍物的距离,velocity是当前速度。
3.2 自动驾驶中的DWA实现技巧
在真实车辆上部署DWA时,我们总结了以下经验:
-
速度采样策略:
- 城市道路:建议设置v_max=5m/s,Δv=0.2m/s
- 高速公路:v_max需根据限速调整,但Δv可增大到0.5m/s
-
特殊场景处理:
- 对于突然出现的障碍物,需要动态调整a_max参数
- 在弯道处应临时提高ω的采样密度
-
与感知模块的接口设计:
cpp复制struct Obstacle { Polygon footprint; float velocity; float reliability; // 感知置信度 };建议将感知置信度纳入评分函数,降低误检障碍物的影响。
4. EGOplanner的创新特性
4.1 梯度优化在路径规划中的应用
EGOplanner采用了一种基于B样条的轨迹表示方法,并通过梯度下降优化以下目标:
code复制min J = λ_smoothJ_smooth + λ_collJ_coll + λ_dynJ_dyn
其中碰撞代价J_coll采用ESDF(欧几里得符号距离场)进行高效计算,这是其相比TEB的主要优势。
4.2 实际部署中的性能对比
我们在同一自动驾驶平台上对比了三种算法的表现:
| 指标 | TEB | DWA | EGOplanner |
|---|---|---|---|
| 计算延迟(ms) | 35±5 | 28±3 | 22±2 |
| 成功率(%) | 92.3 | 88.7 | 95.1 |
| 最大加速度(m/s²) | 0.8 | 1.2 | 0.6 |
测试环境:模拟城市道路,包含20个动态障碍物。EGOplanner在保持较低计算延迟的同时,提供了更平滑的轨迹。
5. 多算法融合实践
5.1 混合规划架构设计
在实际项目中,我们采用了分层规划架构:
-
顶层决策器:根据场景选择主算法
- 结构化道路:优先EGOplanner
- 狭窄空间:启用TEB
- 紧急避障:切换DWA
-
轨迹仲裁模块:
python复制def trajectory_arbiter(teb_traj, dwa_traj): if emergency_condition: return dwa_traj else: return teb_traj if teb_traj.score > threshold else dwa_traj
5.2 典型问题排查指南
-
振荡问题:
- 现象:车辆在直线行驶时左右摇摆
- 解决方案:检查代价函数中的方向权重,适当降低横向误差权重
-
局部极小值:
- 现象:车辆在复杂障碍前停滞
- 解决方案:引入随机扰动或切换全局规划
-
计算延迟:
- 现象:控制指令明显滞后
- 优化方法:预计算ESDF地图,减少在线计算量
6. 前沿发展与工程挑战
当前局部规划算法仍面临几个关键挑战:
- 多模态场景适应:同一算法需要适应城市、高速、停车场等不同环境
- 人机交互预测:如何将行人意图预测融入规划过程
- 硬件加速:算法在车载计算平台上的实时性保障
我们在最新项目中尝试将强化学习与传统规划算法结合,初步结果显示:
- 在交叉路口场景中,碰撞率降低12%
- 平均行驶速度提高8%
- 但计算资源消耗增加了约30%
