ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

无人机路径规划算法全解析:从A*到强化学习

无人机路径规划算法全解析:从A*到强化学习 无人机路径规划这事我前前后后折腾了差不多五年从最早用A*算法在二维栅格地图上躲障碍物到后来在真实场景里跑RTK定位和视觉融合踩过的坑比我写过的代码行数都多。这个领域看起来就是个“找一条从A到B不撞墙的路”真做起来会发现里面全是细节地图怎么建、约束怎么加、算力够不够、动态障碍物怎么处理每一层都有完全不同的解法思路。这篇就把我这个老油条对无人机路径规划算法发展的理解整理一遍从经典方法一路说到现在的前沿方向该有的公式思想、适用场景、工程坑点都会提到给准备入坑或者正在选型的朋友一个宏观参考。内容整体设计与思路拆解1.1 路径规划到底在解决什么问题先别急着背算法名字得先把问题本身说透。无人机路径规划本质是在一个带约束的状态空间里找一条从起点到终点的可行轨迹同时让某个评价指标最优。这个评价指标可能是路程最短、能耗最低、时间最快也可能是飞行过程最平稳、被雷达发现的概率最小。约束条件就更多了几何约束是不能撞障碍物动力学约束是无人机转弯半径有限、加减速度有限有时候还有通讯约束、禁飞区约束、时间协同约束。我早年犯过一个典型错误就是只看“路径”不看“轨迹”。路径是一条几何线轨迹是带上时间戳和速度信息的运动曲线。无人机不是质点它有惯性、有最大倾斜角、有最小转弯半径你规划出来一条几何上很漂亮的路径飞控可能根本跟不住。这就是为什么业内常说“路径规划只是上半场轨迹优化才是下半场”。所以要理解这个领域的发展得抓住一条主线从“只找路”逐渐进化到“找一条能飞的路”再进化到“找一条在动态环境里还能持续有效的路”。算法复杂度、计算平台、感知手段都在同步升级绕不开。1.2 为什么会有这么多算法流派不少刚接触的人会问搞定无人机路径规划一个算法不就行了吗为什么市面上有A*、RRT、人工势场、遗传算法、粒子群、强化学习选型的时候眼花缭乱。道理很简单因为现实里的路径规划根本不是单一问题。地图是已知还是未知决定了你能不能离线做全局规划。障碍物是静态还是动态决定了要不要实时重规划。无人机是单个飞行还是集群协同决定了算法能不能分布式处理。算力平台是机载电脑还是地面站决定了你能跑多重的模型。再加上应用场景可能是植保、巡检、快递配送、搜索救援、编队表演侧重完全不一样。这么多维度组合下来没有任何一个算法能通吃所以学术界和工业界才会不断提出新方案本质都是在“求解质量”和“计算实时性”之间做取舍。从经典搜索算法到采样算法的演进逻辑2.1 图搜索算法确定性世界的标准答案最早的一批路径规划算法脱胎于图论代表就是Dijkstra和A*。Dijkstra的思路是老老实实地遍历所有节点每次找一个距离起点最近且没访问过的节点松弛它的邻居直到终点被访问。这个方法保证能找到最短路径但在大范围地图上效率很低因为它完全分不清哪个方向更有希望东南西北都均匀地探索。A的改进就聪明在引入启发函数f(n) g(n) h(n)g是从起点到当前节点的实际代价h是当前节点到终点的预估代价。只要h满足一致性条件A就是最优且完备的但它的效率完全取决于h选得好不好。在无人机二维栅格地图里最常用欧氏距离或曼哈顿距离。我实测下来500x500栅格的城区地图A*基本能做到几十毫秒内出结果但如果把维度升到三维体素地图节点数暴涨内存和耗时都吃不消。后来出现的JPS就是在A基础上做文章通过跳点规则剪掉大量对称路径在开阔场景里加速非常明显我跑过对比测试是比A快一个数量级。但这类算法的通病一直存在依赖离散栅格栅格分辨率直接决定内存和精度之间的平衡。栅格太大容易丢失窄通道栅格太小又爆内存这是离散化方法绕不过去的坎。2.2 采样算法是怎么解决高维爆炸的无人机是六自由度的刚体完整状态空间是位置加姿态加角速度维度非常高。图搜索方法在这种空间里直接不可用于是就有了基于采样的方法核心代表是PRM和RRT。PRM分两步走先在学习阶段随机撒点只保留落在自由空间里的点然后连线检测是否与障碍物碰撞构建一张路标图再在查询阶段用图搜索找路。这个方法适合静态环境多次查询但建图成本高环境一变就得重建。RRT的思路更有意思从起点开始随机生长一棵树每次在空间里随机采样一个点找树上最近的节点朝这个采样点扩展一步。因为扩展过程是随机采样引导的树会像藤蔓一样逐渐覆盖自由空间直到摸到终点附近。RRT本身不保证路径最优它的路径往往绕来绕去很丑而且数值上很不稳定同一次运行两次结果差距巨大。后来提出的RRT引入了重连机制每次扩展后检查邻近节点如果通过新节点到达这些节点的代价更小就重新连接这样在迭代次数足够多时能收敛到渐近最优。我在仿真里测试过RRT在二维地图里迭代2000次左右能接近最优路径但在三维环境或狭窄通道场景里收敛速度非常慢。同样地Informed RRT*进一步优化了采样范围只在包含起点终点的椭圆区域内采样收敛速度大幅提升这个算是我在工程里用得比较顺手的采样类方案。2.3 图搜索与采样方法在无人机场景的实际差异这里得说点我在实际工程里的感受。图搜索方法对内存的占用是硬指标大范围三维地图基本不现实但它的路径质量稳定、可复现适合对路径有强一致性要求的场景。采样方法在三维空间里很灵活不需要显式建栅格内存压力小但结果随机性强必须要做后端的路径平滑或轨迹优化才能上飞控执行。所以现在很多成熟的开源方案都会组合使用。比如先在地面站用A*做全局粗规划得到一条参考航线无人机起飞后再用局部采样算法或人工势场做实时避障。这种“全局规划加局部修正”的架构也是当前大多数工业级无人机系统的标准形态。智能优化算法与人工势场方法的应用辨析3.1 人工势场法的诱惑与陷阱人工势场法是个直觉上非常优美的思路把目标点当作引力源障碍物当作斥力源无人机在合力场里沿着梯度方向走就行了。代码实现极其简短实时性好适合做局部避障。但这方法有个经典问题就是局部极小值。引力场和斥力场的合力在某点恰好为零的情况经常出现无人机就卡在那了既到不了目标也绕不开障碍。我在仿真里遇到过一个U型障碍物场景无人机直接困在U型槽里来回振荡怎么调参数都出不来。解决办法一般是引入虚拟目标点、随机扰动跳出或者跟全局规划器配合只用它做局部应急避障。另一个坑是斥力场参数很难调。障碍物太远就开始减速或者离障碍物很近才反应这两个问题在工程里经常打架。后来有人提出改进的势场函数把斥力纵向分量和横向分量拆开处理缓解目标不可达问题但参数调试依然是一件很看经验的事。3.2 遗传算法和粒子群算法适合做无人机路径规划吗这两个算法都属于元启发式优化方法在无人机路径规划里通常先把路径离散成若干控制点然后把这些点的坐标编码成个体用适应度函数评价路径长度、安全性和平滑度通过迭代进化或群体搜索来优化。从我在文献里看到的结果和实际复现的经验来说这类方法更适合离线的全局航迹规划比如事先给无人机规划一条穿越若干航点的任务航线而不是飞行过程中的实时规划。因为它们的计算收敛需要大量迭代实时性很难保证。给个直观感受一个简单的二维场景粒子群算法跑几百代大概也得几十秒飞在天上早就撞了。不过这类方法有个独特的优势是对约束的处理非常灵活。不管是禁飞区避开、各航段转弯角限制、还是多目标折中都可以通过罚函数或加权的方式直接融进适应度函数里。这一点对某些特殊场景很实用比如说搜救任务的覆盖路径优化、多个安全检查点的访问顺序问题用遗传算法可以很自然地建模。粒子群算法目前在路径规划上的热度不如强化学习但作为经典思路仍然值得了解尤其是它和无人机集群编队结合做协同路径规划时实现简单且不容易陷入单点失效问题。3.3 全覆盖路径规划的特殊性航测、植保、巡检这类任务里还有一个特殊分支叫全覆盖路径规划目标不是从A走到B而是用传感器覆盖整个指定区域。典型的解法是“牛耕式往返扫描”加“区域分解”。区域分解是难点。一个凸多边形区域直接来回扫就可以但现实里地块往往是凹多边形还有障碍物隔开。常见的做法有梯形分解法就是沿某个方向扫描在凹点处切割出若干个梯形子区域再在每个子区域里跑牛耕式覆盖路径。更高级的还有基于莫顿Z-order曲线的扫描顺序优化Boustrophedon分解加遗传算法优化的方案我在植保无人机领域看到过不少相关论文。如果让我给实际项目一个建议不要追求算法太炫先用简单的往复式覆盖加上手动设置的障碍物多边形再逐步调试转向点间距。全覆盖路径规划里“漏喷率”和“重喷率”才是最终评价标准算法越复杂这两个指标不一定越好工程稳定性才是第一位的。前沿方向与混合架构从轨迹优化到学习类方法4.1 为什么需要轨迹优化和Minimum Snap前面提到路径规划出来的只是几何路径现在要说说怎么把它变成无人机真正能飞的轨迹。多旋翼无人机最经典的轨迹生成方法是Minimum Snap由MIT的Mellinger和Kumar团队提出。基本思想是用分段多项式表示轨迹以各阶导数连续为约束最小化加加速度或加加速度的导数的平方积分。为什么是加加速度因为多旋翼动力学可以近似成一个二阶系统推力直接对应加速度加加速度就对应推力变化率最小化加加速度意味着推力的变化平缓飞行过程就平稳而且能避免激励出柔性结构的高频振荡。实际落地时分段多项式每段的时长分配也很讲究我常用的工具是时间参数化加梯形速度剖面近似之后再交给优化器精调。工程上很多人直接用多项式轨迹库加EKF估计位置来实现避障效果已经很不错。有一个需要注意的细节是多项式的阶数选择Minimum Snap一般用5阶多项式Minimum Jerk用4阶如果要约束高阶导数就需要更高阶次但阶次越高数值越容易病态实践中我一般不超过7阶。4.2 深度学习和强化学习怎么闯进这个领域近几年无人机路径规划的一个明显趋势是引入学习类方法。端到端方案直接用深度神经网络把传感器输入映射成控制指令中间不显式建模地图代表工作像基于深度强化学习的避障导航训练时用仿真引擎大量撒随机场景让智能体自己摸索出避障策略。但我作为工程派对这路方法始终保留态度。它的问题在于迁移性仿真里训练的策略放到真实环境光照、纹理、动力学参数稍微一变效果就可能断崖式下跌这就是常说的sim-to-real gap。端到端方法的可解释性也差出了bug很难定位是感知的问题、决策的问题还是控制的问题。相比之下我更看好“学习加传统”的混合架构。用一个轻量级神经网络做障碍物感知或环境预测给传统规划器输出代价地图再由优化类算法生成无碰轨迹。这种架构既利用了深度网络的特征提取能力也保留了传统规划器的安全保证能力非常适合工程落地。目前很多植保、巡检无人机公司做的视觉避障模块本质上就是这个思路。强化学习在编队协同和对抗场景里也有一席之地比如多无人机协同搜索用MARL框架可以让各无人机自主学习分配搜索区域但距离大规模商用还有距离。4.3 开源生态与工具链推荐这部分是实操者最关心的。目前主流开源方案里有几个绕不开的名字PX4和ArduPilot飞控层的事实标准支持多种路径规划器接口。MoveIt和OMPL虽然主要在机械臂领域但OMPL里很多采样算法可以直接平移到无人机路径规划研究上。ROS Navigation Stack经典的二维导航栈虽然是为地面机器人设计但在室内无人机里改改用也很方便。Fast-Planner、EGO-Planner、MavSwarm港科大空中机器人实验室开源的一系列无人机轨迹规划方案代表了目前学术界顶尖水平代码质量很高强烈建议想深入学轨迹优化的朋友读一读。Fast-Planner是我学习轨迹优化入门的代码库它的kinodynamic path searching加B样条轨迹优化整套流程非常清晰。EGO-Planner则不需要ESDF直接优化感知到的障碍物信息效率高很多。另外如果做仿真验证AirSim和Gazebo可以加PX4的固件仿真先进算法的验证几乎都在这两个平台先跑通再上真机。建议路径先用PYTHON把A*、RRT、RRT*、人工势场写一遍理解底层逻辑然后装ROS跑通Fast-Planner在仿真环境里的演示最后再上真机做小范围测试。一步一步来不要一上来就啃深度强化学习那一套否则很容易被各种超参折磨到怀疑人生。实践中的避坑经验与算法选型建议5.1 必须避开的几个常见工程坑先列几个我在实际项目里踩过、同行也经常踩的坑希望你能少走弯路。坐标系的坑GPS坐标、局部ENU坐标、机体坐标系来回切换任何一个环节少一个旋转矩阵路径规划出来的点全部飘掉。我的习惯是全流程统一用局部ENU坐标系GPS只在起点做一次转换减少中间环节出错概率。地图分辨率选择的坑栅格地图分辨率不是越高越好。分辨率0.1米在1000x1000米的作业区域里会产生1亿个栅格内存直接爆掉。实际做农田或园区巡检0.5米到1米分辨率通常够用室内密集场景才需要提到0.05到0.1米。障碍物膨胀的坑路径规划用的地图必须要做障碍物膨胀膨胀半径至少是无人机半径加安全余量否则规划出来的路径离墙太近飞控一点误差就撞上去。但膨胀太多又会堵死通道我们调试时就被这个问题困扰过好几次最后是用膨胀半径参数可调的方式解决。动态障碍物的坑很多算法演示视频里避障效果很惊艳但到实际动态环境就失灵。原因在于感知到动态障碍物的历史轨迹后必须预测其未来位置不能简单把当前障碍位置代入规划器。没有预测模块的动态避障都是假的这个一定要记牢。5.2 如何根据任务场景快速选择算法这里给一个选型速查表基于我个人的项目经验直接对号入座就好场景特征推荐算法组合理由已知静态地图、一次规划A*、Dijkstra、JPS路径质量最优、确定性强已知静态地图、大范围三维RRT*、Informed RRT*不依赖显式栅格、内存友好未知环境、飞行中实时避障局部势场 / DWA 全局A*反应快、可靠性高无障碍区域、全覆盖作业牛耕式扫描 区域分解简单稳定、漏喷率低多无人机协同、编队任务分布式RRT / 一致性协议 优先级规划可扩展、可处理冲突室内定位难、感知强需求VIO 局部规划 轨迹优化不依赖GPS实时性强5.3 仿真环境搭建要点做路径规划研究一个趁手的仿真环境能省很多时间。我现在推荐用Gazebo加PX4固件加QGroundControl地面站这套组合再配一个机载电脑上跑规划算法的节点。关键是仿真环境里地图和真机场景必须尽量一致否则你在仿真里调好的参数上真机就废了。尤其要注意两点物理引擎的摩擦系数、空气阻力在默认情况下和真实差别很大规划出的路径在仿真里能飞真机可能由于动力响应跟不上而出问题。仿真器里的传感器模型太理想不带噪声。建议打开传感器噪声模型或者直接用真实传感器数据做回放测试这样算法鲁棒性才能提前暴露。AirSim胜在画面逼真和API友好适合做数据生成和视觉类算法Gazebo胜在物理模型和ROS生态集成度高。两条腿都走。结尾的部分我聊聊个人这么多年的体会。无人机路径规划算法发展到现在已经不是单纯“一个算法打天下”的时代了工程上必须做组合、做取舍、做冗余。经典算法像A和RRT仍然不可替代因为它们有确定性、有数学保障出了问题能追溯智能优化方法对特定离线问题依然高效学习类方法虽然风头正劲但离真正安全可靠地大规模商用还有一段距离。我自己的建议是无论行业怎么变先把经典算法的代码亲手写一遍把坐标系、地图表示、碰撞检测、时间分配这些底层概念吃透再去追新东西。地基不牢后面跑再多模型都是空中楼阁。最后分享一个我做项目时的小习惯把每一次规划的输入地图、输出轨迹、实际飞行日志都存成标准格式回测和问题定位效率会大幅提升。数据比记忆可靠这个习惯帮我少加了很多班。希望这篇综述对你有用有踩坑经历也欢迎一起交流。
返回列表