Fast-Planner与Ego-Planner:无人机路径规划算法的核心差异与应用选择

张开发
2026/4/14 20:41:40 15 分钟阅读

分享文章

Fast-Planner与Ego-Planner:无人机路径规划算法的核心差异与应用选择
1. 从“看地图”到“看眼前”两种规划思路的本质区别如果你刚开始接触无人机路径规划看到Fast-Planner和Ego-Planner这两个名字可能会有点懵。别急我用一个特别简单的比方帮你理解。你可以把无人机想象成一个开车的人。Fast-Planner就像是那个出发前拿着详细地图仔细规划好从家到公司每一条路、每一个转弯的“谨慎型司机”。他会选择一条理论上最省时、最省油的整体路线哪怕这条路可能有点绕。而Ego-Planner则像是那个只设定好目的地然后一上路就全靠眼睛和反应开车的“老司机”。他不太关心整条路是不是最优他只关心眼前几十米有没有车突然变道、有没有行人窜出来然后立刻做出闪避动作。这个比方基本点出了它们最核心的差异规划视野和决策逻辑。Fast-Planner是全局规划它的核心任务是“谋定而后动”。在无人机起飞前或者飞行中它会基于已知的或通过传感器实时构建的全局地图信息计算出一条从起点到终点的“理论最优”路径。这条路径考虑的是全局最优解比如总飞行时间最短、总能耗最低、或者整体最平滑。我刚开始做项目时特别喜欢用Fast-Planner因为它给出来的路径看起来非常“漂亮”和“完整”让人心里有底。而Ego-Planner是局部重规划或者叫反应式规划。它的核心思想是“走一步看一步安全第一”。它不执着于一条固定的全局路径而是基于无人机当前的“自我”Ego状态——也就是位置、速度、传感器实时感知到的周围一小片环境——来生成一个短期的、安全的运动指令。它的目标不是到达终点的最优路径而是在接下来很短的时间内比如零点几秒后如何安全、高效地移动到下一个位置点同时避免撞上任何突然出现的障碍物。这种思路在环境未知、动态变化快的场景里优势就非常明显了。所以当你选择算法时第一个要问自己的问题就是我的无人机更需要一个“全局导航仪”还是一个“贴身保镖”如果你的任务环境是基本静态的、地图信息比较完备的比如执行预设航线的园区巡检、城市间的点对点物资运输那么一个可靠的全局规划器Fast-Planner能给你一条高效、可预测的航线。但如果你要让无人机在枝叶茂密的森林里穿行、在充满行人和车辆的复杂城区低空飞行环境瞬息万变地图根本来不及建全那么一个反应灵敏的局部规划器Ego-Planner可能就是保命的关键。2. 技术内核拆解Fast-Planner如何“算无遗策”了解了宏观区别我们钻进去看看它们各自是怎么工作的。先说说Fast-Planner它的工作流程非常经典体现了传统路径规划“先搜索后优化”的严谨思路。我把它总结为三步走前端搜索找路、后端优化平路、时间分配匀路。### 2.1 前端搜索Hybrid A的智慧*Fast-Planner的第一步是用Hybrid A算法在三维空间里进行路径搜索。为什么是Hybrid A而不是普通的A*因为无人机不是方格纸上的棋子它的运动是连续的有速度和加速度的约束。普通A搜索出来的路径是一系列离散的网格点连接起来可能是锯齿状的无人机根本没法跟着飞。Hybrid A聪明的地方在于它把连续的状态空间位置、朝向和离散的搜索结合了起来。它在扩展搜索节点时会模拟无人机真实的运动模型比如差分模型生成一小段符合动力学约束的连续路径片段然后再把这些片段连接起来。这样搜出来的路径从一开始就是“可飞”的虽然可能还不够平滑。我在实际调参时发现这里的关键是启发式函数的设计和运动原语Motion Primitive的选取。启发式函数决定了算法“猜”得准不准能不能快速朝着目标前进。而运动原语就像是你给无人机规定好的“标准动作库”比如“向前飞1米”、“向左转15度并前进0.8米”。原语设计得越贴合无人机的实际机动能力搜出来的路径可行性就越高。这一步的目标是找到一条从起点到终点、无碰撞的可行路径但不一定是最优的。### 2.2 后端优化B样条曲线的魔法前端搜索出来的路径就像是在山林里踩出来的一条坑洼小道能走但颠簸。Fast-Planner的第二步就是用B样条曲线对这条初始路径进行优化。B样条是个数学工具它有个超级好用的特性凸包性。简单说一条B样条曲线一定会被它的控制点构成的“凸包”包裹住。这意味着只要我们确保所有的控制点都待在安全区域里那么整条曲线就一定是安全的、无碰撞的。后端优化的目标函数通常包含好几项平滑度项让曲线更平顺减少急转弯、长度项缩短总路径、安全性项利用欧几里得符号距离场ESDF来惩罚控制点靠近障碍物。ESDF可以理解为给地图每个点都标了一个“安全距离”值正值表示离障碍物有多远负值表示陷入障碍物多深。优化器就利用这个距离场的梯度信息像磁铁一样把路径从障碍物旁边“推”开或者从障碍物里面“拉”出来。这个过程是个数值优化问题我常用的是梯度下降法或者非线性优化器比如Ceres Solver。这里有个坑需要注意计算ESDF非常耗时尤其是在大规模、高分辨率的地图中。虽然有很多加速算法如跳点法但它依然是Fast-Planner计算瓶颈之一。优化后的B样条轨迹不仅安全而且非常平滑符合无人机的动力学约束可以直接用于控制。### 2.3 时间重分配让速度收放自如路径形状优化好了但无人机以什么速度飞过这条路径呢这就是第三步时间重分配。初始的B样条轨迹其控制点在时间上是均匀分布的。但现实中我们可能希望在直道段飞快点在转弯处飞慢点。时间重分配就是通过调整每个控制点对应的时间节点来生成一条非均匀时间参数化的轨迹。具体做法是迭代式的先按当前时间分配飞一遍检查哪些段超过了无人机的最大速度或加速度限制然后在这些“超速”的段把时间拉长相当于减速在“能力过剩”的段把时间缩短允许加速。反复迭代几次就能得到一条既符合路径形状又满足无人机速度/加速度物理极限的时空轨迹。经过这三步Fast-Planner最终给出一条考虑周全、安全平滑、时间最优的全局轨迹这也是它“算无遗策”风格的体现。3. 技术内核拆解Ego-Planner如何“随机应变”看完了Fast-Planner的“长篇巨制”再来看看Ego-Planner的“短平快”。Ego-Planner的设计哲学完全不同它放弃了构建和维护全局精细地图ESDF的沉重负担追求极致的轻量和实时。它的流程可以概括为感知局部、即时优化、碰撞即推。### 3.1 轻量前端一条引导轨迹足矣Ego-Planner的前端非常简单甚至可以说“简陋”。它不需要运行复杂的Hybrid A*去搜索一条完整的路径。在很多实现中它的前端只需要一条非常简单的引导轨迹比如从当前位置指向目标点的一条直线或者是由上层全局规划器可能是一个很粗糙的全局规划给出的一条粗略参考线。这条引导轨迹的作用不是让无人机严格跟随而是提供一个宏观的吸引力告诉无人机“大方向是往那边走”。这种设计大大减少了计算量。在动态环境中花几百毫秒去搜索一条精细的全局路径可能毫无意义因为等你算完环境早就变了。Ego-Planner选择相信它的后端优化器有能力在局部实时“雕琢”出一条安全可行的路径只要大方向不错就行。### 3.2 梯度优化与碰撞处理实时“手感”调整Ego-Planner的后端是其核心它是一个基于梯度的局部优化器。它不像Fast-Planner那样依赖一个预先计算好的、覆盖全局的ESDF地图。相反它只在当前无人机周围一个很小的局部范围内实时地查询障碍物信息。这个信息可能来自激光雷达的点云或者深度图像的投影。优化器的工作是调整一条短期轨迹比如未来1-2秒内的轨迹的控制点使得这条轨迹满足安全性、平滑性和朝向目标的要求。它的安全性约束是通过惩罚函数实现的。当优化器发现轨迹上的某个点距离障碍物太近时它不会去查一个全局的ESDF梯度而是通过有限差分等方法就地估算一个“排斥力”的梯度方向。这个排斥力会把轨迹点从障碍物旁边推开。这里有一个Ego-Planner非常巧妙的设计碰撞处理机制。在优化过程中如果某条候选轨迹与障碍物发生了碰撞优化器不会简单地丢弃它或者大幅调整权重。相反它会基于碰撞点主动生成一个反向的“推力”明确地将轨迹从障碍物体内“推”出来。这个过程很像你用手把一个陷入泥潭的物体拔出来有一个明确的作用点和方向。这种主动的、基于碰撞的反饋机制让Ego-Planner在密集障碍物中“钻缝”的能力特别强因为它能直接感知到碰撞并做出纠正。### 3.3 各向异性曲线拟合重塑平滑轨迹经过梯度优化和碰撞处理我们得到了一条安全的轨迹但这条轨迹的控制点可能因为反复的“推拉”而变得分布不均导致轨迹本身不够平滑。Ego-Planner的最后一招是各向异性曲线拟合。简单来说它以前面优化得到的安全轨迹为“骨架”重新用一条均匀的B样条曲线去拟合它。但这个拟合不是简单的数学逼近而是“各向异性”的。意思是在不同方向上拟合的“严格程度”可以不同。例如在靠近障碍物的方向拟合可以放松一点优先保证安全偏移被保留在空旷的方向拟合可以严格一点让轨迹更平滑。同时这个方法还能方便地调整轨迹的高阶导数如加加速度让运动更加柔和。完成这一步后一条安全、平滑、符合动力学约束的局部轨迹就生成了。由于整个过程不依赖全局ESDF计算量小Ego-Planner能做到高达10-50Hz的重新规划频率真正实现了“瞬息万变实时应对”。4. 实战性能大比拼数据与场景说话理论说了这么多到底谁强谁弱我们拉出来在几个关键指标上溜溜。我结合自己跑仿真和实机测试的经验给大家列个直观的对比。### 4.1 计算效率与实时性这是两者最显著的差别。Fast-Planner的计算瓶颈在于ESDF的构建与更新。尤其是在大规模或高分辨率环境中更新一次ESDF可能需要几十到几百毫秒。虽然规划本身优化很快但这个前端处理严重限制了它的整体反应频率通常在1-10Hz左右。这意味着如果环境中突然出现一个快速移动的障碍物Fast-Planner可能要等上100毫秒才能反应过来并重新规划对于高速无人机来说这个延迟可能是致命的。Ego-Planner完全摒弃了ESDF它的所有计算都集中在局部一个小窗口内。距离查询是即时的优化问题规模也小。因此它的计算速度极快规划频率轻松达到20Hz以上甚至50Hz。我实测在树莓派4B这样的嵌入式平台上Ego-Planner都能跑出10Hz以上的性能这对于机载计算资源有限的无人机来说是个巨大优势。高实时性意味着它能更快地响应环境变化更适合动态避障。### 4.2 轨迹质量长度、时间与能量在静态或准静态环境中Fast-Planner凭借全局视野通常能规划出总长度更短、总飞行时间更少的轨迹。因为它能看到全局可以提前选择绕开大片障碍物区域的最优走廊。它的轨迹经过B样条优化也非常平滑能量效率与加速度的平方积分相关通常较高。Ego-Planner由于是局部视野容易陷入“局部最优”。比如面对一个U型障碍它可能只会左右闪避而不会“想到”应该从上面绕过去导致轨迹看起来有些“犹豫”和“折返”总路径长度可能更长。同时为了保证实时性和安全性它的优化器可能会更“激进”地施加加速度来避开障碍物导致瞬时能耗较高轨迹的平滑性可能略逊于精心优化的Fast-Planner轨迹。我们可以用一个表格来快速总结特性对比Fast-PlannerEgo-Planner规划类型全局规划局部反应式规划核心依赖全局地图/ESDF局部实时感知计算效率较低ESDF瓶颈极高无ESDF实时性较低 (1-10Hz)极高(20-50Hz)轨迹总长度通常更短全局最优可能较长局部最优轨迹平滑度非常高B样条优化高各向异性拟合动态避障弱依赖地图更新速度极强高频重规划适用环境静态/已知环境长距离动态/未知环境密集障碍### 4.3 典型场景下的表现城市物流运输点对点假设你让无人机从A仓库飞往B楼顶环境主要是静态的建筑有粗略的3D城市模型。这时Fast-Planner是更好的选择。它可以提前规划出一条绕过高层建筑区的、能量最优的平滑航线让无人机像航班一样稳定飞行节省电量提升运输效率。森林巡检或搜救环境极度复杂枝叶藤蔓纵横且可能随风摆动动态。地图无法预先精确获取。这时Ego-Planner的优势无可替代。它依靠机载激光雷达实时感知前方几米到十几米的范围像穿山甲一样在缝隙中快速钻行对突然出现的树枝做出闪电般的反应。Fast-Planner在这里会因为无法快速更新ESDF而寸步难行。室内密集环境探索比如在堆满货架的仓库、或者复杂的管道间飞行。环境静态但极其复杂。一种混合策略往往更有效用一个轻量级的全局规划器甚至可以是搜索算法给出一个粗略的路径方向然后由Ego-Planner作为执行层负责局部的精细避障和光滑。这样既保证了宏观方向正确又拥有了局部灵活的穿行能力。5. 如何选择从需求倒推方案看到这里你应该对这两个“性格迥异”的规划器有了深入的理解。选择哪一个从来不是谁比谁更先进的问题而是你的具体任务需求和硬件条件决定的。我总结了一个简单的决策流程图你可以对照着自己的项目来思考首先问我的任务环境是高度动态、未知的吗如果是比如有大量移动行人车辆、或者未知探索那么Ego-Planner几乎是唯一选择。它的高实时性和不依赖全局地图的特性是刚需。如果环境主要是静态或已知的那么问第二个问题我对轨迹的最优性总时间、总能耗有极高要求吗比如长距离的物流配送省电就是省钱一条平滑高效的全局轨迹价值巨大。那么Fast-Planner更合适。如果环境静态但计算资源非常有限比如只有机载嵌入式电脑或者对实时响应延迟的要求严苛到毫秒级比如高速竞速无人机那么Ego-Planner的轻量优势又凸显出来。实际上在成熟的无人机系统中两者常常是协作关系。我参与过的多个项目都采用了一种分层架构顶层全局规划器可能是一个简化版的Fast-Planner或者传统的A*、RRT*算法负责在低分辨率地图或拓扑地图上生成一条粗略的全局参考路径。这个路径不追求精细平滑只提供方向指引和关键航点。底层局部规划器Ego-Planner作为主力以高频运行。它接收全局参考路径作为吸引力目标结合高精度实时传感器数据生成短时间内安全、平滑、可执行的控制指令。应急反应层在Ego-Planner之外通常还会有一个更高频上百Hz的、基于简单规则如人工势场法或直接传感器反馈的紧急制动和避撞模块作为最后的安全防线。这种架构结合了全局的“远见”和局部的“敏捷”既保证了任务层面的效率又确保了飞行过程的安全是目前复杂场景下最主流的方案。所以你不必二选一理解它们各自的强项思考如何让它们在系统里各司其职才是更高级的玩法。在我自己的开发中通常是先根据主传感器和硬件确定底层用Ego-Planner然后再去为它搭配一个合适的全局引导策略这样搭建的系统既鲁棒又高效。

更多文章