当前位置: 首页 > news >正文

自动驾驶轨迹规划算法——Apollo OpenSpace Planner

自动驾驶轨迹规划算法——Apollo OpenSpace Planner

文章目录

  • 自动驾驶轨迹规划算法——Apollo OpenSpace Planner
  • 一、Apollo OpenSpace Planner 是什么?
    • 1.1 定义与核心思想
    • 1.2 与其他规划器的区别
    • 1.3 典型应用场景
  • 二、Apollo OpenSpace Planner 的原理
    • 2.1 总体架构与数据流
    • 2.2 自由空间搜索(Hybrid A*)
      • 2.2.1 状态空间与运动学
      • 2.2.2 离散分辨率与网格索引
      • 2.2.3 代价函数与启发
      • 2.2.4 分析连接(Analytic Expansion)
      • 2.2.5 档位与步长策略
      • 2.2.6 碰撞检测(高效而稳健)
      • 2.2.7 搜索停止与路径回溯
    • 2.3 轨迹平滑优化(连续可控的可执行轨迹)
      • 2.3.1 变量与参数化
      • 2.3.2 目标函数(典型二次型)
      • 2.3.3 约束(硬约束与线性化)
      • 2.3.4 求解与收敛
    • 2.4 时间参数化(速度曲线与动力学约束)
      • 2.4.1 速度上限由几何与执行器决定
      • 2.4.2 前向/后向扫描(加速度与减速度边界)
      • 2.4.3 生成时序轨迹
    • 2.5 滚动重规划与稳健性
    • 2.6 推荐默认参数(可作为起始配置)
  • 三、Apollo OpenSpace Planner 的关键技术细节
    • 3.1 障碍物建模与地图表示
      • 3.1.1 ROI(Region of Interest)生成
      • 3.1.2 障碍物安全膨胀
      • 3.1.3 地图表示形式
    • 3.2 全局搜索与局部优化的结合
      • 3.2.1 全局搜索(Hybrid A*)的作用
      • 3.2.2 局部优化(SCP / QP)的作用
      • 3.2.3 交互机制
    • 3.3 轨迹下发与滚动规划机制
      • 3.3.1 轨迹离散与插值
      • 3.3.2 滚动规划周期
      • 3.3.3 轨迹有效性检查
    • 3.4 工程实现要点
      • 3.4.1 速度与换挡控制
      • 3.4.2 避障稳定性
      • 3.4.3 参数标定流程
    • 3.5 模块间数据交互
  • 四、Apollo OpenSpace Planner 的优势与局限
    • 4.1 优势
    • 4.2 局限

一、Apollo OpenSpace Planner 是什么?

1.1 定义与核心思想

Apollo OpenSpace Planner 是百度 Apollo 自动驾驶系统中专为 非结构化道路与开放空间 设计的 实时轨迹规划器
在这些场景中,车辆无法依赖标准车道线或明确的车道几何结构(如高速公路、城市主干道),而是需要在 二维自由空间 中根据障碍物分布、可行驶区域以及目标位置,直接规划可行轨迹。

核心思想是:

  • 直接在笛卡尔坐标系下进行空间搜索与轨迹优化,而非在 Frenet 坐标系中依赖车道参考线;
  • 在搜索过程中引入 车辆运动学约束(如最小转弯半径、最大曲率变化率等),保证生成的路径可以直接被执行;
  • 支持 前进、倒车、多段换向 等复杂机动,适应狭窄空间泊车、调头、绕障等任务;
  • 结合搜索与平滑优化,既能快速找到可行解,又能保证轨迹的连续性和舒适性。

在自动驾驶系统中,OpenSpace Planner 的职责是:

  • 基于障碍物地图和目标位置,搜索一条无碰撞、可执行的轨迹;
  • 在低速场景下同时考虑空间避障与机动动作(前进/倒车切换);
  • 对粗轨迹进行优化,使其满足车辆动力学约束与舒适性要求;
  • 以滚动规划方式实时更新轨迹,确保对环境变化做出响应。

1.2 与其他规划器的区别

