Apollo自动驾驶右转场景的决策规划优化方案

1次阅读
没有评论

共计 1889 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

1. 背景与痛点

自动驾驶车辆在路口右转时面临多重技术挑战。右转场景通常涉及复杂的交通参与者交互,包括对向直行车辆、行人过街、自行车穿行等动态障碍物。主要痛点可归纳为:

Apollo 自动驾驶右转场景的决策规划优化方案

  • 盲区处理 :A 柱遮挡导致视觉盲区,需依赖多传感器冗余检测
  • 轨迹平滑性 :传统规划算法在曲率变化处易产生突变,影响乘坐舒适性
  • 决策时效性 :需在 100ms 内完成环境感知 - 决策 - 控制的闭环响应
  • 规则合规性 :不同地区右转交规差异(如红灯是否允许右转)

2. 技术方案对比

方案类型 传统方法 Apollo 优化方案
路径生成 固定半径圆弧 + 直线拼接 基于 Frenet 坐标系的五次多项式平滑
障碍物响应 完全停止等待 动态避让走廊 (Dynamic Corridor)
决策框架 有限状态机 分层强化学习 (Hierarchical RL)
控制执行 PID 跟踪 MPC+ 前馈补偿

3. 核心实现

3.1 多传感器数据融合

Apollo 采用前向毫米波雷达、摄像头、激光雷达的异构数据融合:

  1. 雷达提供 100m 范围内动态物体相对速度
  2. 摄像头实现交通灯检测和行人识别
  3. 激光雷达点云用于构建局部高精地图

通过卡尔曼滤波进行时间对齐后,各传感器数据输入到感知模块的统一坐标系中。

3.2 动态路径规划算法

右转路径在 Frenet 坐标系下分解为:

# Apollo 中的 Frenet 路径生成代码片段
class FrenetPath:
    def __init__(self):
        self.t = []  # 时间序列
        self.d = []  # 横向偏移
        self.s = []  # 纵向位移

    def to_cartesian(self, reference_line):
        # 将 Frenet 坐标转换回笛卡尔坐标系
        cartesian_points = []
        for i in range(len(self.s)):
            s, d = self.s[i], self.d[i]
            xy = reference_line.get_cartesian(s, d)
            cartesian_points.append(xy)
        return cartesian_points

3.3 曲率连续处理

采用 Quintic 多项式保证曲率连续:

l(s) = a0 + a1*s + a2*s² + a3*s³ + a4*s⁴ + a5*s⁵

通过约束条件:
– 起点 / 终点位置、速度、加速度
– 最大曲率限制(通常 <0.1 m⁻¹)
– 横向加速度限制(<1.5 m/s²)

4. 代码示例

以下展示 Apollo 中轨迹优化的关键实现:

// modules/planning/math/curve1d/quintic_polynomial_curve1d.cc
void QuinticPolynomialCurve1d::DeriveCoefficients(
    const double x0, const double dx0, const double ddx0,
    const double x1, const double dx1, const double ddx1,
    const double param) {
  // 计算五次多项式系数
  const double p = param;
  const double p2 = p * p;
  const double p3 = p2 * p;

  coeff_[0] = x0;
  coeff_[1] = dx0;
  coeff_[2] = ddx0 / 2.0;

  Matrix3d A;
  A << p3, p2 * p2, p2 * p3,
       3 * p2, 4 * p3, 5 * p2 * p2,
       6 * p, 12 * p2, 20 * p3;

  Vector3d b;
  b << x1 - coeff_[0] - coeff_[1] * p - coeff_[2] * p2,
       dx1 - coeff_[1] - 2 * coeff_[2] * p,
       ddx1 - 2 * coeff_[2];

  Vector3d x = A.colPivHouseholderQr().solve(b);
  coeff_[3] = x(0);
  coeff_[4] = x(1);
  coeff_[5] = x(2);
}

5. 性能考量

在北京亦庄测试基地的实测数据:

指标 优化前 优化后
规划耗时 (ms) 120 65
轨迹抖动次数 /km 8.2 1.3
急刹车次数 / 百次 15 3

6. 避坑指南

6.1 参数调优

  • 曲率权重 :不宜超过 0.3,否则会导致路径过于保守
  • 时间分辨率 :建议保持在 0.1s,过小会增加计算负荷

6.2 传感器标定

  1. 激光雷达与 IMU 的时间同步误差需 <5ms
  2. 摄像头标定板距离应覆盖 3 -50m 范围
  3. 雷达安装俯仰角建议 2 - 5 度避免地面反射

6.3 边缘 Case 处理

  • 右转时对向车流突然加速:增加 10% 的安全余量
  • 行人突然闯入:采用 TTC(Time-To-Collision)<2s 作为紧急制动阈值

7. 开放问题

当前方案在以下场景仍有优化空间:

  1. 无保护右转时的人车博弈决策
  2. 大雨天气下的传感器降级处理
  3. 特殊车辆(如超长货车)的路径预测

期待读者共同探讨更优的解决方案。

正文完
 0
评论(没有评论)