☰
多无人机协同追踪中的Dubins路径能耗计算与联盟组建策略
2026/10/21 8:09:38 网站建设 项目流程

1. 从单机到编队:无人机追踪问题到底难在哪

先说结论:多无人机协同追踪这件事,难点从来不在单机控制,而在于“一群带运动学约束的无人机,如何在不互相干扰的前提下,对一个动态目标形成持续包围态势”。如果只是让几架飞机同时朝一个点飞,那规划个直线就完事了,但真正的协同作战场景,目标会跑、会藏、会变向,前面有一堆障碍,飞机自身又有最小转弯半径的物理限制,这时候直线路径就成了废纸。

我接手这个项目的时候,需求方给的原始描述特别短,核心就三块:联盟组建、Dubins曲线能耗计算、多机协同追踪。听起来条理清楚,但真正做下来才发现每块都是一个深坑。比如联盟组建,看起来就是个“选几架飞机去干活”的匹配问题,但实际上要解决的是动态目标出现后,如何在几秒钟内决定哪些无人机组成临时编队、由谁当长机、各自承担什么角色。再比如Dubins曲线,大家都听过这个名字,但真正把能耗算准、算到能直接用于轨迹决策,里面涉及路径类型判定、转弯半径标定、能耗系数拟合一堆细节,缺一个环节整个计算结果就失真。

我习惯把这类问题拆成三层来看:任务层、决策层、执行层。任务层回答“我们要追踪什么目标、有什么约束”;决策层回答“派谁去、走什么路、能耗大概多少”;执行层才是具体的路径跟踪控制和状态估计。这个项目给的Matlab源码,其实主要覆盖了决策层,外加一部分执行层的仿真验证。这也是我认为这套代码价值最大的地方——它把决策层的问题模型化了,而决策层恰恰是很多入门做无人机的人最薄弱的部分。

另外必须说一句:这类问题如果只盯着仿真看,很容易忽视物理意义。比如Dubins路径长度算出来是50米,你得问一句对应的无人机实际要飞几秒钟、转弯那一段的加速度过载会不会超出机体承受范围。能耗计算如果脱离了无人机的动力模型和电池特性,就只是数学游戏。后面我会详细讲我在这个项目里是怎么把Dubins纯几何路径和实际能耗模型对接起来的。

整个项目做完,我手里的产出是一套可以直接跑的Matlab工程,支持自定义目标轨迹、调整无人机数量与运动学参数、动态触发联盟重组,并输出每一段Dubins路径的长度、曲率、能耗估算和整体追踪态势图。这套东西如果只是拿来跑个静态场景,十分钟就能出结果,但想用它支撑一个真实的多机协同任务,需要理解里面的每一处设计取舍。接下来我按我的实现顺序,把完整过程拆开讲。

2. 整体方案设计:为什么选Dubins + 联盟机制这套组合

2.1 运动学约束决定了路径规划不能只走欧氏几何

无人机在平面内运动,最基本的运动学约束是转弯半径有下限。这个下限由最大滚转角(固定翼)或最大水平加速度(多旋翼)决定,数学上等价于曲率有上界。也就是说,飞机不能原地掉头,不能走带尖角的路径。如果你用传统A*或者RRT规划出一条折线路径,飞行控制层还得额外去做路径平滑,而平滑后的路径已经很可能是次优的。

Dubins曲线的价值在于:它直接从“曲率有界”这个约束出发,给出任意两个满足方向的位姿之间的最短可行路径。它由直线段和等半径圆弧段拼成,圆弧半径不能小于最小转弯半径。这保证了规划结果天然可飞行,不需要额外的平滑环节。

我见过不少做多机追踪的项目,规划层用直线路径,仿真里飞得很好看,一上真机就各种漂移。原因就在这:你没有把运动学约束写进规划层,控制层再怎么调参都只是亡羊补牢。

2.2 为什么追踪场景特别依赖路径能耗排序