特性Lattice PlannerEM PlannerOpenSpace Planner
适用场景有明确车道的规则道路城市道路、高速、换道、避障停车场、掉头区、港口、非结构化场地
规划空间Frenet 坐标下离散采样Frenet 坐标下路径-速度解耦笛卡尔坐标下二维自由空间
核心方法轨迹库 + 状态采样DP + QP 迭代优化Hybrid A* / A* + 平滑优化
运动模式单向前进单向前进支持前进 + 倒车 + 多次换向
动态障碍物处理较弱较强(ST 速度优化)中等(低速场景下基于简化预测的避让)
轨迹平滑性中等高(样条曲线平滑)高(优化器消除折线、控制曲率连续性)
实时性中等(需搜索+优化,低速场景可接受)

总结
OpenSpace Planner 最大的不同点在于,它完全摆脱了对车道几何的依赖,而是直接在障碍物地图构成的自由空间内进行规划,生成满足车辆运动学约束的可执行轨迹。这使它成为停车、调头、堆场作业等低速复杂场景的核心规划器。


1.3 典型应用场景

  1. 自动泊车(Autonomous Parking)
    • 自动驶入平行、垂直、斜列等多种类型的停车位;
    • 支持前进或倒车入位,多段机动操作。
  2. 狭窄空间调头(Tight-space U-turn)
    • 在仅略宽于车辆长度的道路上完成三点或多点调头;
    • 通过前进/倒车切换实现安全掉头。
  3. 港口、仓储调度(Logistics Yard Operations)
    • 在无明显道路标识的大型开放区域中,规划避障路径;
    • 绕过货物堆放、行人和临时障碍。
  4. 临时施工区绕行(Construction Zone Maneuvering)
    • 在封闭或无标线路段中重新寻找可行驶路径;
    • 避开施工设备和障碍物。
  5. 特种作业车辆机动(Special Vehicle Maneuvers)
    • 在机场、矿区、港口等特殊作业环境中完成精确轨迹规划;
    • 满足低速安全和路径可控性要求。

二、Apollo OpenSpace Planner 的原理

OpenSpace Planner 的核心是 自由空间搜索 + 轨迹平滑优化。在没有车道约束的开放区域(停车、调头、堆场)里,先用 Hybrid A* 找到一条可执行的“粗轨迹骨架”,再用 二次型/凸优化 平滑并加入动力学约束,最后做 时间参数化 生成可跟踪的时序轨迹。关于****Hybrid A*详细可以参考我这篇文章,QPSpline路径平滑可以参考这篇文章QPSpline


2.1 总体架构与数据流

输入:

  • 可行驶区域与静态障碍物:多边形/栅格/距离场(SDF)。
  • 动态障碍(低速场景常简化为准静态,必要时线性外推)。
  • 车辆状态 z=(x,y,θ,v)z=(x,y,\theta,v)z=(x,y,θ,v)、目标位姿 zg=(xg,yg,θg)z_g=(x_g,y_g,\theta_g)zg=(xg,yg,θg) 或目标盒(车位)。
  • 车辆几何:长 LvehL_\text{veh}Lveh、宽 WvehW_\text{veh}Wveh、轴距 LLL、转角上限 δmax⁡\delta_{\max}δmax

流程:

  1. ROI 生成 & 膨胀:裁剪规划区域,障碍物用 Minkowski 和(或 buffer)做安全膨胀 bsafeb_\text{safe}bsafe
  2. Hybrid A*:在 (x,y,θ,gear)(x,y,\theta,\text{gear})(x,y,θ,gear) 上搜索粗轨迹。
  3. 轨迹平滑(优化):将粗轨迹离散为锚点,最小化二差分/曲率并施加避障/曲率/边界等约束。
  4. 时间参数化:基于曲率与动态约束生成 v(s)v(s)v(s)v(t)v(t)v(t),得到 (x(t),y(t),θ(t),v(t))(x(t),y(t),\theta(t),v(t))(x(t),y(t),θ(t),v(t))
  5. 滚动重规划:每周期(~100 ms)用当前状态重启;拼接/继承上一周期解作为 warm start。

2.2 自由空间搜索(Hybrid A*)

