无人机协同避障航迹规划:从建模到优化的核心技术解析

发布时间:2026/8/22 21:47:18
无人机协同避障航迹规划:从建模到优化的核心技术解析 1. 从“深圳杯”C题看无人机竞赛的核心挑战每年一到数学建模赛季像“深圳杯”这样的题目总能成为圈内讨论的焦点。今年C题这个“无人机协同避障航迹规划”光看标题就知道是个硬骨头。它把当下最热的几个技术点——无人机、多智能体协同、动态避障、最优路径规划——揉在了一起摆明了是要考察参赛者从理论建模到算法实现的综合能力。这不仅仅是出一道题更像是模拟了一个真实的工业级或科研级应用场景想象一下在未来的城市物流、集群表演或灾害救援中一群无人机如何在充满未知障碍物的复杂空域里既要不撞车、不撞墙还要高效地完成各自任务最后还得整整齐齐地回家。这个题目就是对这个未来场景的一次纸上预演。对于参赛队伍来说看到这个题目兴奋和压力是并存的。兴奋在于它足够前沿有巨大的发挥空间压力在于它涉及的知识面太广从最基础的坐标系建立、运动学模型到进阶的图论、优化算法再到顶层的协同决策逻辑缺一环都可能让模型“瘸腿”。很多队伍一开始容易陷入两个极端要么过于纠结某个炫酷但复杂的算法比如一上来就想搞深度强化学习结果时间耗尽模型都没跑通要么把问题过度简化比如把无人机当成质点忽略动力学约束导致模型虽然能解但离题目的“现实意义”相去甚远。这道题的核心恰恰在于如何在“理论完备性”和“计算可实现性”之间找到那个精妙的平衡点。2. 解题第一步如何将现实问题转化为数学模型面对“协同避障航迹规划”第一步也是最关键的一步是进行合理的假设与问题定义。你不能直接把现实世界原封不动地搬进电脑必须做一个“翻译”把物理问题变成数学语言。2.1 定义无人机与环境的数学模型首先得确定怎么描述你的无人机。最简单的是质点模型即只考虑无人机的位置x, y, z忽略其姿态和尺寸。这在初步的全局路径规划中常用计算量小。但题目要求“避障”尤其是可能涉及狭小空间忽略尺寸可能会导致规划出的路径理论上可行但实际上无人机“胖”得飞不过去。因此更合理的模型是将其视为一个球体安全包络或长方体用其外接球的半径或机体的外廓尺寸来定义其占据的空间。运动学模型则决定了它怎么动。是简单的匀速直线运动还是更符合实际的带有最大速度、最大加速度约束的模型是否考虑转弯半径对于固定翼无人机尤其重要这些约束条件直接决定了后续优化问题的可行域必须在一开始就明确。接下来是环境建模。静态障碍物比如建筑物、山体通常可以用几何形状立方体、圆柱体、多面体来近似并在空间中给出其位置和尺寸。动态障碍物比如其他无人机、飞鸟则是难点。你需要预测它们的轨迹。简单的做法是假设其匀速直线运动复杂一点可以用卡尔曼滤波等估计算法进行预测。环境还需要一个数字化的表示最常见的就是栅格法。把三维空间划分成一个个小立方体体素每个体素标记为“空闲”、“障碍”或“未知”。这种方法直观便于进行碰撞检测但缺点是精度和计算开销是一对矛盾栅格越精细碰撞检测越准但内存占用和搜索时间也呈立方级增长。2.2 明确“协同”与“规划”的具体内涵“协同”在这里意味着什么这是建模的灵魂。是最简单的“空间协同”即只要保证任何时刻任意两架无人机之间的距离大于安全阈值就算不撞还是“任务协同”比如多架无人机需要按特定顺序访问一系列目标点亦或是更高级的“决策协同”比如无人机之间可以通信共享环境信息动态分配任务题目没有明说这恰恰是留给参赛者发挥的空间。通常数学建模竞赛鼓励在解决核心问题的基础上做一些合理的、有意义的扩展。例如可以先实现基于集中式控制的协同一个“大脑”为所有无人机规划再尝试探讨分布式协同每架无人机自主决策通过通信达成一致的优劣。“航迹规划”的输出是什么是一条由一系列路径点waypoints构成的折线还是一条随时间变化的连续轨迹包含每个时刻的位置、速度甚至加速度前者是路径规划后者是轨迹规划。轨迹规划要求更高因为它直接包含了时间维度可以更精确地满足动力学约束和协同时序要求。对于本题更合理的思路是进行轨迹规划。规划的目标函数也需要定义是最短总路程最短总时间还是总能耗最低或者是平滑性最好减少急转弯通常时间最优或能耗最优是常见的选择。所有这些定义都需要在论文的模型假设部分清晰、严谨地阐述这是评委评判你模型合理性的第一道关卡。注意很多队伍在这里会犯“想当然”的错误。例如未声明就默认无人机可以瞬时变速、原地转弯这会让后续的避障算法失去意义。务必根据题目暗示如“避障”和常识给出尽可能贴合实际的约束。3. 核心算法选型从A*到优化算法的演进之路模型建好了接下来就是用什么工具算法来求解。航迹规划算法种类繁多选择取决于你对问题复杂度、实时性和最优性的要求。3.1 基于搜索的规划方法对于静态环境经典的图搜索算法是很好的起点。A算法及其变种如Weighted A是全局路径规划的基石。它的核心是启发式函数在三维栅格地图中常用欧几里得距离或曼哈顿距离作为从当前点到目标点的代价估计。A*能保证找到最短路径但在高维三维细粒度栅格中搜索效率会降低。为此Jump Point Search (JPS) 等算法可以“跳过”大量不必要的节点在规则栅格中大幅提升速度。然而A*生成的是“路径”是一串离散的点。要得到“轨迹”还需要后处理比如用样条曲线如B样条、贝塞尔曲线进行平滑并检查平滑后的曲线是否满足动力学约束曲率不超过最大值和避障约束。这个过程有时会引入新的碰撞风险需要迭代调整。3.2 基于采样的规划方法当环境复杂、维度高时基于采样的方法显示出优势。快速随机扩展树RRT及其优化版本RRT是代表性算法。RRT通过在空间中随机采样并试图将新采样点连接到最近的树节点来探索空间它不依赖于离散的栅格能处理连续空间。RRT在RRT基础上增加了“重布线”和“父节点重选”步骤能渐进地优化路径最终趋向于最优解。对于无人机轨迹规划RRT的一个重大发展是Kinodynamic RRT它直接在状态空间包含位置、速度中进行采样和扩展生成的路径天生满足动力学约束无需后处理。这对于本题中考虑动力学模型的场景非常合适。不过RRT类算法的缺点是解的质量和随机性有关可能每次运行结果都不一样且难以严格保证在最坏情况下的性能。3.3 基于优化的规划方法这是目前学术界和工业界用于生成高质量、平滑轨迹的主流方法特别适合本题。其核心思想是将轨迹表示为一组参数化函数通常是多项式如五次多项式、B样条然后将所有约束避障、动力学、协同和目标函数时间最短、能量最小都表达为关于这些参数的数学约束和优化目标最后调用数值优化器求解。一个经典的框架是“微分平坦性”结合“最小化控制量Minimum Snap/Jerk”。对于大多数多旋翼无人机其状态和输入可以通过四个平坦输出位置x,y,z和偏航角ψ及其导数来表示。利用这个特性我们可以把复杂的动力学约束转化为对平坦输出轨迹的高阶导数如加速度、加加速度Jerk的约束。轨迹用分段多项式表示优化目标是最小化所有段多项式的四阶导数Snap或三阶导数Jerk的平方积分这能有效保证轨迹的平滑性减少电机磨损和乘客不适感。避障约束如何融入这个优化框架呢一个巧妙的方法是利用“安全走廊”。先用A*或RRT生成一条粗略的初始路径然后沿着这条路径用一系列重叠的几何形体如球体、立方体包裹起来形成一个无碰撞的安全通道。优化时约束轨迹必须位于这个安全走廊内。这样复杂的“不与障碍物相交”约束就变成了简单的“轨迹点位于某个立方体内”的线性约束大大降低了优化难度。协同约束主要是防撞可以转化为无人机两两之间距离的约束。在优化问题中这通常是一个非凸约束直接求解困难。常见的处理方法是采用“优先级规划”或“迭代优化”。例如先为第一架无人机规划一条轨迹并固定下来然后为第二架无人机规划时将第一架的轨迹视为动态障碍物依此类推。更高级的方法是做联合优化但计算量巨大。实操心得对于数学建模竞赛的有限时间我强烈推荐“安全走廊最小化Snap/Jerk优化”这条技术路线。它理论优美实现相对成熟有开源代码参考如mav_trajectory_generation生成的轨迹非常平滑专业。关键是要写好安全走廊的构造逻辑这是保证无碰撞的核心。4. 协同避障的核心将冲突化解于规划之中单机避障是基础多机协同才是本题的升华。协同的核心是解决冲突防止无人机之间相撞。冲突检测与解决CDR是空管领域的经典问题其思路可以借鉴到无人机集群中。4.1 集中式与分布式协同架构集中式架构有一个中央控制器拥有全局信息为所有无人机统一规划轨迹。优点是能保证全局最优性规划结果一致性好。缺点是计算负担集中在中央节点通信需求高且存在单点故障风险。在数学建模中如果无人机数量不多比如题目示例中的3-5架集中式是完全可行的。你可以建立一个庞大的优化问题决策变量是所有无人机的轨迹参数目标函数是它们的总飞行时间或总能耗约束包括每架无人机的动力学约束、与静态障碍物的约束以及任意两架无人机在任意时刻的距离必须大于安全阈值。这个“任意时刻”是难点通常需要离散化时间点来施加约束。分布式架构中每架无人机基于自身传感器和有限的通信信息自主进行规划并通过通信与邻居协商达成一致的避让策略。例如基于速度障碍法VO或其三维扩展——速度障碍锥VOC每架无人机可以计算出会导致与邻居相撞的“危险速度”集合然后选择不在这个集合内的最优速度。这种方法实时性好扩展性强但难以保证全局最优可能陷入局部震荡两只无人机互相让来让去。在竞赛中实现一个完整的分布式算法挑战较大但可以将其作为一个对比方案或扩展方向进行讨论。4.2 基于时空轨迹的冲突检测无论采用哪种架构精确的冲突检测是前提。对于已经规划好的轨迹无论是多项式还是离散点序列我们需要判断它们之间是否会冲突。最直接的方法是离散时间检查法。将时间轴以固定步长如0.1秒离散化计算每个时间步上所有无人机的位置然后检查两两之间的距离。如果任何一对的距离小于安全距离例如机身半径之和加上一个余量则判定为冲突。这种方法简单但精度取决于时间步长。步长太大可能漏检发生在两个离散点之间的碰撞步长太小则计算量剧增。更严谨的方法是连续时间检测法。如果轨迹是多项式那么无人机间的距离函数d(t)也是一个关于时间t的高阶多项式。冲突检测问题就转化为在时间区间[0, T]内是否存在t使得d(t) R安全半径这可以通过求d(t) - R的最小值或者求解方程d(t)^2 - R^2 0的根来判断。虽然计算更复杂但能给出精确的、数学上严格的碰撞判断非常适合在优化迭代中作为约束函数使用。4.3 冲突解决策略设计检测到冲突后如何解决策略多种多样优先级法为无人机设定固定优先级如编号顺序。优先级高的无人机保持原计划不变优先级低的无人机负责避让。避让方式可以是局部重规划也可以是在原轨迹上增加一个“等待”或“绕行”的机动。这种方法简单确定但可能对低优先级无人机不公平导致其路径大幅延长。协商法冲突双方通过通信协商各自做一些让步。例如基于博弈论每架无人机都轻微调整自己的速度或方向使得双方的综合代价如延误时间最小。这更公平但需要通信和计算共识。时空调整法这是最符合“轨迹规划”思想的方法。不改变路径的形状而是调整无人机经过某个路径点的时间。比如让一架无人机稍微飞慢一点另一架飞快一点错开它们同时到达交叉路口的时间。这相当于在时间维度上进行了优化往往比空间上的绕行更高效。在建模时你可以将冲突解决策略设计为一个上层决策模块。当基于初始路径的优化轨迹检测到冲突后触发此模块。模块根据策略如优先级法修改某些无人机的目标条件如增加延迟惩罚然后重新进行轨迹优化迭代直到无冲突。这个过程可以清晰地展示在你的论文算法流程图里。5. 从模型到代码一个可行的实现框架与关键细节理论再完美最终也要落地成代码和结果。对于72小时的数学建模竞赛实现一个完整可运行的仿真程序是获得高分的关键。5.1 编程语言与工具选择Python是绝对的首选。其丰富的科学计算库NumPy, SciPy和优化工具CVXOPT, CasADi是建模利器。对于轨迹优化可以使用cvxpy这样的凸优化库如果问题能转化为凸问题或者CasADiIPOPT来处理更一般的非线性优化问题。CasADi是一个强大的符号计算和自动微分框架能方便地定义优化问题并求导IPOPT是一个稳健的内点法求解器两者结合是解决此类非凸轨迹优化问题的黄金组合。可视化同样重要。Matplotlib可以进行基本的2D/3D绘图展示轨迹和障碍物。如果想做更生动的动画Matplotlib的FuncAnimation或者PyGame是不错的选择。一个动态展示多架无人机蜿蜒飞越障碍物、并完美错开的动画绝对能为你的论文增色不少。5.2 实现步骤拆解一个可行的实现Pipeline如下环境与问题初始化定义三维空间边界。用程序生成或读取给定的静态障碍物例如几个随机放置的立方体。定义每架无人机的起点、终点、最大速度、最大加速度、机身半径。设定安全距离通常为两机半径之和加上0.5-1米的余量。单机全局路径搜索为每架无人机独立地运行一次A或RRT算法在考虑静态障碍物的情况下找到一条从起点到终点的无碰撞路径离散点序列。此时先不考虑其他无人机。这一步的目的是获得一条初始的、空间上可行的参考路径用于后续构造安全走廊。安全走廊构造沿着每架无人机获得的初始路径生成一系列依次连接的安全区域。一个简单有效的方法是以路径上的每个点为中心向周围膨胀直到碰到最近的障碍物或其他无人机的初始路径保持一定距离形成一个球体或轴向包围盒AABB。这些球体或盒子首尾相连就构成了该无人机的“安全走廊”。这个走廊保证了无人机只要在里面飞就不会撞上静态障碍物也为后续的协同避障提供了缓冲空间。基于优化的轨迹生成对每架无人机采用分段多项式如五次多项式来表示其三维轨迹。将总时间划分为若干相等的小段每段用一个多项式。设计优化问题决策变量所有多项式段的系数。目标函数最小化所有段的多项式四阶导数Snap的平方积分。这会使轨迹非常平滑。约束条件边界约束轨迹的起点和终点的位置、速度通常设为零、加速度必须等于给定值。连续性约束相邻两段多项式在连接点处的位置、速度、加速度、加加速度Jerk必须连续。动力学约束轨迹上任意点的速度、加速度模长不得超过无人机最大值。安全走廊约束轨迹上的一系列离散检查点必须位于对应的安全走廊几何体内。这是一个线性约束。协同避障约束核心难点对于任意两架无人机在同一系列离散时间点上它们的位置距离必须大于安全距离。这是一个非凸约束。为了求解可以采用顺序凸优化SCP的思路在第一次优化时先忽略这个约束得到初始轨迹然后在初始轨迹附近将这个距离约束线性化变成一个凸约束在新的凸约束下重新优化如此迭代直到收敛。虽然不能保证找到全局最优解但通常能得到一个很好的可行解。冲突检测与迭代修复即使经过上述优化由于线性化误差或离散化误差仍可能残留微小冲突。编写一个高精度的冲突检测函数如连续时间多项式求根法。如果检测到冲突可以采取微调策略例如轻微增加其中一架无人机的总飞行时间这相当于在时间维度上拉伸其轨迹然后固定时间重新进行第4步的优化。或者调整安全走廊的尺寸在冲突点附近为无人机提供更宽松的通道再优化。这个过程可以自动化形成一个“规划-检测-修复”的循环直到所有冲突解除。5.3 关键代码片段与调试技巧以使用CasADi定义优化问题为例核心结构如下import casadi as ca import numpy as np # 假设我们有一架无人机轨迹用N段五次多项式表示每段时长dt N 10 # 段数 poly_order 5 # 五次多项式 coeff_per_dim (poly_order 1) * N # 每维坐标的系数总数 # 决策变量包含x, y, z三个维度所有多项式系数 opti ca.Opti() p_coeffs opti.variable(3, coeff_per_dim) # 3行分别对应x,y,z # 1. 定义目标函数最小化Snap平方积分 # 对于五次多项式snap是四阶导数为常数。其平方积分等于 snap^2 * dt # 需要计算每个多项式段的snap这涉及到系数的运算... total_cost 0 # ... (这里省略具体的系数到导数映射的计算) opti.minimize(total_cost) # 2. 添加约束 # 起点终点约束 start_pos np.array([0,0,0]) end_pos np.array([10,10,10]) # 将起点终点的位置、速度、加速度约束转化为对多项式系数的线性等式约束 # ... (省略具体构造过程) opti.subject_to( start_constraints 0 ) opti.subject_to( end_constraints 0 ) # 连续性约束 # 相邻段在连接点处位置、速度、加速度、加加速度相等 # ... (省略) # 安全走廊约束在每段中间取一个点约束其位置在对应的走廊立方体内 for seg in range(N): # 计算该段中点的时间 t_mid (seg 0.5) * dt # 根据系数计算中点位置 pos_mid f(p_coeffs, t_mid) # corridor_min[seg], corridor_max[seg] 是该段对应的走廊边界 opti.subject_to( pos_mid corridor_min[seg] ) opti.subject_to( pos_mid corridor_max[seg] ) # 3. 求解 opti.solver(ipopt) # 选择IPOPT求解器 sol opti.solve() traj_coeffs sol.value(p_coeffs)调试这样的优化问题常见问题包括求解器失败不可行或无解最常见的原因是约束过紧互相冲突。例如安全走廊给得太窄而动力学约束要求的速度又很高导致无人机“拐不过弯”。调试时应逐步放松约束。可以先去掉所有走廊约束和协同约束只保留起点终点和动力学约束看能否解出一条轨迹。然后逐步加入走廊约束最后再加入协同约束。每次加入新约束后观察求解是否依然可行。求解时间过长问题规模段数N、无人机数量太大会导致变量和约束激增。可以尝试减少段数N或者先对少数几架关键无人机路径可能交叉的进行联合优化其他无人机沿用单机轨迹。轨迹不光滑有抖动可能是目标函数中Snap的权重不够高或者离散检查点太少导致优化器在点之间“投机取巧”。可以增加Snap项的权重或者在轨迹上增加更多的路径点约束。踩坑实录我第一次实现时把协同避障约束直接写成distance(t) safe_dist然后让求解器去处理。结果IPOPT直接报错因为初始猜测点比如所有系数为0根本不满足这个约束导致求解器无法开始迭代。正确的做法是采用软约束或者SCP方法。软约束即将distance(t) safe_dist改为distance(t) safe_dist - slack并给slack松弛变量一个很大的惩罚项加入目标函数。这样即使初始点不满足求解器也可以通过增大slack来启动然后努力将slack压到0。SCP方法则更稳定如前所述通过线性化迭代逼近。6. 论文写作与结果呈现如何让你的模型脱颖而出数学建模竞赛最终比拼的是将解决方案清晰、有说服力地呈现出来的能力。论文是唯一的载体。6.1 模型部分写作要点在论文的模型部分切忌堆砌公式和算法描述。要讲一个逻辑连贯的故事问题分析开篇明义用你自己的话分析题目难点动态协同、约束多、目标复杂并引出你的整体解决思路例如“本文采用分层规划框架上层基于时空冲突检测进行协同决策下层采用基于安全走廊的最小Snap轨迹优化方法生成平滑、安全、高效的飞行轨迹。”。模型假设清晰列出所有假设并说明其合理性。例如“假设无人机为质点模型但通过膨胀障碍物半径的方式等效考虑其尺寸”“假设动态障碍物其他无人机的轨迹在短时间规划周期内可预测”。符号说明制作一个清晰的表格列出所有用到的主要变量、符号及其含义和单位。模型建立无人机模型给出运动学方程。(x_{k1} x_k v_k * Δt 0.5 * a_k * Δt^2)并说明速度、加速度的上下限约束。环境模型说明如何表示障碍物如用一系列立方体的顶点坐标表示。优化模型这是核心。详细写出目标函数和所有约束条件的数学表达式。对于关键的协同避障约束||p_i(t) - p_j(t)||_2 d_{safe}要说明你是如何处理这个非凸约束的例如采用顺序凸优化在第k次迭代时在上一轮轨迹p^{k-1}处进行一阶泰勒展开得到线性约束(p_i^{k-1} - p_j^{k-1})·(p_i^k - p_j^k) / ||p_i^{k-1} - p_j^{k-1}|| d_{safe}。算法流程用流程图可以用Word或Visio绘制在论文中贴图展示你完整的算法步骤从输入到输出让评委一目了然。6.2 仿真结果与可视化结果部分不能只放几个数字要用丰富的图表说话。场景设定设计2-3个有代表性的仿真场景。例如场景一基础验证2-3架无人机在简单障碍物中交叉飞行验证基本避障和协同功能。场景二复杂度提升增加无人机数量如5架和障碍物密度测试算法的可扩展性和鲁棒性。场景三动态性测试引入未参与规划的第三方动态障碍物模拟突发情况测试算法的反应能力可以设计一个简单的局部重规划模块。对比实验这是体现工作深度的关键。将你的算法如“本文协同优化方法”与基线方法进行对比。基线方法可以是无协同规划每架无人机独立规划最优轨迹不考虑其他无人机。优先级规划法固定优先级低优先级无人机避让。传统方法如先独立规划路径再用速度障碍法VO进行局部避碰。评价指标定量比较。常用的指标包括任务完成时间最后一架无人机到达目标的时间或所有无人机到达时间的最大值/总和。总飞行距离/能耗所有无人机轨迹长度之和。轨迹平滑度计算整条轨迹的加速度或加加速度Jerk的平方积分值越小越平滑。安全性记录仿真过程中最近机间距离的最小值必须大于安全距离。可以统计“安全裕度”最小距离/安全距离。计算时间算法从输入到输出轨迹所花费的时间评估实时性。可视化呈现三维轨迹图在同一个三维坐标系中用不同颜色的线条绘制所有无人机的轨迹用半透明立方体或球体表示障碍物。这是最直观的展示。时空图横轴是时间纵轴是无人机在某一维度如x坐标上的位置。将多架无人机的时空曲线画在一起可以清晰看到它们是如何在时间和空间上错开的。如果曲线相交则说明发生了碰撞在同一时间处于同一位置。距离-时间图绘制任意两架无人机之间距离随时间变化的曲线并画一条水平线表示安全距离。所有曲线都必须在这条水平线之上。性能指标对比表格用表格清晰列出不同算法在不同场景下的各项指标数值。6.3 灵敏度分析与模型评价优秀的论文不会止步于“我的算法能工作”还会探讨“我的算法在什么条件下工作得更好或更差”。这就是灵敏度分析。参数敏感性你的模型中有一些关键参数比如安全距离d_{safe}、优化中Snap项的权重ω、轨迹分段数N。可以设计实验固定其他条件改变其中一个参数观察评价指标如总时间、平滑度的变化趋势。用折线图展示并分析原因。例如“随着安全距离d_{safe}增大任务完成时间单调增加因为无人机需要更早、更大幅度地避让这与直觉相符。当d_{safe}超过3米后时间增长趋于平缓说明在本文场景下3米是一个兼顾安全与效率的合理取值。”模型优缺点与改进方向客观地评价自己的工作。优点可以写模型考虑了动力学约束轨迹平滑采用安全走廊和凸优化保证了求解的可行性和效率实现了严格的协同避障。缺点也要诚实指出例如集中式优化计算量随无人机数量增长较快难以应用于大规模集群对动态障碍物的处理较为简单假设其轨迹已知或匀速运动。改进方向则可以展望未来可研究分布式协同算法以提高可扩展性引入机器学习方法进行轨迹预测以处理更复杂的动态环境。最后将你的所有程序代码、生成图表的脚本作为附录提交。确保代码有良好的注释和结构这能极大增加论文的可信度和评委的好感度。记住一篇好的数模论文是技术深度、逻辑清晰度和表达说服力的完美结合。通过这道“无人机协同避障航迹规划”题目的锤炼你收获的将不仅仅是一个奖项更是一套解决复杂系统工程问题的完整方法论。

相关新闻