基于凸组合的时变编队跟踪与多目标协同围捕方案解析

发布时间:2026/10/17 9:27:18
基于凸组合的时变编队跟踪与多目标协同围捕方案解析
做协同控制研究的人看到“TAC: 时变编队队形跟踪与多目标协同围捕的凸组合研究”这个题目应该会立刻敏感起来。这里面的信息量非常大时变编队、队形跟踪、多目标协同围捕、凸组合任何一个词单独拎出来都够写一篇像样的论文而把它们放在一个框架里本身就是一个很有挑战性的研究方向。我接触这个选题有一段时间了也带着团队把这套思路从理论推导一路做到了半物理仿真验证。这篇博文就围绕这个题目把我对技术方案的理解、数学建模的细节、仿真实操的参数选择以及我踩过的坑系统整理一遍。无论你是准备在这一块开题的研究生还是已经在做编队控制想往协同围捕方向拓展的工程师这篇文章都能省下你不少摸索的时间。1. 内容整体设计与思路拆解1.1 先从题目本身说起标题拆开看是三个问题时变编队队形跟踪如何让一组智能体无人机、无人车、无人艇都行在保持期望队形的同时整体跟踪一个参考轨迹而且队形还是随时间变化的不是固定死的一个形状。多目标协同围捕当环境里存在多个需要被围捕的目标时一组智能体如何分配任务、协商角色把多个目标分别包围住。凸组合编队跟踪和围捕这两件事怎么在一个统一的数学框架下表达和求解。“凸组合”就是把多个约束或者多个控制目标通过加权的方式合成一个有效目标。这三件事单独做其实都不算稀奇。编队控制有共识协议、一致性算法撑腰分布式围捕有包围控制、 Apollonius 圆这些成熟理论。但把它们合在一起用“凸组合”这个视角做统一建模在公开文献里、工程实践里能参考的东西就不太多了。这恰恰是这个题目的价值所在。1.2 为什么用凸组合来衔接这是整个方案设计里最核心的一个决策点。刚开始我拿到这个题目时第一反应是“分段设计”智能体先做编队跟踪等靠近目标了再切换成围捕模式。这就是传统的“模式切换”思路逻辑简单但工程上有一个根上的毛病——切换瞬间控制指令不连续飞行器容易抖编队容易乱。更麻烦的是如果目标也在动你刚切到围捕模式目标又跑出了包围圈系统又会切回跟踪模式来回切换产生了振荡。用凸组合的目的就是把“跟踪”和“围捕”这两个目标通过权重参数连续地融在一起。权重可以在线调整智能体离目标远的时候跟踪权重占主导编队稳稳地飞过去离目标近了围捕权重逐渐抬升队形开始展开包围。这个连续过渡解决的是工程上看得见摸得着的痛点。凸组合还有另一个好处它可以天然地处理多个任务约束的优先级。如果同时有三四个围捕目标你把每个目标的围捕控制项都做一个凸组合权那么系统整体就是一个加权目标函数下的协调控制问题而不必做显式的角色分配。这对编队规模比较大的场景尤其友好。1.3 时变性的实际来源有人可能会问队形为什么要时变固定队形不好吗答案是好但不够。固定队形在“开阔地带走走队形”的场景里完全够用但在真实对抗场景里固定队形其实很脆目标可能穿过编队的缝隙逃走队形不变就等于把路让开了。外部环境可能有禁飞区、障碍物队形没法整体平移过去就需要局部变形。传感器视野也可能限制编队姿态需要跟随目标位置调整队形朝向。时变队形的数学表达就是把期望队形的偏移量设为时间的函数 d_ij(t)而不是常数。这个看似小改动带来的复杂度是指数级上升的。时变队形的跟踪要求每个智能体不仅要跟踪参考轨迹还要叠加一个随时间变化的相对位置偏移控制器的设计开始有实质性的难度。2. 数学建模与核心协议设计2.1 智能体模型与通信拓扑这一块是后面所有工作的地基。我采用的智能体模型是典型的一阶积分器模型写成x_dot_i u_i这里 x_i 是智能体 i 的位置向量二维平面就是2×1三维就是3×1u_i 是控制输入。对很多编队控制研究来说一阶模型有足够的代表性而且能清晰表达算法结构不把读者淹没在高阶动力学里。如果你的实际平台是四旋翼后续可以把一阶模型换成双积分器甚至四旋翼全状态模型但核心控制协议的骨架不会变。通信拓扑用无向图 G (V, E) 描述V是智能体节点集合E是通信边集合。这里我特别强调一下编队控制依赖的拉普拉斯矩阵 L其性质直接决定了编队能不能收敛。无向图对应的 L 是对称半正定矩阵特征值0的重数等于图的连通分量数如果图是连通的特征值0就是单重的这保证了系统能形成“一致性”也就是相对状态能收敛到期望关系。在拓扑设计时我一般建议编队内部的通信链路尽量构成三角结构比如6个智能体的队形采用环形加对角链的拓扑而不是一条链。原因是链式拓扑对通信时延的容忍度差抗节点故障的能力也弱一旦链路断开后半段智能体就跟编队失去联系了。2.2 时变编队跟踪协议设计时变编队跟踪的控制协议我写成如下形式u_i c * sum_{j in N_i} a_ij [ (x_i - d_i(t)) - (x_j - d_j(t)) ] c * b_i [ x_i - d_i(t) - r(t) ]这个式子看着长其实分两块第一项是编队内一致性项。N_i 是智能体 i 的通信邻居集合a_ij 是图邻接矩阵的元素。这一项的作用是强行把每个智能体之间的相对位置拉到期望的队形约束上。d_i(t) 是智能体 i 的期望队形偏移d_j(t) 是邻居 j 的期望队形偏移两项相减就实现了“去掉队形偏移后的相对状态趋于一致”。这一项是整个协议的核心。第二项是跟踪项。b_i 是牵制增益表示智能体 i 是否直接获得了参考轨迹 r(t) 的信息。如果 b_i 0说明这个智能体是“知情者”能拿到全局参考信号我们常把这样的节点叫牵制节点或者领导节点。r(t) 是参考轨迹可以是编队质心需要跟踪的路径。整个协议的核心思想就是既有编队内部的相对约束又有对全局参考的绝对跟踪两项加权叠加形成完整的控制输入。你仔细看这个协议会发现它本质上就是一个加了前馈和偏移的一致性协议这也是我觉得这套方案最漂亮的地方——控制器的结构极小改动算法实现上非常友好。对于时变编队关键在于 d_i(t) 的设计要满足一个条件期望编队构型的整体运动与参考轨迹一致即编队构型的质心运动要等于 r(t) 的变化率。这个条件在论文里通常写成sum_{i1}^N d_dot_i(t) m * r_dot(t)如果这个条件不满足编队内部会自己“内耗”即使一致性项把相对状态拉齐了整个编队也跟踪不上参考轨迹。这是推导过程中最容易忽略的坑很多团队仿真出问题都是卡在这一步。2.3 凸组合围捕机制的构建凸组合在围捕机制里的用法是把“编队跟踪目标”和“多目标围捕目标”两个控制目标合成一个控制输入。我采用的做法是u_i lambda_i * u_follow_i (1 - lambda_i) * u_encircle_i这里 u_follow_i 就是上一节设计的编队跟踪控制项u_encircle_i 是针对围捕目标的控制项lambda_i 是每个智能体 i 的时变权重系数。lambda_i 1 时智能体完全执行编队跟踪lambda_i 0 时智能体完全进入围捕模式lambda_i 在0到1之间连续变化时两个目标同时起作用。理论上如果只用编队跟踪项智能体最终会在参考轨迹附近形成编队但不会真的包围目标。要形成围捕必须额外加一个限制条件各个智能体要按角度均匀分布在目标周围而且要保持一定的包围半径。这本质上是一个“包围圈形成问题”。我设计 u_encircle_i 时用的是角度间隔加距离约束的组合方式。每个智能体在极坐标下同时控制两个量到目标点的距离 r_i 收敛到期望包围半径 R以及与目标之间的夹角 theta_i 收敛到期望角度。这个做法很直观但在多目标场景下有一个细节要注意svs 个目标点可能会被同一个智能体同时“看中”这时候就要靠凸组合做过一层仲裁——每个目标的围捕控制项都算出来再以权值做凸组合。举个例子如果场景里有3个目标、6个围捕智能体每个智能体都会算出3个“我该往哪飞”的控制量分别是对3个目标的围捕需求。最终的控制量取凸组合u_encircle_i sum_{k1}^3 w_ik * u_target_k_i其中 w_ik 是智能体 i 对目标 k 的围捕权重。这个权重怎么定一个实用方法是根据智能体与目标的距离来定——距离越近权重越大距离越远权重越小。这就是最朴素的“就近围捕”策略在工程实现上非常稳定。2.4 稳定性与收敛性分析路线正式的研究报告里稳定性证明是绕不开的。这一部分我的做法是走 Lyapunov 方法。构造候选函数V(t) x_tilde^T (L B) x_tilde其中 x_tilde 是去掉了期望队形偏移和参考轨迹后的状态误差向量L是拉普拉斯矩阵B是牵制增益矩阵。这个函数本质上是“状态误差的加权二次型”在拓扑连通且至少存在一个牵制节点时(L B) 是正定矩阵。对 V(t) 求导之后代入控制协议可以推导出 V_dot(t) -alpha * x_tilde^T x_tilde 0于是系统渐近收敛。这里有个细节值得多说一句alpha 的取值取决于拉普拉斯矩阵的最小非零特征值。最小非零特征值越大alpha 越大收敛越快。所以设计通信拓扑时要尽量让拉普拉斯的代数连通度大这比单纯增加通信链路数量更有效。实战中我一般会先用 MATLAB 的 eig 函数算一遍拉普拉斯最小非零特征值如果发现收敛速度不达标优先考虑在拓扑上做调整——增加一两条关键的通信边往往比单纯加大控制增益更有效。3. 仿真场景设计与参数实操3.1 仿真场景配置光有理论推导是不够的仿真才是检验方案合理性最快的路径。我搭建的仿真环境是这样的智能体数量6架无人机记为 UAV1–UAV6目标数量2个地面移动目标记为 T1、T2参考轨迹一条预先规划的折线路径包含直线段和圆弧过渡期望队形初始为正六边形编队时变队形可以动态调整边长与朝向通信拓扑环形拓扑加两条对角链路保证代数连通度较高仿真时长120秒这里要特别说明一下为什么选6架无人机围捕2个目标。这个比例比较现实3架围1个目标既能形成闭合包围圈又有冗余度如果一个节点出现通信故障剩下2架虽然围捕姿态差点但还不会散架。3.2 关键参数整定过程控制增益的整定是仿真里最磨人的一步。我的参数调整逻辑是分步来第一步先把编队跟踪的增益 c 定下来。初始取 c 1.2跑一遍纯编队跟踪看编队能不能在5秒左右收敛到正六边形队形。如果收敛慢了就加大 c但有个上限c 太大系统会振荡特别是时变队形里有高频分量的时候。第二步定围捕控制的距离增益和角度增益。距离增益我取0.8角度增益取1.5。角度增益比距离增益大一些是有讲究的因为角度收敛比距离收敛难目标稍微移动角度误差就会被放大如果角度增益不足包围圈会拉得很“散”。第三步定加权系数 lambda 的切换逻辑。我采用一个指数型的过渡函数lambda_i(t) 0.5 0.5 * tanh( (R_engage - rho_i(t)) / delta )这个式子里的 rho_i(t) 是智能体 i 到最近目标的当前距离R_engage 是开始进入围捕状态的临界距离我设为 30 米delta 控制过渡区间的平滑程度取 5。智能体离得远时rho_i 远大于 R_engagetanh 趋近于 -1lambda 趋近0以编队跟踪为主接近目标时lambda 逐渐向1过渡围捕控制逐渐接管。关键是这个切换是连续的避免了控制指令跳变。还有个容易忽略的细节lambda 在每个智能体上的取值是不同的。离目标最近的智能体最早开始进入围捕模式离得远的还能保持编队飞行阵型靠近。这样真打起来前出的传感器节点已经开始探测目标细节后方编队节点的安全性也有保障。3.3 仿真结果判读跑完仿真后我重点看三个指标第一个是编队跟踪误差。定义是每个智能体相对期望位置的偏差的RMS值。新建的算法在纯跟踪阶段的RMS误差在0.3米以内接近目标进入混合阶段后会小幅上升因为控制目标变了但整体控制在0.8米以内这个量级对于10米级间距的编队来说形状保持得算可以了。第二个是围捕成功判定。我的判定条件是所有目标同时被不少于3个智能体形成的包围几何构型覆盖智能体与目标距离收敛到期望包围半径的±15%以内持续10秒以上。这个条件比较严格跑下来两个目标在65秒和73秒分别满足判定。智能体角度分布的均匀度也很重要。把6个智能体在目标周围的角度画成雷达图理想状况是近似均匀分布实际仿真结果中角度间隔偏差在±15度以内这是可接受的。第三个是指令连续性。把每个智能体的控制输入 u_i 画出来检查有没有跳变。做凸组合切换的好处在这块儿体现得最为明显——指令曲线是平滑过渡的没有出现传统的模式切换那种阶跃。4. 仿真复现与代码实现细节4.1 整体工程框架仿真代码我用 MATLAB 搭的主逻辑是一个循环迭代每一帧做四件事更新邻居信息、计算编队跟踪项、计算围捕项、做凸组合叠加。伪代码结构如下for t 0:dt:T_end % 1. 获取目标状态 target_positions get_target_positions(t); % 2. 计算编队一致性项 for i 1:N consensus_cmd 0; for j in neighbors(i) consensus_cmd c * a_ij * ((x_i - d_i(t)) - (x_j - d_j(t))); end tracking_cmd c * b_i * (x_i - d_i(t) - r(t)); u_follow_i(1:dim, i) consensus_cmd tracking_cmd; end % 3. 计算围捕控制项 for i 1:N u_encircle_i zeros(dim, 1); for k 1:M rho_ik norm(x_i - target_positions(:, k)); w_ik exp(-rho_ik / scale) / sum_over_targets(exp(-rho_ik / scale)); u_target_k compute_circumnavigation_cmd(x_i, target_positions(:, k), R_d); u_encircle_i w_ik * u_target_k; end end % 4. 凸组合融合 for i 1:N rho_i min(norm(x_i - target_positions)); lambda_i 0.5 0.5 * tanh((R_engage - rho_i) / delta); u_i lambda_i * u_follow_i(:, i) (1 - lambda_i) * u_encircle_i; end % 5. 状态更新 x x u * dt; end这段伪代码基本覆盖了核心逻辑。你写代码的时候注意u_pair 计算时要先把队形偏移和参考轨迹转成当前时刻的值如果目标轨迹本身是随时间变化的d_i(t) 和 r(t) 都要先按 t 算出来再参与一致性计算。4.2 compute_circumnavigation_cmd 怎么写这个函数是围捕算法的核心。我的实现逻辑是这样的在极坐标系下分别设计距离控制律和角度控制律。先算智能体相对目标的位置向量、距离 rho_k、视线角 phi_k。期望距离为 R_d期望角度要保证相邻智能体的角度差均匀。角度误差定义为 delta_phi phi_k - phi_d_i其中 phi_d_i 按照已知的队友角度动态计算。具体做法是对目标 k 的围捕先收集所有对该目标有兴趣的智能体的当前角度排序后找自己应该插入的期望位置也就是在已经形成的“角度轮廓”上填补最大间隙的位置。这是分布式任务分配中常用的思想——不需要谁当领导自然而然的形成均匀分布。距离控制项是u_rho k_rho * log(R_d / rho_k)这个 log 形式的控制律比线性比例项更好用靠近目标时控制增量更大远离时相对平缓不容易冲出包围圈。角度控制项是u_phi k_phi * (phi_d_i - phi_k)然后把两个标量控制量合成直角坐标系下的速度指令作为该目标对当前智能体产生的控制分量 u_target_k。4.3 仿真执行的几个经验点第一dt 的设置。我取 dt 0.05 秒也就是20Hz的控制频率。对这个规模的问题20Hz足够但如果你用了上面提到的 log 距离控制律当目标被围住后距离已经很小这时20Hz也有可能让控制量偏大建议做一次限幅把速度指令限制在最大速度的80%以内。第二关于目标运动模型。我给目标设置了随机转向模型每隔一段时间随机改变速度和航向。这里有一个“公平性”问题目标必须不能太机灵否则没有任何编队能围住也不能太笨否则围捕算法好坏就看不出来了。我的做法是目标的直线速度是智能体巡航速度的60%转弯半径受限。这个设置能比较客观地区分不同算法的优劣。第三关于仿真线程。大循环结构里 matlab 的 for 循环会让计算量集中建议把向量化做好。尤其是邻接矩阵的乘法用矩阵运算替代双层循环可以在同一个仿真框架下支撑到几十个节点。5. 常见问题与排查经验5.1 编队跟踪误差不收敛这是最常见的翻车现场。现象是前几秒编队还能大致维持后面误差越拉越大队形逐渐散开。我排查这类问题的顺序是先检查拉普拉斯矩阵。无向连通图对应的 L 的特征值是否只有一个0如果不只一个0说明图不连通某两个节点之间缺了一条链路导致两边各成体系。再检查牵制增益矩阵 B。如果 b_i 里全是对角元素、都为0那就没有一个节点知道参考轨迹整个编队相当于自由漂移永远不可能跟踪目标轨迹。至少要有一个节点的 b_i 0这是必要条件。最后检查期望队形偏移 d_i(t) 本身是否满足约束条件。如果 d_i(t) 的设计使得编队质心本身就不等于 r(t)那么这个系统在物理上就是不兼容的后面无论怎么调增益都白搭。5.2 围捕过程中队形发散这个现象通常是出现在 lambda 过渡到围捕控制为主的阶段。原因是编队一致性项被削弱得太快而围捕控制项给的角度指令和距离指令还没有协商好导致智能体各自往自己认为的期望位置飞整体队形瞬间散开。解决思路有两类。一类是让 lambda 的过渡更平缓把 delta 值调大比如从5调到15让两个控制模式的重叠时间拉长。另一类是在围捕控制项里加一个邻域角度一致性约束确保相邻智能体在角度上的变化是连续的不与编队约束冲突。实战里两个办法结合起来用效果最好。delta 调到10以上再加一个轻微的编队约束保持项整个过渡过程的震荡幅度能下降50%以上。5.3 目标动态变化导致的围捕失稳目标速度快、转向突然几个智能体原本已经把角度位置站好了目标一个急转所有智能体都得兜个大圈重新占位。这个问题的本质是角度误差在目标高速运动时被放大角度控制项又要强行修正容易引发超调。我的处理办法是引入“预测补偿”项。目标速度、目标航向都可估计那么下一个控制周期的期望角度可以在当前期望角度的基础上预判目标运动导致的偏移。具体说就是给角度控制项加一个前馈项与目标切向速度相关的分量这样智能体不是盲目追当前角度而是“瞄准目标下一秒的位置”。这个前馈做完之后围捕的收敛时间大概能缩短15%-20%。5.4 常见问题速查表现象可能原因排查方法编队误差不收敛通信图不连通 / 无牵制节点检查拉普拉斯特征值确认至少一个 b_i 0过渡阶段队形散乱lambda 变化过快delta 调大过渡时间延长围捕时角度反复跳动角度增益过大k_phi 减小观察是否出现振荡控制指令不光滑目标切换权重突变权重采用指数型平滑避免硬切换目标始终围不住目标速度设置过高压低目标直线速度到巡航速度的60%以下这张表是我做这个课题过程中沉淀下来的比论文里任何一段推导都值钱建议你在仿真调试时直接对照排查。5.5 一个容易被忽略的细节坐标系对齐这是多智能体仿真里最容易被忽视但最致命的问题。如果两个智能体的初始位置是分别生成的但各自用了不同的坐标基准比如一个用了经纬度转局部坐标另一个直接用了UTM坐标哪怕后面的控制协议再正确整个系统也会出现系统性偏差。我建议在仿真初始化时统一把主站的参考点设为原地坐标系的原点所有智能体都相对这个原点记录位置。凡是涉及到目标位置、参考轨迹的计算也全部在这个统一坐标系下进行。别看这是个细节我在实际项目里见过团队因为坐标系没对齐整整调了两周才发现问题不在算法在坐标基准。6. 从仿真走向实物平台的工程化考量研究的终点不能只停在仿真。这个方案要往实物平台上推有几个点是要额外留意的。第一个是通信延迟。仿真里默认信息是瞬时传输的但实物平台上无线通信的延迟动辄几十到上百毫秒尤其编队规模大了之后控制周期的刷新率会被拖累。我的建议是在协议里预留一个时延补偿项最朴素的做法就是控制律里加一个基于事件触发的机制——只在状态误差超过阈值时才触发通信而不是每个周期都全量广播。这个改动能显著降低通信负载。第二个是传感器噪声。仿真里位置数据是理想的实物里GPS在开阔地是米级精度室内定位可能稍微好一些但噪声依然存在。在仿真阶段提前把高斯噪声加进去会让算法鲁棒性地暴露问题比到现场再去排查高效得多。我的经验是噪声方差可以先从位置标准差的1%开始加逐步加大看系统在什么噪声量级下开始失稳这个曲线对后续工程很有价值。第三个是执行器饱和。无人机或无人车的物理速度是有上限的仿真里如果控制协议给出的速度指令超过执行范围系统会“卡住”并引发连锁反应。必须在控制律里加限幅同时把限幅之后的实际指令反馈回状态更新模块不能理想化地认为指令发了就一定能执行。第四个是故障与降级。编队中的节点可能在运行中掉线或者某个节点报错停摆。分布式方案相比集中式方案的优势在面对这类问题时会全面显现出来。实时监测虚拟领导者或者邻居节点的状态必要时把脱队的节点从邻接矩阵中剔除编队会自动收敛到剩下的集合这叫做“网络重构”。对围捕任务来说如果出现节点掉线围捕阵型会自动紧缩不至于彻底失败。7. 写在最后几个我自己的体会这个课题做下来我最深的感受是理论推导只完成了解决问题的第一半剩下的一半是在仿真和调试中完成的。凸组合这个数学工具形式上非常简洁但它真正的价值在于它把两个表面上“互相拉扯”的控制目标放在同一个可调节的权值谱系里。真正理解这一点需要反复在仿真中看队形是如何过渡的、看指令是如何平滑的而不是只看最后收敛的那张图。还有一个小技巧如果你要把这套框架往自己的平台迁移请一定先在纯数值仿真里把“边缘场景”测透。什么是边缘场景比如目标初始位置就在包围圈正中心比如两个目标靠得很近比如通信拓扑临时断了一条链路。这些极端情况恰恰是论文里不容易写进去、但实际工程里一定会碰到的。最后我想说的是编队跟踪与协同围捕本身是一个综合性强、挑战度高的研究方向学术上有得挖工程上有得做。如果这篇整理能帮你少走几个弯路、少掉几个坑那我花这些时间写它就值了。后续如果有新的尝试和发现我还会把更细的操作记录下来分享。