追踪问题和点到点路径规划有个本质区别:目标是在动的,你的路径需要在每轮决策周期内重新计算。如果规划算法本身就慢,那整个协同系统的响应速度就会被拖垮。Dubins路径的计算是闭式解析解,不需要迭代搜索,单条路径计算时间在毫秒级,这就为多机多轮决策留足了余量。

更重要的是,联盟组建需要一个统一的“代价度量”来决定派谁去。代价可以是时间、油耗、电量,但在追踪场景里,我更推荐用能耗。原因有三条:一是能耗是标量,加性可比较;二是能耗能更真实地反映执行能力,同一段路径,电量充足和电量不足的无人机能耗相同但剩余能力天差地别;三是能耗计算如果精确,后续做任务分配时的公平性和可解释性都会更好。

在这个项目里,我设计的是这样一个闭环:每一轮决策开始时,先基于目标预测位置和当前无人机状态批量调用Dubins规划器,算每架候选机到目标预测点的最短可行路径和对应能耗;然后跑联盟组建算法,选出能耗综合最小且能力互补的一组无人机;最后对选中的每架飞机下发轨迹指令,无人机沿Dubins路径飞行并持续回传状态,直到进入下一轮决策周期。

这套逻辑简单清晰,但实现上有不少细节,我在第三节里拆开讲。

2.3 联盟机制的设计取向:动态应对目标状态变化

联盟组建这个词听起来有点军事化,但放在民用场景里它就是一个动态任务分配问题。目标出现后,可能有七八架无人机在区域内待命,但真正适合去追踪的可能只有三架。谁去?标准是“总效用最大、总代价最小”,但还必须考虑互补性。比如一架无人机载的传感器类型正好覆盖目标特征,另一架飞得快能快速包抄,第三架电量最足可以坚持长时间追踪,这三架组合的价值远大于随便选三架能耗最小但角色重叠的。

关于联盟机制的实现方式,我用的是集中式决策加局部修复。也就是由一个决策中心(可以是地面站,也可以是长机)统一做联盟分配,分配结果下发后各机执行;一旦发现目标机动性增强导致某架无人机无法跟上,或者某架无人机电量跌破阈值,决策中心触发局部联盟修复,而不是全量重新计算。这个设计的动机很简单:全量重算在大规模编队下代价太高,局部修复能在几轮控制周期内完成调整,更适应动态场景。

从实际经验看,联盟启动的初始条件和修复触发的阈值,是影响系统稳定性的关键参数。阈值太灵敏会导致联盟频繁重组,各机轨迹不断变化,反而消耗额外能量;阈值太迟钝会导致部分无人机拖队,追踪态势崩溃。后面我会给出两组我实测下来比较稳的参数配置。

3. 核心模块拆解:Dubins路径能耗计算的实现细节

3.1 Dubins路径六种类型的判定与参数求解

Dubins路径的基础是两类圆弧:顺时针(R)和逆时针(L),以及直线段(S)。任何一条最短Dubins路径都属于下面六种组合:RSR、RSL、LSR、LSL、RLR、LRL。其中前四种叫CSC路径,后两种叫CCC路径,是曲率半径较大或转角特殊时才出现的情况。

实际写代码时,我建议不要一开始就去背那套复杂的几何判定公式,而是先理解每种路径的构造逻辑。以RSR为例:无人机从起始位姿右转,沿一段圆弧飞行;然后直线飞行;最后右转圆弧到达目标位姿。问题归结为:同时与起始圆、目标圆相切的直线段在哪里?这个切点可以通过解几何关系求出。CSC类路径的核心就是求两个圆之间的公切线,而CCC类则是在两个圆之间再插入第三个过渡圆。

Matlab实现里有一个硬骨头:判别到底该用六种中的哪一种。标准BDC算法通过归一化处理和符号判别一次性得到路径类型和参数,具体步骤是:

  1. 将起始位姿和目标位姿的坐标做旋转和平移,使得起始点为原点且起始方向沿x轴正方向;
  2. 根据坐标变换后的目标点位置和一组合法化符号量计算三种基本路径长度;
  3. 在候选路径中取长度最小者作为最终Dubins路径。

