
前几天经手一个集群任务仿真项目时遇到一件典型的事单机绕障碍一切正常改成三架、五架一起出动后航线开始互相穿插部分航段甚至直接切进禁飞区。排查了半天问题不在A星也不在RRT而是任务约束变了——无人机不能当质点它有最小转弯半径任务也不再是单机到达而是多机在指定时间窗口内协同进入目标区。这个背景下基于多段杜宾斯Dubins路径的协同策略是一个相当务实的选择。我把它完整落地成了Matlab代码这篇直接把问题建模、分段路径构造、协同逻辑和代码层面的数值坑全部摊开讲。正在做无人机路径规划、集群任务仿真或者固定翼航迹规划的朋友应该能从里面找到直接可以套用的思路和工程细节。1. 先看问题本质威胁环境下的多机协同难在哪1.1 任务模型里藏着的三种约束做任何路径规划第一步是把约束写清楚。我这里处理的任务模型是这样若干架固定翼无人机第i架的起点状态是位置(x_i,y_i)和初始航向θ_i速度限制在[v_min, v_max]最小转弯半径r_min由飞行性能和任务速度决定。任务要求所有无人机从各自起点出发到达某个目标区或集结区同时不能进入威胁区域。威胁区域可以代表雷达探测范围、禁飞区或者地面威胁覆盖区实现时用圆形或凸多边形近似复杂形状先取凸包包装一层。这个模型里其实压着三个层次的约束第一层是安全约束航迹不允许穿越威胁区第二层是动力学约束轨迹曲率不能超过1/r_min也就是说飞机无法原地转弯第三层是协同约束机与机之间要保持安全距离并且在时间维度上达成一致比如要求同时到达或者按指定顺序到达。这三层约束单独拿出来都不复杂叠在一起就成了一个需要仔细设计的问题。尤其是第三层经常被项目前期忽视等仿真系统里加入第二架飞机时才意识到冲突检测、时间窗口这些都得重新设计返工成本很高。1.2 单机“找路”和多机“编排”是两码事单机路径规划关心的是从A到B的一条可行且尽量短的轨迹多机协同规划关心的事则多了一圈每架飞机自身的路径要合法多架飞机放在同一张时空图上还要两两避碰最后还得对上共同的时间基准。我见过一个很典型的返工场景某项目最初用RRT生成各机路线单看每一条都挺平滑结果把三架飞机的轨迹叠加到同一张图上就乱了——两架飞机在同一个转弯区域会合另外一架的直线段又和别人的圆弧段交叉。问题不在于RRT本身不好而是缺少协同层。后来改成先做目标分配再对每架飞机规划满足曲率约束的路径然后用时间协调和空间隔离去调整效果才稳定下来。这也是我在这个项目里坚持用杜宾斯路径作为底层结构的原因它天生把转弯半径约束内置在路径里协同层只需要处理航点顺序和时间分配逻辑清晰很多。在实现中我不会把多机规划直接抛给一个黑盒优化器而是把“单机可行路径”和“多机协同调整”分成两层每一层单独验证出了问题能快速定位。1.3 为什么直接套经典算法会越调越乱A星、Dijkstra这类图搜索算法处理的是质点模型规划出来的折线拐角很尖锐直接给固定翼无人机用是不可能的。常见做法是先平滑但平滑之后又会出现两个问题一是平滑曲线可能重新侵入威胁区域二是平滑后的曲率未必满足最小转弯半径。RRT和RRT*理论上可以在状态空间里直接考虑曲率约束做法是在状态扩展时只允许按最小转弯半径转圆弧但这样搜索空间膨胀得很厉害节点扩展慢多机场景下还要额外处理机间冲突跑起来非常吃力。杜宾斯路径的价值在于它把“在最大曲率约束下从某一状态到另一状态的最短路径”这个问题解透了路径结构就是直线和最大曲率圆弧的有限组合长度也能解析计算。这让我在做多段路径和协同调整时手里有一个计算极快的底层模块而不是每次都要重新搜索。代价是经典杜宾斯路径本身不感知障碍所以必须用多段方式把它和威胁规避结合起来。下一节先把杜宾斯路径的几何基础讲清楚因为后面所有分段拼接和协同逻辑都建立在它之上。2. 杜宾斯路径速成转弯半径约束下的最优路径结构2.1 状态、转弯半径与路径组合固定翼无人机在水平面上的运动可以简化为一个带航向的状态位置坐标加上航向角θ。飞机转弯能力受最小转弯半径r_min限制r_min来自动力学性能粗略估算可以用r_min V²/(g·tanφ_max)其中V是飞行速度φ_max是最大滚转角。速度越快、允许的滚转角越小转弯半径就越大能钻的弯就越少。类比开车进急弯车速快、方向盘转角又有限自然需要更大的转弯半径才能不冲出路面。这个公式也提醒我们任务设计时不要把r_min当成随意设置的参数它和速度、机动能力绑定在一起。杜宾斯路径解决的核心问题是给定起点状态位置加航向和终点状态在最大曲率限制下最短路径长什么样。结论很漂亮最短路径一定由最大曲率转弯的圆弧段和直线段组成拓扑上只有两类——CSC圆弧-直线-圆弧和CCC圆弧-圆弧-圆弧以及各种退化形式。CSC适合起点终点朝向总体一致的情况CCC则多用于距离很短但航向变化剧烈的场景比如两架飞机在贴近位置需要掉头对齐。2.2 六条候选路径与最短解工程实现里不会真的去证明拓扑结构而是直接枚举所有可能性。每个起点有左转圆和右转圆两种选择终点同样有左转圆和右转圆直线段可能是两圆的外公切线或者内公切线枚举下来就是LSL、LSR、RSL、RSR、RLR、LRL这六种。分别算出每条候选路径的长度取最小值就得到最优杜宾斯路径。这段逻辑看起来繁琐但写起来很规律也方便后期扩展。我最早手写这段代码时踩过一个小坑左转右转的方向定义不统一导致圆弧段的角度增量算反生成的路径变成了绕大圈。后来约定统一用角度规范化处理所有角度先变换到[-π, π]区间左转圆弧按角度递增方向采样右转圆弧按角度递减方向采样。这样六种路径的长度计算和采样逻辑就对得上了。建议读者在写完求解器后先固定几个已知场景做单元测试比如直线飞行、90度转弯、180度掉头确认结果符合直觉再去接上层逻辑。2.3 Matlab求解时的坐标变换与切点计算具体到Matlab实现求解单个杜宾斯路径的标准流程是先把起点平移到原点旋转坐标系让起点航向角变成0然后对终点位置做同样的变换。接下来计算起点的左转弯圆心和右转弯圆心以及终点的两个转弯圆心。圆心位置很好求起点左转圆心在起点航向垂直方向的左侧r_min处右转圆心在右侧r_min处终点的圆心同理。这一步把所有几何问题都转换成“已知两个圆心、求公切线切点”的问题。最难的部分是直线段的切点计算。两个圆心之间可能存在外公切线也可能存在内公切线内公切线只在两圆距离不小于2r_min时存在。切点位置可以通过圆心连线的方向角、圆心距以及切线与连线的夹角来确定本质上是一组三角运算。切点坐标求出后把坐标反变换回原坐标系再按圆弧和直线分段采样输出。这个模块是整个项目的基石我在测试时通常用一组已知结果做校验确认路径长度和采样轨迹都在误差范围内才放心让上层调用。2.4 单段杜宾斯路径为什么不够用单段杜宾斯路径从数学上保证最短但它完全不看环境直线段很可能穿过威胁区域。更关键的是它只解决起点到终点这一段如果任务要求途经多个航点比如先绕过一个雷达站再进入目标走廊单段路径根本没有办法表达这种中途调整。所以必须扩展成多段形式先用威胁信息确定一串安全航点再把相邻航点之间的子路径用杜宾斯求解并保证航点处的航向衔接合理。这个扩展看着简单真正做起来有几个很隐蔽的细节下一节详细讲。3. 多段杜宾斯路径把威胁规避变成“航点排序航向设计”3.1 威胁区域建模与预处理威胁区域在仿真里最常见的是圆形和凸多边形。圆形威胁用圆心加半径表示为了留安全裕度我通常把半径乘上1.1到1.2的系数再参与计算。多边形威胁要先取凸包凹多边形在相交检测和航点生成时会有很多额外麻烦而且真实场景里的威胁包络大多能近似成凸包。如果两个威胁区域重叠或者距离非常近最好先合并成一个凸包否则后面生成的绕行航点很容易落在另一个威胁区里排查起来很痛苦。威胁建模这一步看起来不起眼却经常决定算法能不能收敛。我见过一个例子两片禁飞区相距不到200m各自建了凸包后在中间留下一条很窄的缝隙航点搜索怎么都找不到通路最后发现是两个凸包交叉导致的。合并之后路径立刻正常了。所以预处理阶段多花点时间比在规划阶段排查半天要划算得多。3.2 穿越检测圆弧不能简单当成直线段分段路径造出来之后首先要判断每一段是否和威胁区域相交。直线段相对简单用线段与多边形求交即可圆弧段就比较麻烦如果直接拿圆弧两个端点连成一条直线去检测长圆弧会漏掉大量中间区域。我一开始就这么干过仿真里明明路径绕开了威胁区却偶尔报出“穿越威胁”的误判查了半天才发现是圆弧采样太少。稳妥做法是把圆弧按角度分辨率采样成密集折线再逐段做线段与多边形相交判断。角度分辨率我一般设2到5度根据转弯半径和任务精度调整半径越大、要求越精细就把分辨率设小一点。采样折线和原始圆弧之间会有微小误差但在威胁检测这种场景里完全够用因为威胁区域本身已经做了安全裕度扩展。3.3 绕行航点的生成策略威胁已知之后绕行航点从哪来我常用的有三种思路。第一种是对每个威胁凸包的顶点沿外法线偏移一个安全距离生成候选绕行点第二种是针对圆形威胁求两个威胁圆之间的外公切线切点把切点当作绕行点第三种是在两个威胁区夹出的“通道”里取通道中心线的中点作为航点。实际项目往往混着用先按威胁凸包生成候选点再用搜索或贪婪方式在这些候选点里挑出顺序。需要注意一个细节候选航点本身也要做合法性检查确保它不在任何威胁区内部并且和相邻航点之间的连接路径不会穿越威胁区。一个常见错误是只检查航点位置不检查航点之间的连接结果生成的路径仍然穿过威胁区域。我的习惯是航点生成之后立刻全部做一遍合法性检查不符合的候选点直接剔除避免后续迭代在同一个地方反复卡住。3.4 航点航向的设计多段路径的真正难点如果以为把一串航点依次丢进杜宾斯求解器就算完事拼接出来的路径一定会在某个航点处“断掉”。原因是杜宾斯路径要求输入终点航向而上一段路径到达航点时的实际航向与下一段路径要求的起始航向如果不一致整条路径就有角度跳变固定翼无人机做不到瞬时转向。这也是“多段杜宾斯”和“普通多点航迹”最本质的区别。解决思路是把中间航点的航向当作可设计变量。对一串固定航点相邻两段杜宾斯路径的总长度是这些航点航向的函数于是可以把航向作为优化变量找到让总路径最短、同时满足所有威胁约束的一组解。这个方法理论上是干净的但要注意两点一是航点数量越多优化变量越多求解就越不稳定二是中间航点的数量并不是越多越好航点本身会增加转弯次数和路径长度真正的收益来自“绕开威胁”这个安全约束而不是航点数本身。实践经验里一条任务路径上的中间航点控制在5到6个以内超过这个数量基本说明威胁建模或者航点生成策略需要调整。3.5 迭代插入航点用冲突逼出可行解工程上我不太愿意一上来就做全局优化更常用的办法是迭代插入。从起点到目标先求一条单段杜宾斯路径然后做穿越检测如果直线段或圆弧段穿过了某个威胁区域就在进入威胁区的位置附近生成一个绕行航点把路径切成两段重新规划。重复这个过程直到整条路径不再与威胁区相交或者达到最大迭代次数。我实现的迭代上限是5到8次实测大多数场景在2到4次之间就能收敛。这种方法的好处是逻辑直观、调试方便每一轮都能从可视化里看出是哪个威胁触发了新航点。它的缺点是结果不一定全局最优但对工程任务来说一个满足所有约束的可行解往往比飘忽不定的全局最优更重要。而且这个可行解后面还要交给多机协同层和时间同步模块去调整过早追求单机路径最优意义不大。4. 多机协同从“各自飞”到“默契配合”4.1 先定时间基准同时到达还是按序到达多机协同最核心的出发点往往是时间。如果任务是多架无人机同时从不同方向进入目标区所有飞机就必须在同一个时间点到达指定地点或者处在很小的准许时延内。这个时候我会给整个任务设定一个期望到达时间T_task每架飞机根据自己规划出的路径长度L_i可以算出一个可行的速度区间L_i / v_max是它最快到达的时间L_i / v_min是最慢到达的时间。只要T_task落在这个区间内这架飞机就能通过速度调节实现准时到达。判断这个交集条件非常关键因为它直接告诉你任务是否可行。如果有一架飞机最快也赶不上T_task说明它的路径分配或者目标分配有问题需要重新规划而不是靠调参硬凑。如果某架飞机最慢也超过T_task说明它需要“在路上等一等”。这里的等不是悬停——固定翼停不下来——而是通过增加航迹长度把时间拉长。任务前期把可行性边界算明白能省掉后期大量无效迭代。4.2 路径长度调节的三种手段第一顺位是调速度因为实现最简单只需要在控制和仿真层面给每架飞机分配一个巡航速度。第二顺位是在安全空域增加一个完整的圆周段也就是让飞机在某段航线上绕一整圈路径长度增加2πr代价是时间和油量但逻辑非常可靠。第三顺位是调整某个中间航点的位置来拉长路径这个改动会影响很多后续航段一般放在最后考虑。我自己的优先级很明确速度能用先调速度速度区间不够再考虑加圆周航点位置尽量不动。有人习惯把路径整体拉长来强行对齐时间但对这类威胁规避任务来说拉长路径意味着增加暴露在威胁区域附近的时间反而是负优化。加圆周段时也要注意位置选择最好加在远离威胁区的直线上并且保证加完之后整段路径仍然满足曲率约束。实现上就是往航点序列里插入一个“原地绕圈”的伪航点路径长度增加、起终点状态不变逻辑比较简单。4.3 空间避碰安全距离与时间窗结合所有飞机同时飞向同一区域时机间避碰是躲不开的问题。最简单的做法是设一个最小水平安全距离d_safe在同步规划时对任意两架飞机的轨迹距离做检查。轨迹由直线段和圆弧段组成逐段计算两两之间的距离复杂度不算高在Matlab里向量化之后也能接受。如果某两架飞机的距离低于d_safe就需要调整其中一架的航点或者速度把空间拉开。更精细的做法是时间窗方案。先把各机路径画在二维平面上找出所有路径交点然后给每个交点分配通过时间。如果两架飞机都要经过同一个交点就让通过时间差大于安全时延Δt这样空间上是同一个点时间上却错开了。这个方案和“同时到达”存在矛盾如果任务硬性要求同时到达目标区交点上的时间差基本锁死空间避碰必须靠拉大水平距离解决。所以项目初期就要明确任务到底要“同时到达”还是“按序通过”这直接决定避碰策略的实现难度。4.4 顺序规划加局部修正一个工程上很稳的组合全局联合优化质量最高但变量和约束一大堆跑起来非常慢而且一旦出现不可行解很难判断是哪个约束导致的。我的做法是混合策略先按顺序规划每架飞机的路径规划时把已经确定的前序飞机轨迹当作动态障碍来处理得到一组初始解然后对机间距离和时间交点做一次全局检查把冲突严重的航段用局部优化修正。听上去不优雅但实测收敛速度快代码结构也清晰。这种顺序加修正的策略还有一个优势逻辑分层威胁规避、路径生成、时间协同、空间避碰都可以分开调试。哪一层出了问题直接看那一层的输出就够了。相比一个黑盒式的全局优化器这在实际工程里友好得多。尤其到了项目后期需要加新约束时分层结构只需要往对应模块里加检查逻辑不需要推倒重来。5. Matlab实现要点核心模块、几何细节与踩坑记录5.1 核心函数清单与数据结构整个Matlab工程我拆成了几个核心函数写代码时可以照这个结构组织。dubins4points负责求解单段杜宾斯路径输入起点状态、终点状态和转弯半径输出路径长度和采样轨迹点。tangent_points单独拆出来计算两个转弯圆之间的内外公切线切点方便单独调试。arc_sample负责圆弧采样line_poly_intersect负责线段与威胁多边形的相交判断。最上层是plan_multistage_dubins主函数负责航点生成、分段拼接、穿越检测和迭代插入航点。数据结构方面威胁区域我统一存成结构体数组每个结构体包含多边形顶点坐标、中心点、安全裕度。每架飞机的路径用结构体保存路径采样点、航向角序列、弧长分段信息、总长度和建议速度。建议把几何计算和逻辑调度分层几何函数不关心任务逻辑调度函数不直接处理三角函数这样调试起来非常舒服。主函数只负责“哪些航点、什么顺序”底层只负责“怎么把两点连起来”两者解耦。5.2 圆弧采样和相交检测的实现细节圆弧采样的实现要点是明确旋转方向。左转圆弧的航向角随着行进方向递增右转圆弧递减采样角度步长用deg2rad(step_deg)换算成弧度。起始角到终止角的弧长如果不一致要先归一化角度差避免角度跳变导致采样点偏移。每一步采样都记录位置和航向这样后面画航向箭头、做时间对齐都非常方便。相交检测方面线段与多边形相交我用的是经典判定线段两端点分别在多边形内部还是外部结合线段与多边形每条边的交点个数来判断。特别要注意端点在边上的情况单纯用内外点判定容易误判需要加一个很小的容差。测试相交检测函数时建议准备好几组边界用例线段正好穿过顶点、线段与边重合一部分、线段端点落在多边形内部。这些情况都通过了再用到真正的规划流程里才不会翻车。5.3 我踩过的三个数值坑第一个坑是角度规范化。切点计算和圆弧采样都强烈依赖角度的一致性如果航向角不做规范化同一个角度可能在π和-π附近来回跳导致圆弧方向判断错误、路径突然多绕一圈。我在所有输入和输出位置都统一加了处理规则很简单theta atan2(sin(theta), cos(theta))一行代码解决。第二个坑是内公切线不存在的情况。当两个转弯圆心的距离小于2r_min时内公切线并不存在但外公切线仍然存在。如果代码不判断这一点会算出NaN或者飞出很远的无效路径。我的处理是在求解六条候选路径时每条都判断几何可行性不可行的候选直接跳过而不是勉强计算。这个检查看上去多余实际是保证求解器稳定的关键。第三个坑是采样密度导致的漏检和误检。圆弧段如果采样太粗穿越检测会漏掉威胁采样太细路径优化和绘图又卡得不行。我最后采用的做法是先粗采样做初步检测发现潜在碰撞再对冲突段精细采样复核速度和精度都能兼顾。这个“两级检测”的思路在用Matlab做大规模仿真时非常有用能明显降低整体计算时间。5.4 可视化和调试的实用经验可视化对路径规划项目来说不是写报告时才用的而是调试的核心工具。我的习惯是先画威胁区域用patch填充半透明色块再把单机路径用较粗的曲线画出来每隔一段采样点画一个航向箭头最后用不同颜色区分不同无人机并把时间戳标在关键航点旁边。一旦发现某架飞机的路径穿进威胁区打开拐角附近的航向箭头立刻就能看出是圆弧方向算反了还是航点顺序错了。调试时还有一个必做动作检查每条路径的曲率是否超过约束。杜宾斯路径理论上不会超曲率但多段拼接和坐标变换如果出了bug曲率曲线会出现尖刺。我写了一个小工具把路径上逐点曲率画出来如果出现超过1/r_min的点就说明圆弧段采样或拼接逻辑出问题了。这个检查非常适合并入单元测试脚本每次改动后先跑一遍再去看多机协同的整体效果。6. 仿真算例三个典型场景实测对比6.1 场景一双圆形威胁区的单机绕行第一个算例是最简单的双威胁区场景。起点在左下角目标在右上方两个圆形威胁区横在中间转弯半径设成10个单位。如果直接求解单段杜宾斯路径直线段正好斜穿两个威胁区路径长度大约70多用多段杜宾斯绕行后路径增加到90多但全程不与威胁区相交也满足曲率约束。这个场景最大的价值是做基线验证先确认单段路径确实穿威胁再确认多段路径确实绕过威胁然后看多段路径里的转弯次数一般在2到4次。如果基础场景都跑不顺后面多机协同只会更难排查。6.2 场景二三架同时到达集结区第二个算例是三架无人机从不同位置出发要求同一时刻到达同一个集结区。三架飞机各自生成的路径长度差别比较大假设速度范围在30到50 m/s目标到达时间设定为100秒。路径短的那架比如长度2500m它的到达时间区间是50到83秒覆盖不了100秒必须靠加绕圈段把路径拉长路径长的那架比如长度4200m最快也要84秒可以覆盖100秒直接调速度就行。这个算例里我按照优先级规则处理先尝试调速度区间不够再加圆周段。表格对比了每架飞机的路径长度、调节方式、建议速度和最终到达时间误差误差控制在0.5秒以内。这组数据能说明协同层和路径规划层之间确实解耦路径规划给出长度协同层决定速度两者接口清晰。飞机编号路径长度(m)到达时间区间(s)采用的调节方式建议速度(m/s)到达时间误差(s)1250050 ~ 83增加绕圈段36.20.32380076 ~ 127速度调节38.00.23420084 ~ 140速度调节42.00.46.3 场景三密集威胁走廊下的四机按序通过第三个算例更贴近实际任务四架飞机需要穿过一片密集威胁区之间的狭窄走廊。如果要求所有飞机同时穿越空间上很难拉开安全距离如果任务允许按序通过就只需要在走廊入口处设定时间窗。四架飞机分别编码通过顺序每架通过入口的时间差设为安全时延后面的路径段各自独立规划。跑下来的结论很有意思按序通过的总路径长度往往比强行同时到达要短因为它省掉了大量为了拉开距离而增加的绕行段。所以我在项目里经常提醒团队如果任务需求里能明确“不需要同时到达只需要时间顺序约束”协同层可以做得轻很多路径质量也会更好。6.4 从仿真结果里读什么指标一套多机路径规划方案好不好建议重点盯四个指标路径总长度、最小机间距离、到达时间误差和规划耗时。路径总长度反映任务效率最小机间距离反映安全性到达时间误差反映协同层的执行精度规划耗时则决定这个算法能不能放进在线重规划流程。四架飞机的场景里我实测单次规划在普通桌面环境的Matlab里是几秒钟到十几秒钟量级满足离线预规划的用途如果要做在线更新还需要在代码性能上进一步优化比如把几何函数向量化或者换用编译语言。仿真做完之后我还习惯做一次蒙特卡洛统计固定随机种子随机生成多组起点和目标统计规划成功率和平均路径长度这样得出的结论比单独跑一两个场景更有说服力。7. 工程化补充建议与扩展方向7.1 在线重规划和局部修复多段杜宾斯结构有一个天然优势局部性强。任务执行中如果探测到新的威胁区域不需要从头规划整条路径只需要找到受影响的那一段航线在这个区间内重新生成绕行航点再用多段杜宾斯连接前后端点就行。这就要求代码在数据结构上把每段路径和航点存清楚方便局部替换。我实现时专门保留了分段路径容器每段都记录前航点、后航点、转弯半径和长度重规划时直接操作段列表。对于动态威胁场景这个能力几乎是必备的否则整条路径重算既费时间又可能把已经协调好的多机时间基准全部打乱。7.2 协同层的通信假设要提前定清楚无人机之间的通信条件对协同算法影响非常大。如果各机之间能持续交换位置和意图可以做集中式的全局协同修正如果只能起飞前同步一次任务参数那就必须在离线阶段把所有时间窗算死飞行中只能按预定速度执行。后者对速度误差和风的影响特别敏感实际工程里通常会在时间窗两侧留出10%到15%的安全冗余。这个问题在论文里可以假设理想通信但落到项目里必须提前和总体设计对齐否则协同算法写得再漂亮飞行中也会因为通信延迟而出现偏差。7.3 与随机采样方法结合最后说一个我常用的扩展玩法先用RRT或PRM在威胁环境中生成一串无碰撞航点再用多段杜宾斯把这些航点连接起来并对中间航点航向做优化。这不是简单地把RRT路径拿来平滑而是把RRT当作航点生成器把杜宾斯当作曲率合法的连接器。实测这种组合对许多复杂威胁分布比纯几何方法更稳定航点数也更少。但初值仍然重要我会在RRT生成航点后先过滤掉明显拖拽的点再进入杜宾斯拼接环节。如果想在论文里把它写完整建议把这个迭代插入航点的方法和一个非线性优化器结合先快速求可行解再把可行解作为初值去优化航点和航向收敛速度和结果质量都能兼顾。最后再分享一个小技巧写这类Matlab代码时千万保留一份单元级验证脚本里面放几个已知结果的简单场景比如直线飞行、90度转弯、180度掉头。每次改动核心几何函数后先把单元脚本跑一遍确认没有回归再去看多机协同的整体效果。这套习惯帮我节省了大量排错时间路径规划项目越做到后面越能体会到它的价值。