端口哈密顿框架:多智能体编队控制的能量视角与工程实践
1. 从“编队”到“能量”为什么选择端口哈密顿框架在无人机集群表演、自动驾驶车队协同或是水下机器人编队勘探这些场景里我们经常需要一组智能体Agent保持一个特定的几何队形。这个队形不是靠一个中央大脑发号施令而是希望每个智能体只和邻居“聊聊天”看看彼此的距离就能自发地、稳定地形成并维持这个形状。这就是“基于距离的编队控制”要解决的核心问题给定一组期望的智能体间距离设计一套本地控制律让系统能收敛到满足这些距离约束的几何构型。听起来很美好但魔鬼藏在细节里。传统的基于势函数的方法比如把距离误差的平方和当作一个“能量山”让系统往“山底”滚虽然直观但会遇到几个棘手的麻烦。首先这个“能量山”的底部即目标编队可能不止一个系统可能会收敛到一个镜像的、翻转的甚至是不期望的队形上。其次在动态过程中如何保证智能体不会互相撞上最后也是更本质的这套控制律设计出来系统的稳定性、收敛性证明往往比较繁琐需要构造复杂的李雅普诺夫函数并且对系统本身的物理特性如动力学模型利用不足。这时端口哈密顿Port-Hamiltonian, PH框架就显示出其独特的魅力了。你可以把它理解为一个为物理系统建模的“通用语言插座”。任何具有能量交换特性的系统机械的、电气的、液压的都可以用能量存储函数哈密顿函数 H、能量耗散结构、以及内部互联结构来描述。它的核心优势在于系统的稳定性由能量函数 H 的自然特性如有下界直接保证。在设计控制器时我们不是生造一个李雅普诺夫函数而是把控制器本身也设计成一个PH系统然后通过“能量整形”和“阻尼注入”这两个标准动作与受控对象进行互联。这样整个闭环系统依然是一个更大的PH系统其稳定性分析变得非常规整和模块化。对于多智能体编队问题PH框架提供了一个绝佳的视角将整个多智能体系系统视为一个由多个能量存储单元每个智能体的动能和势能通过通信网络互联而成的复杂能量网络。基于距离的编队误差可以被自然地嵌入到一个新的、包含队形信息的哈密顿函数中。通过设计控制器的互联与阻尼我们就能“塑造”这个总能量函数使其唯一的最小值点恰好对应我们期望的队形。这种方法不仅让稳定性证明变得优雅更重要的是它天然地保留了系统的物理结构使得诸如碰撞避免、执行器饱和、模型不确定性等问题可以在同一个框架下进行系统性的分析和处理。我最初接触PH框架时觉得它数学上很漂亮但有点抽象。直到在一个四旋翼无人机编队项目中实际应用才体会到它的好处。当我们需要在控制器中额外加入避障势垒时在PH框架下它可以直接作为一个额外的能量项添加到哈密顿函数中整个稳定性分析几乎不需要推倒重来。而在传统方法中这可能需要重新构造一个复杂的李雅普诺夫函数并小心翼翼地验证其负定性。2. 核心构建块多智能体系统的端口哈密顿建模要设计控制器首先得把被控对象——多智能体系统——用PH的形式描述出来。我们考虑一个由 N 个智能体组成的系统每个智能体的动力学模型可以写成一个标准的欧拉-拉格朗日形式。但今天我们换用PH这张“标准图纸”来重新绘制它。2.1 单个智能体的PH模型假设第 i 个智能体的状态由其广义坐标q_i例如位置和广义动量p_i来描述。其最简形式的PH模型可以写为[ ̇q_i ] [ 0 I ] [ ∂H/∂q_i ] [ 0 ] u_i [ 0 ] d_i [ ̇p_i ] [ -I -R_i] [ ∂H/∂p_i ] [ I ] [ I ]这里H_i(q_i, p_i) (1/2) p_i^T M_i^{-1}(q_i) p_i V_i(q_i)是智能体的哈密顿函数通常包括动能和势能。M_i是质量/惯性矩阵V_i是势能如重力势能。R_i是一个正定或半正定矩阵代表系统固有的阻尼如摩擦。u_i是我们施加的控制输入d_i是可能的外部扰动。这个矩阵方程清晰地分开了保守部分由反对称矩阵[0, I; -I, 0]描述的能量流动、耗散部分-R_i以及与外界的能量交换端口u_i和d_i。在实际的移动机器人或无人机中q_i可能就是其在二维或三维空间中的位置坐标(x_i, y_i, z_i)p_i M_i * v_i是其动量此时动能项就是熟悉的(1/2) v_i^T M_i v_i。这个模型的美妙之处在于其普适性无论是全驱动的控制维度等于状态维度还是欠驱动的系统如四旋翼都可以通过适当定义q_i和p_i纳入这个框架。2.2 多智能体系统的网络化互联单个智能体的模型只是零件。多智能体系统的“智能”体现在通信和交互上。我们用一个无向图G (V, E)来描述智能体间的通信拓扑其中顶点集V对应智能体边集E表示一对智能体可以相互感知或通信。在基于距离的编队控制中关键信息不是绝对位置而是相对位移。对于一条边(i, j) ∈ E我们定义边变量为z_{ij} q_j - q_i。我们的控制目标是让这些相对位移的范数即距离||z_{ij}||收敛到期望的值d_{ij}。如何将这种基于距离的约束融入到PH框架中呢秘诀在于定义一个编队能量函数H_f(z)。这个函数是所有边上的势能函数之和H_f Σ_{(i,j)∈E} ψ_{ij}(||z_{ij}||)。其中函数ψ_{ij}(·)需要精心设计使其在||z_{ij}|| d_{ij}时取得唯一的最小值并且在||z_{ij}|| - 0碰撞时趋向于无穷大从而天然地嵌入碰撞避免功能。一个经典的选择是ψ_{ij}(r) (1/4) (r^2 - d_{ij}^2)^2这个函数在r d_{ij}时为零在r0时为正并且其梯度在r0时也为零避免了在原点处的奇异点行为更友好。现在整个多智能体系统的总哈密顿函数可以看作是每个智能体自身哈密顿函数与编队势能函数之和H_total Σ_i H_i(q_i, p_i) H_f(z)。这里z是所有边变量的集合。系统的动力学就可以通过将这个总能量函数代入到每个智能体的PH结构方程中并考虑通过边变量z_{ij}产生的耦合来得到。这种耦合在PH框架下表现为智能体间通过通信图进行的“能量交换”。注意这里有一个关键点编队势能H_f是定义在边上的它的梯度即力会同时作用在边两端的智能体上大小相等方向相反沿着连线方向。这正好对应了牛顿第三定律是保证系统整体动量守恒如果无外部输入的物理基础。这也是PH框架物理直观性的一个体现。3. 控制器设计能量整形与阻尼注入有了被控对象的PH模型和编队能量函数控制器的设计目标就非常明确了设计一个控制律u_i使得闭环系统的行为看起来就像是具有我们期望的“总能量”H_d H_total或者其某个变形的一个无源系统并且通过注入阻尼来消耗掉动能使系统最终静止在能量最小点即目标编队。这个过程可以分解为两个标准步骤它们共同构成了PH控制的核心范式。3.1 能量整形塑造期望的“能量景观”能量整形的目的是改变系统的势能部分使其最小值点对应我们期望的系统行为。在我们的场景中编队势能H_f已经帮我们做到了这一点——它把期望的距离信息编码进了总能量函数H_total里。但是仅仅把H_f加进去还不够。因为智能体自身的动力学如惯性和原有的势能V_i(q_i)如重力可能会干扰编队行为。理想情况下我们希望智能体在编队过程中“感受不到”自身重力的影响或者更一般地说希望抵消掉那些可能阻碍编队形成的内部势能力。这可以通过反馈抵消来实现。考虑控制输入u_i由两部分组成u_i u_{i, es} u_{i, di}。其中u_{i, es}负责能量整形。一个常见的做法是让u_{i, es}去抵消掉智能体自身势能V_i(q_i)的梯度并施加由编队势能产生的力u_{i, es} -∂V_i/∂q_i - Σ_{j∈N_i} (∂ψ_{ij}/∂q_i)这里N_i是智能体 i 的邻居集合。第一项-∂V_i/∂q_i抵消了重力等内部势场使得智能体在控制层面变成“无重力”的。第二项-Σ (∂ψ_{ij}/∂q_i)正是编队势能H_f对智能体 i 产生的“引力”或“斥力”。这个力只依赖于邻居的相对位置z_{ij}完全符合分布式控制的要求——每个智能体只需要邻居的信息。通过这样的能量整形闭环系统的“有效”势能就只剩下了编队势能H_f。系统的总能量函数在动能部分不变的情况下变成了H_d Σ_i (1/2) p_i^T M_i^{-1} p_i H_f(z)。这个函数的最小点就是所有||z_{ij}|| d_{ij}且动量为零的状态即静止的目标编队。3.2 阻尼注入让系统安静下来能量整形确保了目标编队是系统的一个平衡点但并不能保证系统会收敛到那里。系统可能在这个平衡点附近来回振荡就像一个小球在碗底滚动。我们需要消耗掉系统的动能使其最终静止。这就是阻尼注入的目的。阻尼注入项u_{i, di}通常设计为与广义速度或动量负相关的形式u_{i, di} -K_{d,i} * M_i^{-1} p_i其中K_{d,i}是一个正定的阻尼增益矩阵。这一项的作用非常物理直观它就像一个与速度方向相反的阻力速度越大阻力越大不断消耗系统的动能。在PH方程中这一项会被加到耗散矩阵R_i上增大了系统的总耗散。将能量整形和阻尼注入结合起来我们就得到了完整的分布式控制律u_i -∂V_i/∂q_i - Σ_{j∈N_i} (∂ψ_{ij}/∂q_i) - K_{d,i} * M_i^{-1} p_i这个控制律结构清晰物理意义明确第一部分抵消内部势场第二部分根据与邻居的距离误差产生编队控制力第三部分提供速度阻尼以促进收敛。实操心得阻尼增益K_{d,i}的选择需要权衡。太大的阻尼会使系统响应迟钝收敛慢太小的阻尼则会导致在目标编队附近持续振荡。在实际机器人实验中我通常先根据机器人的大致质量/惯性设定一个标称值然后在实验中微调。一个实用的技巧是观察速度收敛曲线理想的阻尼应该使速度呈指数衰减没有超调或持续振荡。4. 稳定性分析与几何解释为什么上面设计的控制器就能保证全局渐近稳定地收敛到目标编队呢在PH框架下这个证明变得异常简洁和优雅。我们选取闭环系统的总哈密顿函数H_d Σ_i (1/2) p_i^T M_i^{-1} p_i H_f(z)作为李雅普诺夫候选函数。首先H_d显然是正定的动能项为正势能项H_f在目标编队处为零在其他地方为正且我们设计的ψ_{ij}保证了在距离为零时趋向无穷大避免了碰撞区域。然后我们计算H_d沿系统轨迹的时间导数Ḣ_d。将闭环系统的PH方程代入并利用PH结构矩阵的反对称和负定性质经过推导这里省略详细张量运算我们可以得到Ḣ_d - Σ_i (M_i^{-1} p_i)^T (R_i K_{d,i}) (M_i^{-1} p_i)由于R_i是系统固有阻尼正定或半正定K_{d,i}是我们注入的正定阻尼矩阵因此(R_i K_{d,i})是正定的。而(M_i^{-1} p_i)就是第 i 个智能体的广义速度v_i。所以Ḣ_d - Σ_i v_i^T (R_i K_{d,i}) v_i ≤ 0。这意味着总能量H_d随时间从不增加。根据拉萨尔不变集原理系统最终会收敛到满足Ḣ_d 0的最大不变集上。Ḣ_d 0要求所有智能体的速度v_i 0。当所有速度为零时从动量方程可以推导出此时编队势能的梯度也必须为零即∂H_f/∂q_i 0对所有 i 成立。而这正是目标编队构型需要满足的条件。这里有一个关键的几何前提我们假设期望的距离集合{d_{ij}}是可实现且刚性的。可实现意味着存在至少一个几何构型能满足所有这些距离约束。刚性则意味着这个构型在排除了整体平移和旋转有时还有缩放后是唯一确定的。如果编队不是刚性的比如一个四边形可以变形为平行四边形那么势能函数H_f就可能存在连续的能量谷即多个构型对应相同的距离集合系统可能收敛到其中一个但不一定是我们想要的形状。对于二维平面上的编队通常需要图是“刚性图”才能保证收敛到期望形状。这个稳定性证明过程完美展示了PH框架的优势稳定性直接由能量函数H_d的正定性和耗散项Ḣ_d的半负定性保证无需构造复杂的李雅普诺夫函数。控制器设计阻尼注入直接对应到增加耗散以稳定系统。5. 从理论到实践实现细节与避坑指南理论很优美但把代码烧进机器人的主板里又是另一回事。在这一部分我将分享几个在实际实现基于PH的编队控制器时必须处理的工程细节和常见陷阱。5.1 相对位置的获取与坐标系对齐控制器中最关键的一项∂ψ_{ij}/∂q_i计算时需要知道邻居的相对位置z_{ij} q_j - q_i。在仿真中这很简单直接读取全局坐标相减。但在真实机器人上这通常依赖于局部感知如视觉、激光雷达、UWB或通信。局部感知如果使用摄像头或激光雷达你得到的是在机器人自身坐标系下的邻居相对方位和距离。你需要用机器人自身的姿态偏航角将这个测量值转换到全局坐标系或一个公共的惯性坐标系下才能计算z_{ij}。姿态估计的误差会直接引入到控制力中。避坑点务必对姿态传感器IMU、磁力计进行充分的校准和滤波。在室内可以考虑使用动作捕捉系统提供真值在室外则依赖GPSIMU融合。一个简单的验证方法是让两个机器人静止检查通过各自传感器计算出的相对位置是否一致。通信交换位置如果机器人通过无线通信如Wi-Fi、ZigBee交换各自的全局位置估计例如来自GPS那么可以直接计算z_{ij}。但这要求所有机器人的时钟基本同步并且通信延迟要远小于控制周期。避坑点通信延迟和丢包是杀手。延迟会导致控制器使用的是“过去”的位置信息可能引发振荡甚至不稳定。必须在协议层和应用层加入时间戳和延迟补偿机制。一种简单策略是使用一阶保持器预测邻居的位置。个人经验在室内无人机项目中我们混合使用了UWB用于测距和粗略定位和视觉标记用于精确的相对位姿估计。UWB提供鲁棒的距离信息用于碰撞避免势函数视觉提供精确的相对向量用于编队控制。这种冗余设计大大提高了系统的可靠性。5.2 势函数的选择与数值稳定性我们之前举例用了ψ(r) (1/4)(r^2 - d^2)^2。它的梯度是ψ(r) r(r^2 - d^2)。这个函数在r0时梯度为零避免了奇异性这是优点。但它也有缺点当实际距离r远大于期望距离d时控制力ψ(r)会变得非常大因为r^3项可能导致控制输入饱和。因此在实际应用中经常使用修正的函数例如ψ(r) (1/2) (r - d)^2其梯度为ψ(r) (r - d)。这个线性梯度项行为更温和但它在r0时梯度为-d不为零。如果两个机器人初始位置非常接近会产生一个很大的斥力这有时反而是我们期望的避碰行为。但理论上在r0点势函数不可微不过在实际数值计算中只要r不精确等于零问题不大。更复杂的势函数可以考虑加入最大作用力饱和例如ψ(r) { k1*(r-d)^2, 当 |r-d| 较小时 k2*|r-d| 当 |r-d| 较大时 }这种分段函数可以在接近目标时提供精确控制在远离目标时提供有界的、稳健的牵引力。关键实现细节计算梯度。∂ψ_{ij}/∂q_i的具体计算是(∂ψ/∂r) * (∂r/∂q_i)。其中r ||z_{ij}||∂r/∂q_i -z_{ij}^T / r。所以最终∂ψ_{ij}/∂q_i ψ(r) * (-z_{ij}/r) -ψ(r) * e_{ij}这里e_{ij} z_{ij}/r是从 i 指向 j 的单位向量。这个公式非常重要它告诉我们控制力是沿着智能体连线方向的。代码实现提示务必处理r接近于零的情况即使势函数在零处梯度为零计算e_{ij} z_{ij}/r时也会出现除零错误。标准的做法是加一个极小值epsilon如1e-3进行钳制r_safe max(r, epsilon)。这虽然会引入微小误差但保证了数值稳定性。5.3 分布式实现与通信拓扑管理控制律u_i的计算只依赖于自身状态(q_i, p_i)和邻居的状态(q_j, p_j)这天然是分布式的。但在实际系统中你需要一个通信层来广播自身状态和接收邻居状态。状态广播每个机器人需要以固定的频率与控制频率相同或更高对外广播一个数据包至少包含机器人ID、时间戳、当前位置q_i、当前速度v_i或动量p_i。邻居列表维护每个机器人需要维护一个动态的邻居列表。这个列表可以基于固定的通信图如果网络是预设的也可以基于距离动态生成如只与一定范围内的机器人通信。动态邻居列表更灵活但引入了拓扑变化可能影响稳定性。拓扑变化的影响当机器人移动导致邻居关系改变有新的机器人进入范围或旧的邻居离开时势能函数H_f的定义域瞬间发生了变化。这相当于系统的能量函数发生了跳变。理论上只要跳变后的系统仍然满足刚性等条件并且阻尼足够系统最终仍会稳定。但瞬时的跳变可能会引起控制力的突变产生抖动。缓解策略在邻居关系变化时不要立即将新邻居的势能项ψ从0切换到满值。可以引入一个平滑的过渡函数在几百毫秒内逐渐增加其权重。同样对于离开的邻居其势能项也应平滑衰减到零而不是突然消失。5.4 执行器饱和与积分抗漂移我们推导的理想控制律可能计算出很大的力但真实机器人的电机或推进器有出力极限。必须对控制输入u_i进行限幅。u_i_sat saturate(u_i, u_max)饱和是一个非线性环节它会破坏PH框架下严格的稳定性证明。在实践中只要饱和不是持续发生的即大部分时间控制器在线性区间工作系统通常仍能稳定。但饱和会显著降低收敛速度甚至导致极限环。设计势函数时考虑有界梯度如前文所述是预防饱和的第一道防线。另一个常见问题是稳态误差。由于模型不准确如质量M_i估计不准、阻尼R_i估计不准或存在恒定的外部扰动如微弱但持续的风、水流系统可能无法精确收敛到||z_{ij}|| d_{ij}而是停留在一个有微小误差的平衡点。为了解决这个问题可以在控制律中引入积分项。但引入积分项需要格外小心因为它可能破坏PH结构并带来积分饱和等问题。一种兼容PH框架的方法是将积分状态也视为一个能量存储单元设计一个扩展的PH系统。更工程化的简单做法是在速度阻尼环之外叠加一个基于距离误差积分的弱修正项u_i_int -K_I * ∫ (||z_{ij}|| - d_{ij}) * e_{ij} dt然后将u_i_int加到总的控制输入中。增益K_I必须设置得非常小使其作用远慢于主阻尼环主要用来抵消常值偏差而不会引起振荡。6. 超越基础碰撞避免与拓扑优化基本的基于距离的PH控制器已经能实现编队但一个健壮的实用系统还需要处理两个关键问题如何主动避免智能体间的碰撞以及如何让通信拓扑更高效6.1 无缝集成碰撞避免势能PH框架处理碰撞避免非常优雅。我们只需在总势能函数H_f中为每一对智能体不仅仅是通信邻居添加一个排斥势能φ_{ij}(||z_{ij}||)。这个函数在距离小于一个安全阈值r_safe时急剧上升在距离大于r_safe时迅速衰减为零。例如可以使用著名的伦纳德-琼斯势函数的一种修正版本φ_{ij}(r) { k_c * ((1/r) - (1/r_safe))^2, 如果 r r_safe 0 如果 r r_safe }那么新的总势能函数变为H_f Σ_{(i,j)∈E} ψ_{ij}(||z_{ij}||) Σ_{i,j, i≠j} φ_{ij}(||z_{ij}||)注意排斥势能φ是对所有智能体对计算的或者至少是所有在感知范围内的智能体对而编队势能ψ只对通信边E计算。在控制器中我们只需要计算这个新势能的梯度并加到控制力上即可。由于整个框架是基于能量的排斥势能的加入只是改变了能量景观的形状在安全距离内制造了“高墙”。只要初始位置不在碰撞状态并且排斥力足够强系统就会自然地避开碰撞。稳定性分析依然成立因为新的H_f仍然是正定的在非碰撞区域。实现警告计算所有智能体对的排斥力复杂度是 O(N^2)对于大规模集群不可行。通常只计算一定距离内的智能体对或者使用空间哈希等算法来加速邻居搜索。此外排斥势函数的梯度在r很小时会非常大必须进行限幅或使用梯度有界的势函数以防止控制指令饱和。6.2 动态通信拓扑与能量感知调度固定的通信拓扑可能不是最优的。例如如果两个智能体距离已经很远且还在远离维持这条边上的编队约束可能浪费通信资源并产生不必要的控制力。我们可以让通信拓扑E动态变化。一个简单的启发式规则是基于距离只有当两个智能体之间的距离小于某个通信半径R_comm时它们才建立编队连接即计算ψ_{ij}。这带来了拓扑切换。如前所述切换时需要平滑过渡以避免力突变。更高级的方法是能量感知的拓扑优化。其思想是优先保持那些对当前编队误差贡献大的边即|ψ_{ij}|值大的边而暂时断开那些已经基本满足距离要求的边ψ_{ij} ≈ 0。可以周期性地评估每条边的“重要性”并动态地重建通信图。这需要在分布式环境下达成共识实现起来更复杂但可以显著提高大规模系统的效率和鲁棒性。在PH框架下讨论拓扑优化有一个好处我们可以分析拓扑切换时系统总能量H_d的变化。如果在新拓扑下系统的平衡点集包含了旧拓扑的平衡点并且切换过程是能量非增的或能量跳变很小那么系统的稳定性可以在某种意义下得到保持。这为设计安全的拓扑切换协议提供了理论指导。7. 仿真与实验验证从MATLAB到机器人操作系统理论是否可靠必须经过仿真和实验的检验。这里给出一个从仿真到实机部署的简要流程和注意事项。7.1 快速原型仿真MATLAB/Simulink对于算法验证MATLAB环境是首选。步骤通常如下建模定义智能体数量 N期望距离矩阵DD(i,j)d_{ij}通信邻接矩阵A。为每个智能体定义动力学参数质量 M阻尼 R。实现势函数与梯度编写函数psi(r, d)和psi_grad(r, d)。务必包含安全除数处理。集成动力学使用ODE求解器如ode45。在每一时间步根据当前所有q_i,p_i计算所有邻居对的相对距离r_ij。对每个智能体 i计算来自所有邻居 j 的编队控制力F_form -Σ ψ_grad(r_ij, d_ij) * e_ij。计算阻尼力F_damp -K_d * v_i。计算总控制力u_i F_form F_damp假设已抵消内部势能。根据PH动力学方程̇p_i u_i - R_i * v_i̇q_i v_i更新状态。可视化实时绘制智能体位置和连线观察编队形成过程。仿真调试技巧从简单开始先用2个、3个智能体验证基本逻辑。检查能量绘制总能量H_d和其导数Ḣ_d的曲线。H_d应单调递减或非增Ḣ_d应始终 ≤ 0。这是验证PH控制器实现是否正确的最直接方法。测试刚性尝试不同的期望距离集合观察非刚性图如一个非等腰梯形的四边形是否会导致形状不唯一收敛。7.2 向机器人操作系统迁移当仿真通过后下一步是移植到真实的机器人中间件如ROS。节点化为每个智能体或一个集中式仿真器创建一个ROS节点。消息定义定义自定义的ROS消息类型用于广播机器人状态ID, pose, velocity。订阅与发布每个节点订阅来自邻居节点的状态消息并发布自己的状态。使用tf库管理坐标系变换。控制循环在节点的定时回调函数中执行与仿真循环完全相同的控制律计算。关键是要保证控制周期稳定。执行器接口将计算出的力/力矩u_i通过机器人的底层驱动接口如通过mavros发送给PX4飞控或通过串口发送给电机驱动器转换为具体的执行器指令PWM值、油门等。实机部署的挑战时序ROS节点回调函数的执行时间可能抖动邻居消息的到达时间也不同步。这可能导致控制器使用非同时刻的状态信息。考虑使用message_filters中的 ApproximateTime 策略来同步多个邻居的话题或者在状态消息中携带高精度时间戳在控制器端进行插值预测。状态估计q_i和v_i来自状态估计如SLAM、视觉惯性里程计VIO、GPS-IMU融合。估计的延迟和噪声是主要误差源。需要在控制器中引入低通滤波但要注意滤波引入的相位滞后可能影响稳定性。安全至上必须实现一个独立的安全监视器看门狗。如果丢失了太多邻居信息或者自身状态估计异常或者控制指令超限应立即切换到紧急停止模式如悬停、降落。在我参与的一个基于ROS和Crazyflie无人机的项目中最大的教训就是消息同步。最初我们没有做时间同步直接使用最新收到的邻居消息结果在快速机动时编队出现了肉眼可见的抖动。后来实现了基于时间戳的线性预测性能得到了显著改善。另一个教训是势函数梯度限幅有一次因为两个无人机意外飞得太近排斥力计算溢出导致电机指令异常差点炸机。之后我们强制对所有控制力分量进行了硬限幅。