2.2.1 状态空间与运动学

  • 状态s=(x,y,θ,gear)\mathbf{s}=(x,y,\theta,\text{gear})s=(x,y,θ,gear),gear∈{F,R}(前进/倒车)。

  • 控制原语(motion primitives)δ∈−δmax⁡,−δm,0,δm,δmax⁡\delta \in {-\delta_{\max}, -\delta_m, 0,\delta_m,\delta_{\max}}δδmax,δm,0,δm,δmax,步长 dsd_sds,档位切换允许但有惩罚。

  • 单轨模型(常速近似积分一小步)
    R=Ltan⁡δR = \frac{L}{\tan\delta}R=tanδL。对一步长 dsd_sds,若 δ≠0\delta \neq 0δ=0

    Δθ=σdsR,σ={+1,F−1,Rx′=x+R(sin⁡(θ+Δθ)−sin⁡θ)y′=y−R(cos⁡(θ+Δθ)−cos⁡θ)θ′=θ+Δθ\begin{aligned} \Delta\theta &= \sigma\,\frac{d_s}{R},\quad \sigma=\begin{cases}+1,&\text{F}\\-1,&\text{R}\end{cases}\\ x' &= x + R\left(\sin(\theta+\Delta\theta)-\sin\theta\right)\\ y' &= y - R\left(\cos(\theta+\Delta\theta)-\cos\theta\right)\\ \theta' &= \theta + \Delta\theta \end{aligned}Δθxyθ=σRds,σ={+1,1,FR=x+R(sin(θ+Δθ)sinθ)=yR(cos(θ+Δθ)cosθ)=θ+Δθ

    δ=0\delta = 0δ=0(直线),x′=x+σ,dscos⁡θ,;y′=y+σ,dssin⁡θ,;θ′=θx' = x + \sigma,d_s\cos\theta,; y' = y + \sigma,d_s\sin\theta,; \theta'=\thetax=x+σ,dscosθ,;y=y+σ,dssinθ,;θ=θ

注:也可用小步欧拉积分;上式为常曲率弧闭式更新,数值更稳。

2.2.2 离散分辨率与网格索引

  • 平面分辨率:Δx,Δy\Delta x,\Delta yΔx,Δy(常取 0.1–0.2 m)。
  • 航向离散:NθN_\thetaNθ 等分(常取 60–72,约每 5–6°)。
  • 节点索引:(⌊x/Δx⌋,;⌊y/Δy⌋,;⌊θ/(2π/Nθ)⌋,;gear)\big(\lfloor x/\Delta x\rfloor,;\lfloor y/\Delta y\rfloor,;\lfloor \theta/(2\pi/N_\theta)\rfloor,;\text{gear}\big)(xx,;yy,;θ/(2π/Nθ)⌋,;gear)
  • 闭集判重:同一索引下若新 ggg 更大则丢弃,避免膨胀搜索。

2.2.3 代价函数与启发

  • A* 目标:min⁡f(n)=g(n)+h(n)\min f(n)=g(n)+h(n)minf(n)=g(n)+h(n)
  • 路径代价 ggg(建议项)
    • 距离:wd⋅darcw_d \cdot d_\text{arc}wddarc
    • 曲率惩罚:wκ⋅κ2w_\kappa \cdot \kappa^2wκκ2κ=tan⁡δ/L\kappa=\tan\delta/Lκ=tanδ/L
    • 变向惩罚:wgear⋅1[gear change]w_{\text{gear}}\cdot \mathbb{1}[\text{gear change}]wgear1[gear change]
    • 近障惩罚:wo⋅ψ(SDF(x,y))w_o \cdot \psi\big(\text{SDF}(x,y)\big)woψ(SDF(x,y))(SDF 小则代价大;可用 ψ(d)=max⁡(0,dth−d)2\psi(d)=\max(0,d_\text{th}-d)^2ψ(d)=max(0,dthd)2
    • 方向一致性:wθ⋅∣wrap(θ−θg)∣w_\theta \cdot |\text{wrap}(\theta-\theta_g)|wθwrap(θθg)(靠近目标朝向)
  • 启发 hhh(可采一致/可采纳)
    • 欧氏距离 w⋅∣(x,y)−(xg,yg)∣w \cdot | (x,y)-(x_g,y_g)|w(x,y)(xg,yg)
    • 更强:Reeds–Shepp 距离 dRS(s,sg)d_{RS}(\mathbf{s},\mathbf{s}_g)dRS(s,sg)(允许前后倒),或 Dubins(仅前进)。
    • 实践中取 h=max⁡dE,;α⋅dRSh=\max{d_{E},;\alpha\cdot d_{RS}}h=maxdE,;αdRS 保守可采纳。

2.2.4 分析连接(Analytic Expansion)

每扩展若干步尝试用 Reeds–Shepp 曲线直接连接至目标:

  • 生成若干 RSRSRS 模式序列(左/右转+直线拼接)。
  • 对候选 RSRSRS 轨段做 连续碰撞检测(见 2.2.6)。
  • 若存在无碰撞连接,提前收敛并回溯路径。

2.2.5 档位与步长策略

  • 步长 dsd_sds:0.5–1.0 m(窄场景建议 0.4–0.6 m)。
  • 扩展集合中同时包含 F/R 两类动作,但 gear change 计惩罚,避免无意义抖动。
  • 当接近目标且朝向误差小于阈值时缩小 dsd_sds,便于精细停靠。

2.2.6 碰撞检测(高效而稳健)

  • 车辆模型:以车辆几何 + 安全边距 bsafeb_\text{safe}bsafe有向包围盒(OBB)
  • 障碍物:多边形(已做 buffer 膨胀)。
  • 粗检:圆覆盖/多圆模型快速排除(少量半径覆盖角点)。
  • 细检:分离轴定理(SAT)检测 OBB–多边形相交。
  • 连续性:对一段弧插值 MMM 个中间姿态(例如 M=5M=5M=5)逐一检测,避免“跨越穿模”。

2.2.7 搜索停止与路径回溯

  • 触达目标域(位置/朝向容差)或 Analytic Expansion 成功即止。
  • 保存父指针回溯,得到折线/弧段混合的粗轨迹 s∗i∗i=0N{\mathbf{s}*i}*{i=0}^Nsii=0N
  • 可做一次 道格拉斯-普客(RDP) 稀疏化,减少冗余点便于后续优化。

2.3 轨迹平滑优化(连续可控的可执行轨迹)

2.3.1 变量与参数化

  • 以等弧长采样得到锚点 pi=(xi,yi)\mathbf{p}_i=(x_i,y_i)pi=(xi,yi)i=0..Ni=0..Ni=0..N
  • 航向 θi\theta_iθi 与曲率 κi\kappa_iκi 可用差分近似(或显式变量)。
  • 可固定档位序列(来自 Hybrid A*),避免优化阶段改变拓扑。

2.3.2 目标函数(典型二次型)

min⁡{pi}ws∑i=1N−1∥pi+1−2pi+pi−1∥2⏟二阶平滑+wκ∑iκi2⏟曲率+wo∑iψ(di)⏟避障+wa∑i∥pi−pˉi∥2⏟锚点/惯性pi\min_{\{\mathbf{p}_i\}} \underbrace{w_s \sum_{i=1}^{N-1}\|\mathbf{p}_{i+1}-2\mathbf{p}_i+\mathbf{p}_{i-1}\|^2}_{\text{二阶平滑}} + \underbrace{w_\kappa \sum_{i} \kappa_i^2}_{\text{曲率}} + \underbrace{w_o \sum_i \psi\big(d_i\big)}_{\text{避障}} + \underbrace{w_a \sum_i \|\mathbf{p}_i-\bar{\mathbf{p}}_i\|^2}_{\text{锚点/惯性}}{pi}min{pi}二阶平滑wsi=1N1pi+12pi+pi12+曲率wκiκi2+避障woiψ(di)+锚点/惯性waipipˉi2pi

  • did_idip∗i\mathbf{p}*ipi 至最近障碍物的有符号距离(SDF);ψ\psiψ 常用折线或铲形函数(如 ψ(d)=max⁡(0,d∗th−d)2\psi(d)=\max(0,d*\text{th}-d)^2ψ(d)=max(0,dthd)2)。
  • pˉi\bar{\mathbf{p}}_ipˉi 为上一周期解或 Hybrid A* 粗解(warm start),有助于滚动稳定。

曲率近似(离散 Frenet 公式):

κi≈2Area(pi−1,pi,pi+1)∥pi−pi−1∥∥pi+1−pi∥∥pi+1−pi−1∥\kappa_i \approx \frac{2\,\text{Area}(\mathbf{p}_{i-1},\mathbf{p}_i,\mathbf{p}_{i+1})} {\|\mathbf{p}_i-\mathbf{p}_{i-1}\|\,\|\mathbf{p}_{i+1}-\mathbf{p}_i\|\,\|\mathbf{p}_{i+1}-\mathbf{p}_{i-1}\|}κipipi1pi+1pipi+1pi12Area(pi1,pi,pi+1)

2.3.3 约束(硬约束与线性化)

  • 边界/障碍约束:用 SDF 的切向线性化构造半平面:

    ni⊤pi≤bi−dsafe\mathbf{n}_i^\top \mathbf{p}_i \le b_i - d_\text{safe}nipibidsafe

    其中 ni\mathbf{n}_ini 是最近障碍面的外法向,bib_ibi 为该面支持函数常数;在每轮迭代更新(逐次凸化)。

  • 曲率上界∣κi∣≤κmax⁡|\kappa_i| \le \kappa_{\max}κiκmax(可线性化成二范数锥近似或转为软约束加入罚项)。

  • 起终点约束p∗0=p∗start\mathbf{p}*0=\mathbf{p}*\text{start}p0=pstartpN∈目标盒\mathbf{p}_N\in\text{目标盒}pN目标盒,并约束 θ0,θN\theta_0,\theta_Nθ0,θN(用邻点方向或直接角度变量)。

  • 几何走廊(可选):由 ROI 内缩得到左右边界,限制 pi\mathbf{p}_ipi 落在带状区域内。

实践中常采用 “迭代锚定 + 线性化避障 + 二次目标”逐次凸优化(SCP):每轮解一个稀疏 QP,更新法向与锚点,直至收敛。

2.3.4 求解与收敛

  • 求解器:稀疏 QP(OSQP/qpOASES/自研),带温启动。
  • 终止:最大迭代数 Kmax⁡K_{\max}Kmax∣Δp∣∞<ϵ|\Delta\mathbf{p}|_\infty<\epsilon∣Δp<ϵ
  • 数值技巧:权重标准化(位置单位 m、SDF 单位 m、曲率 1/m),避免病态;分层权重(先避障后平滑)。

2.4 时间参数化(速度曲线与动力学约束)

对平滑后路径按弧长 sss 计算曲率 κ(s)\kappa(s)κ(s) 与其导数 dκ/dsd\kappa/dsdκ/ds,用 前向–后向两遍 生成速度剖面(piecewise-jerk 思路也可)。

2.4.1 速度上限由几何与执行器决定

  • 侧向加速度约束vmax⁡,1(s)=ay,max⁡∣κ(s)∣+εv_{\max,1}(s)=\sqrt{\dfrac{a_{y,\max}}{|\kappa(s)|+\varepsilon}}vmax,1(s)=κ(s)+εay,max
  • 转角速率约束δ≃Lκ\delta\simeq L\kappaδLκ):vmax⁡,2(s)=δ˙max⁡L,∣dκ/ds∣+εv_{\max,2}(s)=\dfrac{\dot\delta_{\max}}{L,|d\kappa/ds|+\varepsilon}vmax,2(s)=L,dκ/ds+εδ˙max
  • 场景限速vmax⁡,3(s)v_{\max,3}(s)vmax,3(s)(停车/调头通常 ≤3\le 33777 m/s)
  • 综合vmax⁡(s)=min⁡vmax⁡,1,vmax⁡,2,vmax⁡,3v_{\max}(s)=\min{v_{\max,1},v_{\max,2},v_{\max,3}}vmax(s)=minvmax,1,vmax,2,vmax,3

2.4.2 前向/后向扫描(加速度与减速度边界)

  • 前向vi=min⁡(vmax⁡(si),;vi−12+2amax⁡Δs)v_{i} = \min\big(v_{\max}(s_i),;\sqrt{v_{i-1}^2 + 2 a_{\max}\Delta s}\big)vi=min(vmax(si),;vi12+2amaxΔs)
  • 后向vi=min⁡(vi,;vi+12+2abrakeΔs)v_{i} = \min\big(v_{i},;\sqrt{v_{i+1}^2 + 2 a_{\text{brake}}\Delta s}\big)vi=min(vi,;vi+12+2abrakeΔs)
  • 可加入 jerk 平滑:对离散加速度 aia_iai 加二次罚并做一次 QP 微调。
  • 档位切换点附近将 vvv 逼近 0,预留换挡缓冲。

2.4.3 生成时序轨迹

  • 通过 ti=ti−1+Δs/vi+vi−12t_{i}=t_{i-1}+\Delta s / \tfrac{v_i+v_{i-1}}{2}ti=ti1+Δs/2vi+vi1 得到 t(s)t(s)t(s)
  • 插值输出均匀时间步长的 (x(t),y(t),θ(t),v(t),a(t))(x(t),y(t),\theta(t),v(t),a(t))(x(t),y(t),θ(t),v(t),a(t)) 序列。

2.5 滚动重规划与稳健性

  • 拼接与温启动:将已执行段截去,保留后缀作为 warm start;若环境变化大,退回 Hybrid A* 重新 warm start。
  • 档位迟滞:gear 切换设置最小持续时长与切换惩罚,避免抖动。
  • 时间预算:如优化未收敛,使用最近一次可行解下发(带轨迹有效性检查)。
  • 安全回退:连接至低速安全停靠轨迹或直线退出 ROI。

2.6 推荐默认参数(可作为起始配置)

类别参数建议值说明
搜索分辨率Δx,Δy\Delta x,\Delta yΔx,Δy0.15 mROI 栅格与节点索引尺度
航向离散NθN_\thetaNθ72每 5° 一格
步长dsd_sds0.5 m扩展弧段长度
转角集合δ{\delta}δ{−30°, −15°, 0°, 15°, 30°}可随车平台改
代价权重wd,wκ,wo,wθ,wgearw_d,w_\kappa,w_o,w_\theta,w_{\text{gear}}wd,wκ,wo,wθ,wgear1, 0.5, 3, 0.2, 5归一化后调参
安全边距bsafeb_\text{safe}bsafe0.15–0.25 m结合定位/感知误差
平滑权重ws,wκ,wo,waw_s,w_\kappa,w_o,w_aws,wκ,wo,wa1, 0.2, 5, 0.1先避障再平滑
曲率上限κmax⁡\kappa_{\max}κmax1/Rmin⁡1/R_{\min}1/RminRmin⁡R_{\min}Rmin 由底盘给定
侧向加速度ay,max⁡a_{y,\max}ay,max1.5–2.0 m/s²泊车/调头更小
转角速率δ˙max⁡\dot\delta_{\max}δ˙max0.5–0.8 rad/s执行器约束
加速度界amax⁡,abrakea_{\max}, a_{\text{brake}}amax,abrake1.0, 1.5 m/s²低速场景舒适

权重建议在 单位归一化 后微调:位置(m)、曲率(1/m)、SDF(m)。

三、Apollo OpenSpace Planner 的关键技术细节

3.1 障碍物建模与地图表示

在 OpenSpace Planner 中,障碍物建模与地图表示是搜索和优化的基础,直接影响可行性判断与避障精度。

3.1.1 ROI(Region of Interest)生成

  • 目的:限制规划计算在局部区域内,降低计算量。
  • 生成方式
    1. 以车辆当前位置和目标位置为中心,取一定外扩范围 dROId_{\text{ROI}}dROI(如 20–50 m);
    2. 裁剪高精地图中的可行驶区域;
    3. 合并感知模块输出的障碍物包络,做坐标变换至地图坐标系。

3.1.2 障碍物安全膨胀

  • 原因:补偿感知误差、定位误差以及车辆外形与碰撞模型的差距。

  • 方法

    • 对多边形障碍物做 Minkowski 膨胀:

      Obsexp=Obs⊕B(bsafe)\text{Obs}_{\text{exp}} = \text{Obs} \oplus B(b_{\text{safe}})Obsexp=ObsB(bsafe)

      其中 BBB 为圆形缓冲区。

    • bsafeb_{\text{safe}}bsafe 可分解为定位误差、感知误差和安全裕度:

      bsafe=eloc+eperc+mmarginb_{\text{safe}} = e_{\text{loc}} + e_{\text{perc}} + m_{\text{margin}}bsafe=eloc+eperc+mmargin

3.1.3 地图表示形式

  • 多边形表示:直接使用障碍物轮廓进行几何碰撞检测(SAT / OBB 检测)。
  • 栅格表示:用于 Hybrid A* 中快速可行性判断,常用 0.1–0.2 m 分辨率。
  • SDF(Signed Distance Field)
    • 用于优化阶段快速计算点到障碍物的有符号距离和梯度;
    • 可由栅格地图用 BFS / Jump Flooding 算法预计算。

3.2 全局搜索与局部优化的结合

OpenSpace Planner 的规划流程是 “全局搜索定拓扑 + 局部优化控几何”

3.2.1 全局搜索(Hybrid A*)的作用

  • 在自由空间内搜索一条可行的粗轨迹骨架;
  • 决定路径的拓扑结构(前进/倒车顺序、绕障侧向、换向次数);
  • 保证满足车辆最小转弯半径与运动学可行性。

3.2.2 局部优化(SCP / QP)的作用

  • 在 Hybrid A* 粗轨迹的基础上优化曲率连续性与平滑度;
  • 精细避障,保持一定安全边距;
  • 对接控制模块对曲率、加速度等动态约束的要求。

3.2.3 交互机制

  • Warm Start:优化器以 Hybrid A* 轨迹为初值,减少迭代次数;
  • 失败回退:若优化器无法生成可行解(如走廊被堵死),则重新调用 Hybrid A* 进行全局搜索;
  • 滚动更新:每次重规划时继承上周期末段轨迹作为起始参考,保证平滑衔接。

3.3 轨迹下发与滚动规划机制

3.3.1 轨迹离散与插值

  • 优化器输出的轨迹为非均匀弧长采样点;

  • 对轨迹进行等时间间隔插值(如 0.1 s 一点),得到控制模块易于跟踪的离散点列:

    T={(xi,yi,θi,vi)}i=0M\mathcal{T} = \{(x_i, y_i, \theta_i, v_i)\}_{i=0}^MT={(xi,yi,θi,vi)}i=0M

3.3.2 滚动规划周期

  • OpenSpace Planner 常以 100 ms 为滚动规划周期;
  • 每周期更新:
    • 车辆最新状态(定位)
    • 环境障碍物信息(感知/预测)
    • 目标位置或目标盒信息
  • 使用上一周期未执行完的轨迹末段作为温启动参考,减少轨迹跳变。

3.3.3 轨迹有效性检查

  • 在轨迹下发前,检查全程是否:
    1. 满足曲率、加速度等动力学限制;
    2. 不与障碍物碰撞;
    3. 起终点状态与预期相符。
  • 若检查不通过,执行降级策略(低速停靠轨迹 / 紧急刹停)。

3.4 工程实现要点

3.4.1 速度与换挡控制

  • 档位切换设置最小持续时间(如 ≥1.0\ge 1.01.0 s);
  • 在换挡点将速度剖面过渡至 0,留出执行器反应时间。

3.4.2 避障稳定性

  • 搜索阶段采用连续碰撞检测,防止跳点穿越障碍物;
  • 优化阶段避障约束用 SDF 线性化,每次迭代更新法向,防止贴边振荡。

3.4.3 参数标定流程

  1. 固定几何约束(车辆宽、长、轴距)→ 推算最小转弯半径 → 设置曲率上限 κmax⁡\kappa_{\max}κmax
  2. 调试搜索权重wd,wκ,wo,wgearw_d,w_\kappa,w_o,w_{\text{gear}}wd,wκ,wo,wgear)→ 平衡距离、平滑度、避障与换挡频率;
  3. 优化权重调节ws,wκ,wo,waw_s,w_\kappa,w_o,w_aws,wκ,wo,wa)→ 先调避障权重确保安全,再调平滑与曲率权重;
  4. 动态约束匹配控制器:曲率变化率、加速度/减速度、jerk 限制与车辆控制模型一致。