这段逻辑如果自己从零写,容易在符号判定上出错。我有一次路径长度算出来为负,查了半天才发现是旋转矩阵的行列式为负导致坐标镜像了。

3.2 能耗模型的建立:路径长度绝不是唯一变量

如果能耗模型只按路径长度乘一个常数系数来算,那精确二字就无从谈起。Dubins路径的能耗差异主要来自三个方面:一是直线段和圆弧段的能量消耗率不同,圆弧段需要持续侧向过载,电机功率相应更高;二是转弯半径越小,所需加速度越大,额外阻力越大,能效越低;三是速度规划的影响,同一条路径,匀速巡航和先减速再转弯的能耗差别可达约百分之十到百分之二十。

我采用的能耗模型是分段加和形式。每段路径按其特征(直线或圆弧)分别计算:

[ E = E_{straight} + E_{turn} = k_s \cdot L_s + k_t \cdot R \cdot \theta_t ]

其中(L_s)是直线段长度,(R)是转弯半径,(\theta_t)是圆弧段对应的转角(弧度制),(k_s)和(k_t)是两个经验系数,需要通过动力测试或仿真数据拟合得到。对于固定翼来说,这个模型已经够用了;对于多旋翼,建议把(k_t)做大一些,因为多旋翼在转向时消耗比固定翼更显著。

再细一层,如果要考虑速度剖面,就需要把能耗写成时间和速度的函数。经典做法是假设无人机以恒定真空速巡航,转弯段维持恒定转弯速率。这样可以近似为:转弯段能耗 (E_t = P_{cruise} \cdot t_{turn} \cdot \eta_t),其中(\eta_t)是转弯引起的功率增量系数,实测一般在1.3到1.8之间。这个系数在仿真里可以设为常数,但真机如果要高精度,需要做一次包线测试实验才能标定。

另外一个容易忽略的是“起点指向方向”的影响。同样是从A点到B点,无人机初始朝向不同,Dubins路径长度可能完全不同。举一个极端例子:如果初始朝向正对目标,直线飞过去可能就够短;如果初始朝向背对目标,必须先掉头绕一个大半圆。这个差异能耗可能差三到五倍。所以在联盟组建时,候选无人机的当前航向和位置是两个同等重要的状态量,绝不能只看位置。

3.3 能耗计算在Matlab中的工程化优化

Dubins规划器的核心函数我建议写成独立模块,输入是一个结构体,包含起始位置、起始航向、目标位置、目标航向、最小转弯半径,输出是最短路径、路径类型和分段长度。这里有一个工程优化点:把批量计算向量化。

如果你在联盟组建里要评估十架候选无人机,逐架调用Dubins规划器,循环十次没问题,但如果要扩展到几十架,或者要做双层嵌套的联盟组合评估,循环就会拖慢整体速度。向量化方法是一次性输入所有候选机的起始状态数组和目标状态数组,利用Matlab的矩阵运算特性同时计算。实测下来,向量化版本比for循环版本快一个数量级,在密集集群场景这个差距非常可观。

另外,最小转弯半径要和无人机型号匹配。这个参数对路径结果影响极大,却经常在仿真里被随意设置。合理的做法是从飞行性能数据反推:固定翼根据最大滚转角 (\phi_{max}) 和巡航速度 (V) 计算:

[ R_{min} = \frac{V^2}{g \cdot \tan(\phi_{max})} ]

多旋翼则根据最大水平加速度 (a_{max}) 计算:

[ R_{min} = \frac{V^2}{a_{max}} ]

很多源码里直接写死一个R值,我只能说那是跑通流程用的,和实物对不上,能耗计算结果只能用于相对比较,不能用于实际航程规划。

4. 联盟组建机制:从候选集合到最优编队

4.1 候选能力评估与初始筛选

联盟组建的第一步是初始筛选。所有可用无人机进入候选池的条件有三个:电量充足(高于任务最低阈值)、与目标预测位置的初始距离可行(在H2.3节说的最大追踪半径之内)、传感器状态正常。这一层筛选的目的是把明显不合适的对象剔除,缩小后续优化的搜索空间。

