尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

路径规划算法全解析:从A*、DWA到RRT*的工程实践与选型指南

路径规划算法全解析:从A*、DWA到RRT*的工程实践与选型指南 1. 从A到B的智慧路径规划算法的世界无论是手机地图App为你规划出避开拥堵的回家路线还是仓库里穿梭自如的搬运机器人亦或是游戏里NPC绕过障碍物向你走来背后都离不开一个核心的技术——路径规划算法。这听起来可能有点学术但说白了它就是解决“怎么从这儿到那儿”这个问题的数学与工程智慧。随着自动驾驶、无人机物流、智能仓储的兴起路径规划算法早已从实验室走进了我们生活的方方面面。今天我们不谈那些高深莫测的数学公式而是像同行交流一样拆解一下这个领域里那些经典和前沿的算法看看它们到底是怎么“思考”的以及在实际项目中我们该如何选择和驾驭它们。无论你是刚入行的工程师还是对机器人、游戏AI感兴趣的技术爱好者这篇梳理都能帮你建立起一个清晰的认知框架。2. 全局与局部路径规划的两大战略视角在深入具体算法之前我们必须先建立一个顶层的分类框架。路径规划不是铁板一块根据对环境的认知程度和规划范围主要分为全局路径规划和局部路径规划。理解这两者的区别与联系是正确选用算法的第一步。2.1 全局路径规划运筹帷幄的“战略家”全局路径规划顾名思义是在已知或部分已知的全局环境地图中为移动主体机器人、车辆等寻找一条从起点到终点的最优或次优路径。它像一个战略家在行动前就俯瞰全局制定好行军路线。核心特点与适用场景环境信息已知规划依赖于一张预先构建好的地图这张地图包含了静态的障碍物、道路网络等信息。例如基于高精地图的自动驾驶长途路线规划或者仓库管理系统为AGV自动导引运输车指定的跨区域搬运路线。结果是最优路径由于掌握了全局信息算法可以系统地搜索和比较目标通常是找到代价如距离、时间、能耗最小的路径。无法处理动态未知障碍这是它的局限性。一旦地图上没有标注的临时障碍物如突然出现的行人、掉落的箱子出现预先规划好的全局路径就可能失效。常见的全局规划算法家族包括搜索类算法如Dijkstra算法、A算法及其各种变体如D、LPA*。它们将环境离散化为图Graph进行搜索。采样类算法如快速随机树RRT及其优化版本RRT*。它们通过在构型空间中随机采样来构建路径树特别适合高维空间。基于图网络的算法在拥有成熟路网数据的场景如汽车导航直接基于道路拓扑进行规划。2.2 局部路径规划随机应变的“战术家”局部路径规划则专注于解决眼前的、局部的导航问题。它不关心完整的起点到终点而是根据传感器如激光雷达、摄像头实时感知到的周围局部环境信息计算出下一步或短时间内的安全运动指令。它是一位战术家负责应对突发状况。核心特点与适用场景依赖实时感知不需要完整的先验地图或者仅将先验地图作为参考主要依据激光、视觉等传感器的实时数据。反应式与动态性能够实时躲避未预料到的动态和静态障碍物适应环境变化。可能陷入局部最优由于视野有限可能做出局部最优但全局来看很糟糕的决策比如在U型障碍前反复震荡。常见的局部规划算法包括动态窗口法DWA在速度空间中采样模拟未来短时间内的运动轨迹并选择一条最优的兼顾朝向目标、速度快、远离障碍物。时间弹性带TEB将路径表示为一系列带时间戳的位姿点并对其进行优化使其同时满足动力学约束和避障要求在自动驾驶和机器人中很常见。人工势场法将目标和障碍物分别模拟为吸引力和斥力通过合力引导移动但容易在复杂环境下产生局部极小点即“卡住”。模型预测控制MPC更高级的方法通过求解一个有限时域内的优化问题来得到控制序列能显式处理各种约束。全局与局部的协同在实际系统中尤其是自动驾驶和高级机器人中通常采用“全局规划 局部重规划”的框架。全局规划器给出一条粗略的参考路径比如沿着车道中心线行驶而局部规划器则负责跟踪这条参考路径同时实时避障平滑轨迹并满足车辆动力学约束。当局部规划器发现无法跟踪全局路径如道路被完全堵塞时会通知全局规划器重新规划。3. 经典全局规划算法深度拆解了解了战略与战术的分工后我们深入几个最经典、应用最广泛的全局规划算法的内部看看它们是如何工作的以及在实际编码和应用中需要注意什么。3.1 Dijkstra算法稳健的基石Dijkstra算法是图搜索中最经典的单一源点最短路径算法。它的思想非常直观从起点开始像水波纹一样向外层层扩散每次从未访问的节点中选取距离起点最近的节点进行访问并更新其邻居节点的距离直到终点被访问。算法核心步骤初始化起点距离为0其他所有节点距离为无穷大。所有节点标记为未访问。循环在所有未访问节点中选出当前距离起点最小的节点记为当前节点u并将其标记为已访问。松弛操作遍历当前节点u的所有邻居节点v。计算distance[u] weight(u, v)即从起点经u到v的距离。如果这个值小于v当前记录的距离distance[v]就更新distance[v]为这个更小的值并记录v的前驱节点为u。重复步骤2和3直到终点被标记为已访问或所有可达节点都被访问。实操要点与心得数据结构是关键算法的效率很大程度上取决于如何高效地从“未访问节点集合”中取出距离最小的节点。使用优先队列最小堆可以将时间复杂度从 O(V²) 优化到 O((VE) log V)其中V是节点数E是边数。这是面试和实际实现时必须掌握的优化。“已访问”标记的陷阱一旦节点被标记为已访问其最短距离就被确定。这意味着Dijkstra算法不能处理负权边。因为负权边可能导致后续找到一条更短的路径通往一个“已访问”的节点但算法不会再考虑它从而导致错误结果。适用场景当图中边的权重均为非负且需要找到确切的最短路径时Dijkstra是可靠的选择。例如在道路导航中距离、预估时间作为权重通常都是非负的。3.2 A*算法启发式搜索的典范A*算法是对Dijkstra的智能增强。它在选择下一个要扩展的节点时不仅考虑从起点到该节点的实际代价g(n)还加上一个从该节点到终点的预估代价h(n)即f(n) g(n) h(n)。这个预估代价h(n)就是启发式函数。为什么A*通常更快因为它通过启发函数h(n)引导搜索方向朝向终点减少了大量不必要的、背离终点的搜索从而在大多数情况下比Dijkstra快得多。启发函数h(n)的设计艺术h(n)的设计直接影响A*算法的效率和最优性。可采纳性如果h(n)永远不会高估从节点n到终点的实际代价那么A*算法保证能找到最短路径。这样的h(n)被称为“可采纳的”。例如在网格地图中曼哈顿距离只允许上下左右移动或欧几里得距离允许斜向移动都是可采纳的启发函数。一致性或单调性如果对于任意节点n及其后继节点n’满足h(n) ≤ cost(n, n’) h(n’)且h(goal)0则称h(n)是一致的。一致的启发函数一定是可采纳的并且能保证每个节点第一次被访问时就是最优路径。欧几里得距离在网格地图中就是一致的。启发函数的强度在可采纳的前提下h(n)越接近真实代价算法扩展的节点就越少效率越高。但高估的h(n)会破坏最优性。实现A*的注意事项Open List与Close List通常用优先队列管理Open List待扩展节点按f(n)排序用哈希表管理Close List已扩展节点。当从Open List中取出一个节点时检查它是否已在Close List中因为可能被以更差的f值加入过如果是则跳过。路径重建每个节点需要记录其父节点。当终点被加入Close List时通过回溯父节点链即可重建完整路径。变种与优化针对不同场景有诸多优化如Jump Point Search用于网格地图跳过大量对称路径Theta* 用于任何角度路径规划能生成更平滑的路径。3.3 RRT与RRT*应对高维空间的随机采样高手当规划空间维度很高如机械臂有6个以上关节或环境非常复杂时基于图搜索的方法可能因为状态空间爆炸而失效。这时基于随机采样的规划器如快速随机树就显示出其优势。RRT基本思想初始化树T只包含根节点起点。随机采样在自由空间非障碍物区域内随机采样一个点q_rand。寻找最近邻在树T中找到距离q_rand最近的节点q_near。扩展新节点从q_near向q_rand的方向延伸一个步长step_size得到新点q_new。检查q_near到q_new的连线是否与障碍物碰撞。添加节点与边若无碰撞则将q_new加入树T并添加边(q_near, q_new)。重复2-5步直到q_new进入终点区域或达到最大迭代次数。RRT的优缺点优点概率完备性只要解存在给定无限时间总能找到适合高维空间实现相对简单。缺点找到的路径通常不是最优的而且路径可能非常曲折、不光滑。RRT渐进最优的改进* RRT* 在RRT的基础上增加了“重连接”步骤使得搜索树能够不断优化最终收敛到最优路径。在找到q_near并生成q_new后RRT* 不仅将q_new连接到q_near。它会在q_new附近的一个邻域内寻找所有可能的父节点候选。计算通过每个候选节点到达q_new的代价选择代价最小的那个作为q_new的真正父节点重选父节点。接着它还会尝试对邻域内的其他节点进行“重布线”检查如果以q_new作为父节点是否能降低这些节点的路径代价。如果能就改变它们的父节点到q_new重布线。通过这两步RRT* 的树结构会随着时间的推移不断优化路径代价逐渐降低最终达到渐进最优。实操心得步长选择step_size是关键参数。太大可能导致碰撞检查失败率高扩展效率低太小则生长缓慢。可以设计自适应步长。偏向目标采样纯粹随机采样效率较低。可以采用“目标偏向”策略即以一定概率如5%直接将采样点设为终点能显著加快收敛。碰撞检测效率这是RRT/RRT* 的性能瓶颈。工业级实现中需要依赖高效的几何碰撞检测库如FCL, Bullet。路径后处理RRT生成的路径通常由线段组成有棱角。实际应用中需要对路径进行平滑化处理例如使用样条插值或进行梯度下降优化使其符合机器人的运动学约束。4. 局部与融合规划算法实战解析全局规划给出了“战略方向”而局部规划负责“战术执行”。尤其在动态环境中局部规划器的能力直接决定了系统的安全性和流畅性。4.1 动态窗口法机器人的实时避障决策DWA非常直观地模拟了机器人的决策过程在当前状态下有哪些可行的速度组合线速度和角速度每个速度组合对应的未来一段轨迹是什么哪条轨迹最好DWA的核心步骤速度空间采样在机器人最大最小线速度[v_min, v_max]和角速度[ω_min, ω_max]定义的矩形区域内进行离散采样得到一系列(v, ω)对。同时考虑机器人的加减速能力从当前速度(v_c, ω_c)出发在下一个控制周期内能达到的速度窗口是有限的即“动态窗口”。轨迹模拟对于每一个采样速度(v, ω)假设机器人以此速度匀速运动一段模拟时间如3秒通过运动学模型通常是差分驱动模型推演出未来一段轨迹。轨迹评价对每一条模拟轨迹进行打分。评价函数G(v, ω)通常是多个子目标的加权和Heading(v, ω)轨迹末端朝向与目标点方向的对齐程度。Dist(v, ω)轨迹上离最近障碍物的距离。距离越近得分越低甚至为负直接剔除。Velocity(v, ω)速度大小鼓励快速移动。G(v, ω) α*Heading β*Dist γ*Velocity选择最优选择评价得分最高的(v, ω)作为当前周期发送给机器人底层的控制指令。参数调优心得评价函数权重α, β, γ的调整是门艺术。增大β障碍物距离权重会使机器人更保守远离障碍物增大α朝向权重会使机器人更执着地指向目标增大γ速度权重则鼓励快速运动。需要在实际场景中反复测试平衡。模拟时间与分辨率模拟时间太长计算量大且环境可能已变化太短则预见性不足。采样分辨率速度离散化的粒度也影响精度和计算效率。局限性DWA本质上是一种局部贪婪算法容易在复杂狭窄空间如狭窄走廊、U型陷阱中失效因为它只模拟很短的时间看不到全局困境。4.2 时间弹性带融合全局与局部的优化器TEB算法将路径规划和控制问题统一到了一个优化框架中。它不再将路径视为一系列空间点而是视为一系列带时间戳的位姿点B_i (x_i, y_i, θ_i, t_i)这个序列被称为“时间弹性带”。TEB的优化思想TEB通过求解一个非线性优化问题来同时优化这条“带子”的形态和时间间隔使其满足多种约束目标函数最小化总时间、与全局参考路径的偏差、加速度/角加速度使运动平滑等。约束条件运动学约束相邻位姿点之间必须满足机器人的运动学模型如差分驱动、阿克曼转向。动力学约束速度、加速度、角速度、角加速度不能超过机器人的物理极限。避障约束机器人的轮廓可以建模为多个圆形与障碍物之间的距离必须大于安全阈值。时间约束时间间隔必须为正。实现流程与工具初始化通常以全局规划器生成的路径忽略时间信息作为TEB的初始猜想。构建优化问题将上述目标和约束全部数学化构建成一个大规模稀疏的非线性最小二乘问题。求解使用专用的稀疏非线性优化求解器如g2o,Ceres Solver,NLopt进行求解。这些求解器能高效处理TEB问题特有的稀疏结构。输出求解后得到的优化后的位姿-时间序列可以直接用于生成平滑的控制命令。TEB的优势与挑战优势能直接生成平滑、动态可行的轨迹显式地处理时间和各种约束将路径规划和轨迹优化融为一体。挑战对初始值敏感如果初始路径来自全局规划器离可行解太远优化可能失败或陷入局部最优。因此需要一个合理的全局路径。实时性优化计算量较大对处理器有要求。通常需要通过限制优化带宽位姿点数量、使用高效求解器来保证实时性。参数繁多各类约束的权重参数需要仔细调试。4.3 模型预测控制更通用的优化控制框架MPC是比TEB更一般化的框架。它在每个控制周期内求解一个有限时域内的开环最优控制问题但只执行第一个控制指令到下一周期再根据新的状态重新求解形成“滚动优化”的闭环。在路径跟踪与避障中的应用MPC的优化问题可以设计为在未来N个时间步内寻找一系列控制输入如加速度、前轮转角使得预测的状态轨迹尽可能好地跟踪参考路径来自全局规划器同时满足车辆动力学模型、避免与障碍物碰撞、以及各种状态和输入约束如速度、加速度、转角限制。求解这个带约束的优化问题后取第一个控制指令输出给执行器。MPC vs TEB相似性两者都是基于优化的方法都处理约束。差异性TEB优化的是“轨迹”一系列状态点而MPC优化的是“控制序列”。MPC更侧重于控制其模型通常是连续的TEB可以看作是一种特殊的、离散化的轨迹优化MPC。MPC的理论框架更通用能处理更复杂的模型和约束但计算负担通常也更大。工程实现建议对于大多数移动机器人或低速自动驾驶场景DWA因其简单高效常作为首选的局部规划器。当需要更平滑、动态可行的轨迹时TEB是一个强大的选择。而对于模型复杂、约束严苛的高性能控制如赛车、无人机MPC则是更合适的工具。在实际项目中我们经常需要根据机器人的算力、对轨迹质量的要求、环境的动态程度来做出权衡。5. 前沿与特定场景算法掠影除了上述经典算法针对特定场景和需求也涌现出许多重要的算法变体和前沿方向。5.1 泊车路径规划算法自动泊车对路径规划提出了特殊挑战空间极度受限、需要精确的终点位姿车位内、且通常是非完整约束阿克曼转向。单纯的全局搜索或局部反应方法往往不够。常用方法组合几何分解法将泊车过程分解为几个标准的几何动作阶段如“向前切入-倒车入库-调整”。Reeds-Shepp曲线或Dubins曲线常被用来生成连接两个位姿的最短路径考虑最小转弯半径。规划器的工作就是选择合适的切换点和动作序列。基于优化的方法将车辆和车位建模为多边形将泊车问题构建为一个带约束的非线性优化问题直接求解出一条平滑、无碰撞、符合动力学的轨迹。这需要较强的实时计算能力。搜索与优化结合先用基于采样的方法如Hybrid A*在低分辨率下搜索出一个粗略的、可行的动作序列再用优化方法如TEB对这个粗略轨迹进行精细化和平滑化。关键考量碰撞检测精度必须使用精确的车辆轮廓模型进行碰撞检测考虑后悬外摆等。终点容差规划的目标不是一个点而是一个允许的位姿范围车位区域。舒适性轨迹的曲率变化应平缓避免急打方向。5.2 无人机路径规划算法无人机路径规划除了考虑地面障碍还需考虑三维空间、能耗、风场等复杂因素。核心算法扩展三维A与DLite将传统的二维网格搜索扩展到三维体素网格。D* Lite 及其变种常用于未知或动态变化的三维环境如无人机探索。基于采样的方法RRT* 在三维空间中同样有效并且有面向三维空间的变体如RRT-Smart*。Minimum Snap轨迹生成对于多旋翼无人机一个非常重要的环节是生成光滑的、动力学可行的轨迹。Minimum Snap最小加加速度或Minimum Jerk最小加加速度轨迹生成方法通过优化多项式轨迹的系数使轨迹的某阶导数如加速度的导数即加加速度的积分最小从而得到极其平滑、适合无人机跟踪的轨迹。这通常与前端路径搜索如A*结合使用。5.3 局部路径规划算法中的QP应用QP二次规划是优化问题的一个子类其目标函数是二次的约束是线性的。它在局部路径规划中扮演着“微调”和“约束满足”的关键角色。典型应用场景路径跟踪与偏移全局路径可能太靠近障碍物或者不够平滑。我们可以将路径表示为一组离散的路径点然后构建一个QP问题目标是最小化路径点相对于原始参考路径的偏移量二次代价同时约束每个路径点与最近障碍物的距离必须大于安全值线性约束。求解这个QP就能得到一条既保持原路径形状、又满足安全距离的平滑路径。速度规划给定一条空间路径我们需要规划沿这条路径行驶的速度曲线。这可以构建为一个QP目标是最小化行驶时间或加速度变化二次代价约束包括速度、加速度、加加速度的上下限线性约束以及根据路径曲率计算出的向心加速度限制。MPC中的子问题许多MPC求解器在每一步迭代中需要求解一个QP问题例如使用序列二次规划SQP方法。使用心得求解器选择有大量高效、成熟的QP求解器库可用如OSQP专门用于凸二次规划、qpOASES适用于模型预测控制、CVXOPT等。选择时需考虑问题规模、实时性要求以及许可证。问题构建如何将实际的物理约束如障碍物距离转化为线性的不等式约束是应用QP的关键。有时需要对非线性约束进行线性化近似。实时性对于需要高频如100Hz运行的局部规划QP问题的规模必须严格控制优化变量和约束数量不能太多以确保能在单个控制周期内求解完毕。6. 算法选型与工程实践指南面对琳琅满目的算法在实际项目中该如何选择这里没有银弹只有权衡。6.1 根据场景与需求选择算法场景特征推荐算法理由与备注已知静态地图寻求最短路径A* (网格/图)效率高最优解是绝大多数全局规划的基础。高维空间如机械臂环境复杂RRT*概率完备渐进最优适合复杂构型空间。可结合目标偏向和路径后处理。实时动态避障算力有限动态窗口法 (DWA)计算轻量反应快速实现简单。适合室内服务机器人、ROS初学者。需要平滑、动态可行的轨迹时间弹性带 (TEB)显式优化时间和动力学约束轨迹质量高。需较好的全局初始路径和算力。严格满足复杂模型与约束模型预测控制 (MPC)最通用的优化控制框架处理约束能力强。计算负担最大需专业优化知识。结构化环境如泊车Hybrid A 优化*Hybrid A* 在连续状态空间搜索结合后优化能处理转向约束和精确位姿要求。无人机等光滑轨迹要求高前端搜索 Minimum Snap优化前端A*/RRT*找空间路径后端Minimum Snap优化成光滑、可跟踪的轨迹。6.2 常见问题与调试技巧实录在实际编码和调试路径规划系统时以下是一些高频问题和解决思路问题1A*算法搜索速度慢扩展节点太多。排查首先检查启发函数h(n)。如果h(n) 0A* 就退化成了Dijkstra速度最慢。如果h(n)是可采纳的但很弱如远低于真实代价引导性就差。解决使用更贴近真实代价的启发函数。在网格地图中如果允许对角移动使用对角线距离切比雪夫距离或欧几里得距离比曼哈顿距离更好。考虑使用Weighted A*即f(n) g(n) ε * h(n)其中ε 1。这会牺牲最优性找到的是次优解但代价不超过最优解的ε倍以换取更快的搜索速度。这在很多实时应用中是可接受的。检查地图表示是否过于精细。在不损失必要信息的前提下适当降低地图分辨率网格变大能极大减少搜索节点。问题2DWA机器人陷入局部震荡在障碍物前“左右横跳”。现象机器人接近障碍物时向左转觉得右边离障碍物近向右转又觉得左边离障碍物近导致在原地左右摇摆。解决调整评价函数大幅提高Dist(v, ω)障碍物距离项的权重β让机器人将安全放在第一位宁愿慢一点也要远离障碍物。引入“停滞恢复”机制检测机器人是否长时间速度接近零且未到达目标。如果陷入停滞可以临时改变行为比如让机器人原地旋转一定角度或者执行一个简单的后退动作以脱离局部极小点。改进采样策略在评价函数中加入对“平滑性”的考量惩罚相邻周期速度指令的剧烈变化可以减少振荡。问题3RRT/RRT生成的路径非常曲折不光滑。*解决RRT系列算法本身只负责找到一条可行的路径不保证质量。路径后处理是必须的。路径修剪遍历路径节点尝试连接不相邻的节点。如果连线无碰撞则删除中间的所有节点从而缩短路径。路径平滑使用曲线拟合方法如三次样条插值或贝塞尔曲线对修剪后的路径点进行平滑。更高级的方法是使用梯度下降或非线性优化在保持无碰撞的前提下直接优化路径点的位置使其满足曲率约束。问题4TEB优化求解失败或耗时过长。排查初始值太差检查输入给TEB的全局初始路径是否合理。如果初始路径穿墙而过优化很难收敛。参数过于激进例如最大速度/加速度设置得过高而优化步长dt设置得过大可能导致数值不稳定。问题规模太大时间弹性带上的位姿点数量过多。解决确保全局规划器提供一条无碰撞的、粗略可行的初始路径。从保守的参数开始调试降低最大速度/加速度增加障碍物安全距离的权重。减少优化频率或减少位姿点数量。TEB不需要每帧都从头优化可以设置一个合理的优化周期。使用性能剖析工具查看优化求解中哪一步最耗时针对性优化。问题5规划系统整体延迟大控制不跟手。性能剖析这是一个系统工程问题。需要测量各个环节耗时感知延迟从传感器数据采集到生成障碍物地图/点云的时间。全局规划延迟触发全局重规划到计算出新路径的时间。局部规划延迟局部规划器单次计算周期。控制与通信延迟指令下发到底层执行器的时间。优化策略异步规划全局规划与局部规划在不同线程运行。局部规划高频运行如50-100Hz全局规划低频运行或在需要时触发。感知与规划解耦局部规划器使用一个固定频率更新的、轻量级的局部代价地图而不是直接处理原始的、庞大的传感器数据。算法简化在算力有限的平台上如嵌入式主板优先考虑DWA而非TEB/MPC。对A*搜索进行剪枝使用更粗糙的地图。预测与缓冲局部规划器可以简单预测动态障碍物的运动并在代价地图中预留出空间避免急刹。路径规划是一个理论与实践紧密结合的领域。再精巧的算法也需要在具体的机器人平台、传感器配置和实际环境中反复调试和打磨。我的经验是从简单的模型和算法开始比如先在仿真环境中实现一个DWA确保整个感知-规划-控制的 pipeline 能跑通然后再逐步引入更复杂的算法和优化。理解每个算法的核心思想、优缺点和适用边界比单纯追求算法的“高级”更重要。在实际项目中一个由A*提供全局引导、DWA负责局部避障的朴素组合往往比一个未经充分调试的复杂优化器更加稳定可靠。
返回列表