3.5 模块间数据交互

模块输入数据输出数据说明
ROI 构建高精地图、车辆状态、目标位置ROI 区域多边形限制搜索与优化的计算范围
障碍物处理ROI 内障碍物原始多边形膨胀后的障碍物多边形、SDF用于碰撞检测与避障约束
Hybrid A* 搜索ROI、多边形障碍物、车辆几何与约束粗轨迹点列(含档位信息)确定路径拓扑
轨迹平滑优化粗轨迹、SDF、动力学限制曲率连续、可行的平滑轨迹提升可控性与舒适性
时间参数化平滑轨迹、曲率、动力学限制带速度、加速度信息的时序轨迹满足动力学约束
轨迹下发与检查时序轨迹、当前环境状态控制指令序列检查有效性后发给车辆控制模块执行

四、Apollo OpenSpace Planner 的优势与局限

4.1 优势

  1. 场景适应性强
    • 不依赖车道线或规则道路几何,能在停车场、港口、堆场、临时施工区等非结构化场景中工作;
    • 可处理无中心参考线的复杂环境,灵活性远高于车道约束型规划器(如 Lattice、EM Planner)。
  2. 支持复杂机动
    • 原生支持前进/倒车切换、多段换向、S 型泊车等机动动作;
    • 能在狭窄空间完成三点调头、多点入位等低速操作。
  3. 全局–局部结合
    • Hybrid A* 确保全局可行性(运动学约束 + 拓扑选择);
    • 优化器 提升局部平滑性与可控性,两者结合兼顾可行性与舒适性。
  4. 安全性与可控性高
    • 障碍物膨胀与连续碰撞检测保证了规划轨迹的碰撞安全;
    • 优化器引入曲率、加速度、jerk 限制,使轨迹更易于控制器执行。
  5. 可滚动规划,实时响应环境变化
    • 支持 100 ms 级滚动规划周期;
    • 在突发障碍或目标更新时可快速生成新轨迹,保障执行安全性。