我做了一个特别细节的设定:每架无人机的“角色标签”,用来描述其能力偏向。在源码里,我用一个向量来表示,例如第(i)架无人机的角色标签是([1,0,1]),含义是“具备高速机动能力,不具备特定载荷能力,具备通信中继能力”。联盟组建算法在优化能耗的同时,会检查最终选中组合的角色覆盖情况——如果目标需要特定载荷识别,那么联盟里至少有一架带该载荷,否则即使能耗最优也会被否决。

这个“能力覆盖约束”在实际项目中极其重要。单纯按能耗最小选飞机,很可能选出一组同质化的无人机,要么全是高速机、要么全是长航时机,编队能力强了但感知能力不足。目标搜索追踪这种场景,需要的是感知、机动、续航三者互补。初期我忽略了这个约束,仿真结果看起来能耗非常漂亮,但一旦加入目标载荷约束就频繁失败,逼得我把这层约束写进优化模型里。

4.2 算法选型:贪心搜索对比整数规划

联盟组建在数学上可以建模为一个带约束的组合优化问题。决策变量是“第i架无人机是否加入联盟”,约束是能力覆盖、数量上下界、总能耗上限,目标函数是最小化总能耗。当候选机数量在10架以内时,我直接用遍历加剪枝就能在几十毫秒内找到全局最优。但候选机一旦超过20架,组合爆炸是必然的,遍历就完全不现实。

我的建议是分场景选择算法:

  • 候选中等(5-15架):用带剪枝的深度优先搜索或者贪心加局部搜索。
  • 候选数量大(20架以上):用整数规划求解器(Matlab的intlinprog直接可用),把约束写成线性不等式,一次求解到位。

在实际项目里,我采用了贪心加局部搜索的混合策略,理由是决策周期不能超过规定时间窗口。贪心初始解能快速给出一组可行联盟,局部搜索在初始解附近调整两三架成员来试探是否找到更优解。这个方案在候选中等规模下,基本能逼近最优解,且计算时间稳定可控。

具体到执行上,贪心策略不是简单按能耗升序往里加人。我按“单位能耗覆盖增益”排序,也就是每加入一架飞机,它能为联盟新增多少角色覆盖能力,除以它的消耗能耗。这个相对值能更好引导搜索走向互补型联盟。局部搜索就是把某个队列成员换成队列外候选,看总代价是否下降,依次迭代直到没有改进。

4.3 联盟与任务分配的联动逻辑

联盟组建完成后,紧接着是任务分配:联盟内的每架无人机具体承担什么子任务。这个分配可以按角色职责来做——长机执行主追踪,其他成员执行侧翼包抄或备份追踪——也可以按Dubins路径长短排序,让先到位的飞机先建立包围构型。

在这个项目里,我采用了角色加距离的双因子分配法。首先,长机必须具备最强的通信能力和计算能力(在角色标签里体现),它优先占据能耗最小的那一条路径,以便最短时间内占据有利位置建立信息链路。其余成员按各自角色和到各自目标点的Dubins能耗排序,依次分配。如果某架飞机指定的目标点路径能耗超过设定阈值,就触发重新规划或者触发其他成员调整目标点。

这里有一个我从实践中总结的细节:联盟数量不是越大越好。追踪一个单一目标,四到六架已经够用了,再多会导致编队内部协调复杂度暴涨,而且容易互相遮挡传感器视线。源码里我设计了一个默认四机联盟,两架主追踪,两架侧翼封堵,结构紧凑,协调简单,适应性也够。

5. 协同追踪策略与任务分配流程

5.1 动态目标预测与重规划触发机制

追踪任务里,目标的位置不是静态给出的,而是每隔一个周期更新一次。每一轮,系统需要基于最新探测数据预测目标在未来某个时刻的位置,然后据此重新规划各无人机的Dubins路径。这里有一个关键的时间同步问题:规划使用的目标预测点,必须和无人机飞到该点的时刻相对应,否则会出现追着目标的幽灵位置飞的情况。

我给出的方案是“预测时间匹配”:假设无人机从当前时刻出发,沿Dubins路径抵达敌方预测点需要的飞行时间为(T_{flight}),那么目标预测的位置必须是 (T_{flight}) 秒之后的目标位置。这就形成了一个固定点问题,需要迭代求解:先粗略估计目标位置,计算飞行时间,再用这个飞行时间重新预测目标位置,算新的路径,反复迭代直到收敛。

这个环节是很多代码里做得最粗糙的地方。不少入门实现直接拿目标当前点和无人机当前位置做Dubins规划,不考虑时间差,仿真里目标速度慢还好,一旦目标速度变快或者做机动,追踪效果会快速劣化。

5.2 任务循环的执行时序设计

我把完整的决策与执行时序拆成四个阶段,每个阶段固定时间窗口:

第一个阶段是态势感知与目标预测。所有无人机回传状态,包括位置、航向、速度、电量、传感器探测结果。决策中心汇总后生成目标预测轨迹。这个阶段是信息汇聚窗口。

第二个阶段是路径规划与能耗计算。对每个候选机到每个目标姿态点调用Dubins规划器,得到路径簇和对应的能耗。这一步时间开销最大,要靠批处理和矩阵运算压时间。

第三个阶段是联盟组建与角色分配。跑一次联盟优化,确定本轮的追踪编队和各自的目标点,下发指令。

第四个阶段是执行保持。编队成员沿指令飞行,直到下一个决策周期到来。这个阶段原则上无人机不主动改变轨迹,只有遇到突发事件(传感器失联、电量告警)时才会提前申请重规划。

这四个阶段构成一个周期性的决策环,周期长度一般设在2到5秒。周期太短,计算和通信开销大;周期太长,目标机动可能已经脱离包抄态势。我实测的默认值是3秒,配合我前面提到的预测时间匹配逻辑,效果在仿真里表现出了很好的稳定性。

5.3 冲突消解与队形保持

多机协同的另一个关键问题是冲突消解。无人机编队飞行时,两机不能距离太近,否则有碰撞风险。路径规划阶段就应该考虑到:每架无人机在自身Dubins路径上占据一个安全走廊,走廊宽度是无人机安全间距的两倍,任何两机的走廊不能重叠。

这个约束加入后,联盟组建就变成了一个带冲突约束的分配问题。本项目的解决方式是先规划再校验:先算出每架候选机路径,再检查已选成员之间的时空调度冲突。每轮选择联盟成员时,新成员与已选成员在相同时间段位置间距如果小于安全距离,就排除该组合并尝试下一个候选。这种策略牺牲了一点点最优性,但简单有效,计算量可控。

队形保持方面,我的做法是让长机带路,僚机按长机路径做延迟跟随。前文提到过,每架僚机接收的不是全局目标点,而是一个沿长机Dubins路径错开时间差的目标点。这个时间差由僚机在编队中的序号决定,序号越大延迟越大。这种设计天然形成了纵向梯形编队,不易发生位置重叠,也方便传感器覆盖扇区叠加。

6. 数据流与控制流:Matlab工程结构全解析

6.1 顶层入口与参数配置文件

整个Matlab工程入口是一个主脚本,负责加载仿真场景参数、生成初始无人机和目标状态、进入主循环。主循环以“决策周期”为步进,每个周期依次执行第5.2节的四个阶段。这个主循环的书写质量直接影响整个工程的可读性和可改造性,我建议按照“初始化 → 主循环 → 结果后处理”的三段式结构组织。

参数配置文件独立成一个结构体数组。这里面包含:

  • 无人机数量、初始位置、初始航向、巡航速度、最小转弯半径
  • 目标初始位置、运动模式(直线/圆周/S型机动)、速度曲线
  • 能耗系数 (k_s) 和 (k_t),转弯功率增量系数 (\eta_t)
  • 联盟决策参数,包括联盟规模上下界、电量阈值、最小安全间距
  • 仿真参数,包括总时长、决策周期、可视化开关