4.2 局限

  1. 计算开销相对较大
    • Hybrid A* 搜索 + 轨迹优化的组合在复杂障碍环境下计算量较高;
    • 对 CPU 资源和实时性优化要求更高,尤其在高分辨率 ROI 和密集障碍场景下。
  2. 动态障碍物处理能力有限
    • 核心设计针对低速、障碍物相对静态的环境;
    • 虽然可做简单动态预测,但不适合高速场景中频繁交互的动态避障任务。
  3. 依赖高精度定位与障碍物检测
    • 定位误差、感知延迟会直接影响障碍物建模与碰撞检测精度;
    • 在定位/感知精度不佳的场景中,需要更大的安全边距,可能导致可行解减少。
  4. 对路径平滑参数敏感
    • 优化阶段的权重配置(平滑 vs. 避障)直接影响轨迹质量;
    • 不同车辆、不同场景需要重新标定,通用性有限。
  5. 对执行器响应有依赖
    • 档位切换、转向速率等需要与底盘控制特性匹配,否则可能出现轨迹可行但执行不稳的情况。
http://www.lryc.cn/news/620624.html

相关文章:

  • 【系统安装】虚拟机中安装win10IOT企业版系统记录
  • 智能制造综合实训平台数据采集物联网解决方案
  • 在启智平台使用A100对文心开源大模型Ernie4.5 0.3B微调(失败)
  • ISIS报文
  • python中的map函数
  • 初识c语言————缓冲区字符滞留
  • 计算机视觉(opencv)实战三——图像运算、cv2.add()、cv2.addWeighted()
  • 疏老师-python训练营-Day45Tensorboard使用介绍
  • Effective C++ 条款40:明智而审慎地使用多重继承
  • 给植物浇水
  • 计算机视觉CS231n学习(8)
  • 飞算 JavaAI 云原生实践:基于 Docker 与 K8s 的自动化部署架构解析
  • 水印消失术!JavaAI深度学习去水印技术深度剖析
  • Product Hunt 每日热榜 | 2025-08-14
  • wpf 保姆级实现visual studio里面的属性窗口 深度解析属性网格(PropertyGrid)实现原理与高级定制
  • NineData云原生智能数据管理平台新功能发布|2025年7月版
  • DOCKER设置日志轮转
  • 爬虫逆向之滑块验证码加密分析(轨迹和坐标)
  • Redis 03 redis 缓存异常
  • 嵌入式学习笔记--MCU阶段--DAY12实时操作系统rt_thread1
  • C语言零基础第16讲:内存函数
  • 华为实验WLAN 基础配置随练
  • 【奔跑吧!Linux 内核(第二版)】第6章:简单的字符设备驱动(三)
  • 使用AI编程自动实现自动化操作
  • 考研408《计算机组成原理》复习笔记,第三章(6)——Cache(超级重点!!!)
  • [免费]基于Python的影视数据可视化分析系统(Flask+echarts)【论文+源码+SQL脚本】
  • 财务自动化软件敏感数据泄露风险评估与防护措施
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘arviz’问题
  • Flutter 顶部导航标签组件Tab + TabBar + TabController
  • Polyak-Ruppert 平均