把这些参数独立出来的原因很简单:做参数扫描实验时,直接改一个字段就可以跑一组对照实验,不需要动代码逻辑。我当初在这个配置文件上多花了半小时,后面调参的时间节省了不止一个数量级。

6.2 关键函数模块的接口设计

代码里最重要的三个函数模块分别是Dubins规划器、能耗评估器、联盟组建器。它们的接口签名我用的是结构体输入、结构体输出,这个设计的好处是调用方不需要记住一堆位置参数,代码的可读性和可维护性都更好。

Dubins规划器的输入包含currentState、targetState和Rmin,输出包含pathType、length、segmentLengths和samplePoints。其中samplePoints是路径采样点,供后续可视化和控制输出用。能耗评估器的输入是Dubins输出结果,结合无人机型号参数输出能耗估计值。联盟组建器的输入是所有候选无人机的状态数组和任务需求参数,输出是联盟成员索引和各自的子任务配置。

这里有一个性能细节值得提:Dubins规划器里面的路径采样,如果不要求可视化,可以直接用分段参数表示。只有在下发指令或者绘制轨迹时才需要生成密集采样点,否则每段路径只存端点就够了。项目里我默认保留采样开关,因为调试阶段看一眼轨迹形状比节省那点内存重要得多。

6.3 主要变量命名与数据组织

我从这么多次仿真工程的维护经验里总结出:写Matlab代码最忌讳的是用a、b、c这种无意义变量,过一个月自己都能忘。这个工程里我统一用前缀区分角色或对象:

  • uavList:无人机总数数组,每个元素包含状态子结构体
  • targetObj:目标状态结构体
  • planCache:本轮规划结果缓存
  • allianceSet:联盟成员的索引数组
  • taskAssignment:每个成员对应的子任务

所有中间计算结果都挂在对应结构体下,方便随时断点查看。有一个小技巧是每轮结束时把关键结果追加到logging数组里,仿真结束后一次性画图。这个习惯让整个工程的调试效率提升非常明显,不用每次跑完主循环都重新设断点。

6.4 可视化与仿真结果输出

仿真可视化我做了两层。第一层是全局态势图,显示无人机、目标、Dubins路径以及目标预测轨迹点。第二层是能耗与联盟变化曲线,展示每轮能耗、累计能耗和联盟成员变化,方便观察系统在不同目标机动模式下的适应过程。

这里有一个容易踩的坑:如果目标一直在动,直接在图上画静态Dubins路径会产生“路径滞后”的视觉效果,看起来像是无人机在追一段已经过时的轨迹。解决方法是只绘制当前轮次规划出的路径片段,并配合预测点一起绘制。这个细节在评审演示时非常加分,因为它直观展示了系统的“预测规划”能力。

7. 常见问题盘点与调参实战记录

7.1 Dubins路径计算异常:无解、负值、横跳

我测试过程中遇到过三类高频问题。

第一类是无解或解不合法。表现是某两个位姿之间求不出路径,或者路径长度异常大。这类问题绝大多数出在最小转弯半径参数和位姿输入格式上,尤其要注意角度归一化到 ((-\pi, \pi])。如果有任何一个角度的弧度值给了 (3\pi),路径计算直接就乱套了。

第二类是路径类型在相邻决策周期里剧烈切换。上一轮是RSR,这一轮变成LSL,看起来无人机好像做出了一个完全不同的飞行决策。这种横跳现象本质上是因为两个候选路径的长度非常接近,目标点哪怕只移动了很小距离,最优类型就切换了。我在实际项目里通过给目标预测点加一个小的平滑延迟来缓解这个问题,同时也在联盟决策层强制要求“如果选中路径类型变化但长度变化小于阈值,保持一致”。

第三类是负数能耗。这个基本是能耗系数配置错误,检查一下负数到底是从哪一路径段来的。圆弧段的能耗系数如果设为负值,那逆时针路径全程都是负能耗——这是配置问题不是算法问题。

7.2 算法性能瓶颈与向量化改造结果

主循环跑一次完整仿真,我最初用for循环逐机逐点调用Dubins规划器,150个决策周期下来耗时约几十秒。这个速度在离线仿真里可以接受,但一旦做参数扫描,一百组参数跑下来就要好几个小时。

我对Dubins批量计算做了一次向量化改造,把内部几何计算全部改成矩阵运算,结果同一组仿真时间下降到原来的约六分之一。向量化不只是性能收益,还顺便消除了很多循环里的临时变量开销和潜在的数据类型转换错误。如果你准备把这套代码扩展到更大的编队规模,向量化是必须走的一步。

7.3 联盟频繁重组与参数敏感性

联盟频繁重组是追踪场景里最让人头疼的现象。现象描述是:联盟成员每隔一两轮就换人,前一轮的两架僚机还没飞到目标点,新一轮被替换了,系统整体能耗并没有显著下降,但轨迹混乱程度直线上升。

我排查后的根因是联盟触发阈值设得太敏感。初始阈值设为电量消耗超过百分之五就触发修复,这在长航时任务里太容易触发了。调整策略是双重确认机制:仅当电量跌破阈值持续两个决策周期,或目标预测偏差连续三轮超过设定范围时,才触发重组建。调整后联盟稳定性明显改善,总能耗反而下降了,因为频繁换人导致的重规划、重启动开销被省掉了。

7.4 实测参数记录参考

我把我常用的一组仿真参数列在下面,涵盖了中等速度目标和多旋翼无人机参数假设,可直接作为基线配置使用:

参数项推荐数值调节方向建议
巡航速度15 m/s提高则转弯半径变大,路径变长
最小转弯半径20 m依据实测加速度反推
决策周期3 s目标越快,周期越短
直线段能耗系数0.18 单位/m从真实动力数据拟合
圆弧段能耗系数0.26 单位/rad多旋翼适当调大
联盟规模下限3 架低于2架不具备包围能力
联盟规模上限6 架超过后冲突消解开销变大
安全间距8 m与机体尺寸和探测精度相关

该组参数跑出来的追踪效果在仿真中表现很稳定:即使目标做S型机动,联盟也能在一轮决策周期内完成路径修正,不会出现目标逃脱编队包围圈的情况。

8. 我为什么坚持把能耗模型做细

这个项目我做完之后,最大的体会就是:很多人做“多无人机追踪”的仿真,能耗模型只做一个常数乘路径长度,就觉得万事大吉了。但实际上能耗计算如果不区分直线段和转弯段、不考虑转弯半径对能耗的影响,那么做出来的最优决策往往会把无人机派向那些看着近但实际费油费电的路径。

举个例子,我做过对比实验:“看路径最短”方案和“看能耗最优”方案,在目标做匀速直线运动的时候结论相差不大,但目标一旦做圆周运动,路径最短方案会让无人机频繁调整航向,累计能耗反而高出约百分之十八。这正是能耗模型带来的决策差异,也是这个项目标题里“精准”二字的实际含义。

我想提醒新上手的朋友,仿真里的能耗精度不需要做到与真机实测完全一致,但趋势必须正确。也就是说,能体现“转弯比直飞更耗能”、“半径越小越耗能”这两个大趋势,做出的任务分配就有参考价值。如果连这个趋势都没体现,那这层能耗计算就只是摆设。我现在的做法是先保证趋势正确,再根据真机数据标定系数,一步步逼近真实值。

在这个基础上,如果想把Dubins能耗模型扩展到三维空间,可以引入速度剖面约束下的油耗模型;如果想把联盟机制做得更松耦合,可以改成完全分布式的协商机制。这些都是在这套代码骨架上可以自然生长的方向。但从当前这个项目的核心价值来看,把二维平面里的Dubins路径能耗算明白、把联盟分配逻辑跑通,已经足够支撑一批实际任务场景的仿真验证了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询