多机器人协同感知2——分布式优化理论学习

读论文 A tutorial on distributed optimization for cooperative robotics: from setups and algorithms to toolboxes and research directions。但这篇论文偏向约束耦合优化还有聚合优化

@article{testa2025tutorial,
  title={A tutorial on distributed optimization for cooperative robotics: from setups and algorithms to toolboxes and research directions},
  author={Testa, Andrea and Carnevale, Guido and Notarstefano, Giuseppe},
  journal={Proceedings of the IEEE},
  year={2025},
  publisher={IEEE}
}

本文重点介绍了两种更具扩展性、更符合实际机器人协同决策的框架:约束耦合优化(Constraint-Coupled Optimization)聚合优化(Aggregative Optimization)

定义:协同的目的是优化一个共同的性能指标,核心假设是每个智能体只负责优化问题的一小部分,并且只能与少数邻居agent进行通信.

1. 两大核心数学框架

  • 约束耦合优化 (Constraint-Coupled Optimization):
    • 问题模型: 每个机器人 $i$ 只关心并维护自己局部的决策变量 $x_i$ 和局部代价函数 $f_i(x_i)$,但所有机器人的变量被一个全局的约束条件(如共享资源限制)耦合在一起。公式表达为:$\min \sum_{i=1}^N f_i(x_i)$,受限于 $\sum_{i=1}^N g_i(x_i) \le 0$。
    • 适用场景: 机器人之间存在资源竞争或任务分配时非常有效。例如多机器人任务分配、多机器人取送货 (PDVRP) 以及共享电源的电池充电调度。
  • 聚合优化 (Aggregative Optimization):
    • 问题模型: 每个机器人的代价函数不仅取决于其局部变量 $x_i$,还取决于所有机器人变量的一个聚合量 $\sigma(x)$(例如团队位置均值)。公式表达为:$\min \sum_{i=1}^N f_i(x_i, \sigma(x))$。
    • 适用场景: 多机器人目标监视(既要靠近入侵者,又要兼顾团队整体重心不偏离保护目标)以及软约束下的资源分配。

专为约束耦合聚合场景量身定制的算法具有极大的优势,主要原因如下:

  • 存储维度独立: 每个机器人只需存储其自身的解估计值以及一些辅助变量(Instrumental Quantities),且这些存储量与系统中的机器人总数无关(保证了极佳的可扩展性)。
  • 通信开销极小: 机器人之间仅需要对低维的辅助变量(例如全局约束函数或聚合变量)进行一致性协商(Consensus),无需传输高维状态。
  • 状态解耦与隐私: 在整个迭代优化过程中,机器人始终无需知道彼此的局部解估计值

2. Notation

2.1 闭凸集 (Closed Convex Set)

“闭凸集”是数学(特别是凸分析和优化理论)中的一个核心概念。它是一个同时满足“闭集”(Closed Set)和“凸集”(Convex Set)性质的集合。

2.1.1 核心概念拆解

  • 凸集 (Convex Set): 直观上说,如果在一个集合里任意挑两个点,连接这两个点的直线段上的所有点都仍然落在该集合内部,那么这个集合就是凸集。
    • 数学定义: 设 $C$ 为实向量空间中的一个集合。若对于任意的 $x, y \in C$ 以及任意实数 $\theta \in [0, 1]$,都有 $\theta x + (1 - \theta) y \in C$,则称 $C$ 为凸集。
  • 闭集 (Closed Set): 直观上说,闭集包含了它自己所有的“边界点”(极限点)。
    • 数学定义: 如果一个集合包含其所有的极限点(即集合内部存在一个收敛数列,该数列的极限点也必定属于这个集合本身),那么它就是闭集。

2.1.2. 闭凸集的结合与实例

将两者结合起来,闭凸集就是一个既没有凹陷或空洞,又包含了自身所有坚硬外边界的几何体。

  • 典型例子: 包含表面的实心球体 $S = { x \in \mathbb{R}^n \mid |x| \le 1 }$ 是一个标准的闭凸集。
  • 反例 1(是凸集但非闭集): 不包含表面的实心球体 $S = { x \in \mathbb{R}^n \mid |x| < 1 }$。
  • 反例 2(是闭集但非凸集): 包含边界的实心“五角星”(连接星角的线段会跑到外面)。

2.1.3. 在优化问题中的核心地位

在许多现代优化算法(例如处理多机器人系统的约束耦合、ADMM,或位姿图优化时),通常要求可行域是一个闭凸集,因为它能保证以下完美性质:

  1. 投影的唯一性 (Projection Theorem): 如果将空间外的一个点投影到一个闭凸集上,集合上必定存在唯一的一个距离该点最近的点。
  2. 局部最优即全局最优: 在一个闭凸集上最小化一个凸的代价函数,不会陷入局部最优的死胡同。只要算法找到了局部最优解,在数学上它必定是全局最优解。

2.2 克罗内克积 (Kronecker Product)

克罗内克积,通常用符号 $\otimes$ 表示,是线性代数中两个矩阵之间的一种特殊乘法操作。与普通的矩阵乘法不同,克罗内克积对两个矩阵的尺寸没有任何要求

其核心思想是:用第一个矩阵中的每一个元素,去按比例缩放第二个矩阵,然后将所有结果拼接成一个更大的分块矩阵。

2.2.1. 数学定义

假设 $A$ 是一个 $m \times n$ 的矩阵,$B$ 是一个 $p \times q$ 的矩阵。那么它们的克罗内克积 $A \otimes B$ 就是一个尺寸为 $(mp) \times (nq)$ 的大矩阵:

\[A \otimes B = \begin{bmatrix} a_{11}B & a_{12}B & \cdots & a_{1n}B \\ a_{21}B & a_{22}B & \cdots & a_{2n}B \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1}B & a_{m2}B & \cdots & a_{mn}B \end{bmatrix}\]

2.2.2. 直观计算示例

假设 \(A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}\) 而 \(B = \begin{bmatrix} 0 & 5 \\ 6 & 0 \end{bmatrix}\) 其计算过程如下:

\[A \otimes B = \begin{bmatrix} 1 \cdot B & 2 \cdot B \\ 3 \cdot B & 4 \cdot B \end{bmatrix} = \begin{bmatrix} 0 & 5 & 0 & 10 \\ 6 & 0 & 12 & 0 \\ 0 & 15 & 0 & 20 \\ 18 & 0 & 24 & 0 \end{bmatrix}\]

2.2.3. 核心数学性质

  • 一般不满足交换律: $A \otimes B \neq B \otimes A$
  • 满足结合律: $(A \otimes B) \otimes C = A \otimes (B \otimes C)$
  • 转置性质: $(A \otimes B)^T = A^T \otimes B^T$
  • 混合乘积性质(最关键): $(A \otimes B)(C \otimes D) = (AC) \otimes (BD)$。该性质在解耦复杂系统时极其关键。

2.2.4. 工程与研究中的典型应用

在分布式优化、图论以及多智能体系统的数学建模中,克罗内克积常用于实现结构解耦

例如在多机器人系统中: 假设有 $N$ 个机器人,每个机器人的状态是 $d$ 维向量 $x_i \in \mathbb{R}^d$。网络拓扑用 $N \times N$ 的拉普拉斯矩阵 $L$ 描述。整个系统的全局交互矩阵可以写成:

\[L \otimes I_d\]
  • 左边的 $L$ 专门负责描述“谁和谁通信”(图的拓扑结构)。
  • 右边的单位矩阵 $I_d$ 专门负责描述“每个机器人自身的物理空间维度”。 这种表达方式极大地简化了全局位姿图优化或一致性控制协议的公式推导。

为什么克罗内克积能极大简化推导与代码实现?

为了直观理解克罗内克积的作用,我们以多机器人简化的位姿图优化为例,带入具体的数字进行推演。

假设我们有 $N=3$ 个机器人,在二维平面上移动,因此每个机器人的状态维度是 $d=2$(即 $x$ 坐标和 $y$ 坐标)。

  • 机器人 1 的状态:$x_1 = [x_1, y_1]^T$
  • 机器人 2 的状态:$x_2 = [x_2, y_2]^T$
  • 机器人 3 的状态:$x_3 = [x_3, y_3]^T$

为了进行全局优化,我们将它们拼接成一个 $3 \times 2 = 6$ 维的全局状态向量 $X$:

\[X = [x_1, y_1, x_2, y_2, x_3, y_3]^T\]

假设它们的通信拓扑是一条线:机器人1 <–> 机器人2 <–> 机器人3。描述这种网络结构的拉普拉斯矩阵 $L$ 是一个 $3 \times 3$ 的矩阵(对角线为连接数,非对角线有连接则为 -1,无连接则为 0):

\[L = \begin{bmatrix} 1 & -1 & 0 \\ -1 & 2 & -1 \\ 0 & -1 & 1 \end{bmatrix}\]

不用克罗内克积时:

在一致性控制或位姿图的后端优化中,我们经常要最小化机器人之间的状态差异。代价函数 $J$ 通常长这样:

\[J = \frac{1}{2} \sum_{i \sim j} \|x_i - x_j\|^2\]

如果不使用矩阵技巧,必须将这个公式按每个 $x$ 和 $y$ 坐标全部展开:

\[J = \frac{1}{2} \left[ (x_1 - x_2)^2 + (y_1 - y_2)^2 + (x_2 - x_3)^2 + (y_2 - y_3)^2 \right]\]

如果此时要对全局状态 $X$ 求一阶导(雅可比矩阵)或二阶导(海森矩阵 Hessian),需要对着这 6 个变量挨个求偏导。当机器人数量增至上百个,或者维度变成 3D(甚至 6D 位姿 SE(3))时,这种底层标量展开会导致极其恐怖的求和符号嵌套,推导论文或编写代码时极易出错。

用克罗内克积时:

现在我们来看看 $L \otimes I_2$ 到底生成了什么。其中单位矩阵为:

\[I_2 = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}\]

将 $L$ 和 $I_2$ 进行克罗内克积计算:

\[L \otimes I_2 = \begin{bmatrix} 1 \cdot I_2 & -1 \cdot I_2 & 0 \cdot I_2 \\ -1 \cdot I_2 & 2 \cdot I_2 & -1 \cdot I_2 \\ 0 \cdot I_2 & -1 \cdot I_2 & 1 \cdot I_2 \end{bmatrix} = \begin{bmatrix} 1 & 0 & -1 & 0 & 0 & 0 \\ 0 & 1 & 0 & -1 & 0 & 0 \\ -1 & 0 & 2 & 0 & -1 & 0 \\ 0 & -1 & 0 & 2 & 0 & -1 \\ 0 & 0 & -1 & 0 & 1 & 0 \\ 0 & 0 & 0 & -1 & 0 & 1 \end{bmatrix}\]

可以看出,这个 $6 \times 6$ 的矩阵,完美地把 $L$ 的拓扑结构“膨胀”到了每一个物理坐标维度上

在数学推导上(极度优雅): 有了 $L \otimes I_2$,前面冗长的代价函数 $J$,可以直接写成完美的二次型矩阵形式:

\[J(X) = \frac{1}{2} X^T (L \otimes I_d) X\]

一旦写成这个形式,矩阵微积分就变得极其简单:

  • 一阶导(梯度): $\nabla J = (L \otimes I_d) X$
  • 二阶导(海森矩阵 Hessian / 信息矩阵): $\nabla^2 J = L \otimes I_d$

在位姿图优化中极其关键的全局海森矩阵,直接就等于 $L \otimes I_d$。研究者不再需要去写复杂的求和公式或推导分块矩阵。

在代码实现上(极度高效): 如果不使用这个技巧,要在代码里构建这个稀疏海森矩阵,通常需要写两层嵌套循环:一层遍历机器人节点,一层遍历坐标维度,然后小心翼翼地计算索引并填入数值。这不仅容易产生越界或错位 Bug,运行效率也低下。 利用克罗内克积,只需调用线性代数库中的单行内置函数(将拓扑矩阵与维度单位矩阵相乘),即可瞬间生成全局稀疏矩阵,彻底消除了手动计算索引的烦恼。

3. 动态图论基础与双随机矩阵的物理意义(多机器人系统应用)

在多机器人系统(尤其是水下等存在恶劣通信环境的场景)的分布式优化与协同控制中,为了用严谨的数学语言描述时断时续、单向广播的通信网络,通常会引入动态图论的一系列核心概念。

3.1 动态图论基础符号解析

首先明确几个最基础的数学符号:

  • $\mathbb{I}$:代表节点集合。例如系统中有 3 个机器人,则 $\mathbb{I} = {1, 2, 3}$。
  • $t \in \mathbb{N}$:代表时间步。$\mathbb{N}$ 为自然数,说明系统是离散时间的($t=0, 1, 2…$)。
  • $\mathcal{E}^t$:代表在时间 $t$ 时的边集合(Edge Set)。即在这一时刻,哪些机器人之间建立了通信链路。
  • $\mathcal{G}^t$:代表在时间 $t$ 时的,由节点和边共同组成:$\mathcal{G}^t = (\mathbb{I}, \mathcal{E}^t)$。

3.1.1. 静态图与时变图 (Static vs. Time-varying Graph)

  • 静态图: 边集 $\mathcal{E}^t$ 不依赖于时间 $t$。机器人的通信网络拓扑固定不变。
  • 时变图: 通信网络随时间动态变化。受环境干扰(如洋流或障碍物),某一时刻存在连接,下一时刻可能断开。上标 $t$ 正是为了体现这种动态特性。

3.1.2. 无向图与有向图 (Undirected vs. Directed)

  • 无向图: 如果存在边 $(i, j)$,则必定存在反向边 $(j, i)$。通信是双向的(对讲机模式)。
  • 有向图: 通信是单向的(广播模式)。例如 1 号发射功率大,2 号能收到(存在边 $(1, 2)$),但 2 号回复 1 号收不到(不存在边 $(2, 1)$)。

3.1.3. 强连通 (Strongly Connected)

在一个静态有向图中,如果任意一对节点 $(i, j)$ 之间都存在一条有向路径,则该图是强连通的。

  • 物理意义: 网络中任意挑两个机器人,信息都能通过中间节点的一步步转发互相送达。

3.1.4. 联合强连通与 L-强连通 (Jointly & L-strongly Connected)

这是处理时变网络(如 CADMM 分布式优化)时最核心的假设条件。

  • 定义: 存在一个整数 $L \ge 1$,使得在任何长度为 $L$ 的时间窗口内,将所有时间步出现的边取“并集”构建的图 $(\mathbb{I}, \cup_{\tau=t}^{t+L-1} \mathcal{E}^\tau)$ 是强连通的。
  • 物理意义: 在水下等带宽极小的场景中,每一秒网络可能都是支离破碎的。但只要考察足够长的时间窗口 $L$,将这期间出现过的所有通信链路“叠加”在一起,构成的总网络是全连通的。这保证了信息最终能在整个团队中完全流通,是分布式算法收敛的基石。

3.2 为什么需要“双随机矩阵” (Doubly Stochastic Matrix)?

给定有向图 $\mathcal{G}^t$,可以用权重邻接矩阵 $\mathcal{A}^t \in \mathbb{R}^{N \times N}$ 来描述。矩阵中的元素 $a_{ij}$ 代表:在状态更新时,节点 $i$ 采纳节点 $j$ 信息的权重。

如果一个矩阵满足 $\mathcal{A}1_N = 1_N$ 并且 $1_N^\top\mathcal{A} = 1_N^\top$(即每一行的和为 1,每一列的和也为 1),则称为双随机矩阵。在平均一致性 (Average Consensus) 算法中,这不仅是数学上的要求,更是极其严谨的物理守恒定律。

3.2.1. 行和为 1:保证系统稳定不发散(凸组合)

核心逻辑:我(节点 $i$)的新状态,是怎么由大家的老状态拼凑出来的?

  • 物理意义: 行和为 1 保证了每个机器人在更新状态时,新数值稳稳地落在所有参考值的极值区间内。在数学上,这称为凸组合(Convex Combination)。
  • 反例: 如果行和大于 1,意味着系统在不断放大输入数值,经过几次迭代后,状态变量会呈指数级爆炸,算法彻底发散。

3.2.2. 列和为 1:保证系统信息总量守恒

核心逻辑:我(节点 $j$)的信息总量(权重),被分发给了网络里的哪些人?分发出去的总量是多少?

  • 物理意义: 这是 Average Consensus 能收敛到“真实平均值”的绝对前提。列和为 1 说明每个节点刚好把自己的 $100\%$ 影响力,不增不减地分配给了整个系统。
  • 反例(行和为 1,但列和不为 1): 假设矩阵 \(A = \begin{bmatrix} 0.8 & 0.2 & 0 \\ 0 & 1 & 0 \\ 0 & 0.8 & 0.2 \end{bmatrix}\) 在这个矩阵中,节点 2(第 2 列)的列和为 $2.0$。这意味着节点 2 保留了自己 $100\%$ 的权重,还额外凭空向节点 1 和节点 3 输出了 $100\%$ 的权重。 如果初始状态为 $x = [10, 20, 30]^T$(总和为 60,真实平均值为 20)。经过一次迭代:
    • $x_1 = 0.8(10) + 0.2(20) = 12$
    • $x_2 = 1(20) = 20$
    • $x_3 = 0.8(20) + 0.2(30) = 22$ 系统的新总和变成了 $12 + 20 + 22 = 54$。原本总量是 60,迭代一次蒸发了 6。由于总信息量不守恒,系统即使最终达成一致,也绝对不可能收敛到正确的平均值 20。

3.2.3 总结

在多机器人的局部通信与状态更新中:

  1. 行和为 1 让算法能收敛(保证数值稳定)。
  2. 列和为 1 让算法收敛到正确的值(保证全局信息总量守恒)。 这也是分布式算法中常利用 Metropolis-Hastings 等规则来强行构造双随机矩阵的根本原因。

4. 一致性优化和约束耦合优化的共性与区别

在多机器人协同建图(如位姿图优化,Pose Graph Optimization, PGO)的场景中,这两种优化框架虽然都旨在解决“去中心化多机协同”的问题,但它们在变量定义约束构建以及底层求解逻辑上有着本质的分歧。

为了严谨地说明这一点,我们假设有两个机器人 $A$ 和 $B$ 正在联合建图:

  • $x_A, x_B$:分别是机器人 A 和 B 的局部私有状态向量(仅包含各自的飞行轨迹和观测到的特征点)。
  • $f_A(x_A), f_B(x_B)$:分别是 A 和 B 仅依赖自身内部数据的局部代价函数(如视觉里程计的重投影误差)。
  • $\Delta z$:机器人在某一时刻观测到同一地标时,产生的跨机器人回环观测(Inter-robot Loop Closure)。

4.1 采用“一致性优化(Consensus Optimization)”建模 PGO

在一致性优化框架下,算法的根本设定是网络中的所有节点必须对一个公共的全局决策变量达成完全一致的共识。

  • 变量膨胀(全局拷贝):A 和 B 无法仅维护自身的私有状态,它们必须在各自的内存中维护一个完整的全局状态拷贝。设 $X_A$ 为 A 维护的全局地图估计(包含了 A 和 B 的所有状态),$X_B$ 为 B 维护的全局地图估计。
  • 目标函数里的回环:物理上的回环观测 $\Delta z$ 被直接揉进了每个人本地的全局代价函数里,作为一个残差项去最小化。
  • 数学建模:在这种架构下,真正的优化约束是人工强加的“计算约束”,即强迫 A 的全局认知和 B 的全局认知必须绝对相等。

    \[\min_{X_A, X_B} \left[ F_A(X_A) + F_B(X_B) \right]\] \[\text{subj. to } X_A = X_B\]

    (注:这里的 $F_A$ 和 $F_B$ 是包含了局部里程计误差以及多机回环残差 $| X_{A,t1} \ominus X_{A,t2} - \Delta z |_{\Sigma}^2$ 的全局目标函数)

  • 灾难性后果:每次迭代求解时,A 和 B 都要互相发送包含所有节点的完整地图估计。如果地图扩大到 10 万个点,在水下声学或光通信等受限带宽下,巨大的通信量会直接导致链路瘫痪。

4.2 采用“约束耦合优化(Constraint-Coupled Optimization)”建模 PGO

在约束耦合优化框架下,机器人各自独立维护局部决策变量,仅在共享资源或发生物理交互(如回环)的地方产生数学上的耦合限制。

  • 变量隔离(轻量化):A 只优化和维护私有状态 $x_A$,B 只优化和维护私有状态 $x_B$。在整个求解过程中,双方互不知道对方的具体解估计值。
  • 把回环当作耦合约束:物理上的回环观测 $\Delta z$,不再是目标函数里的误差惩罚项,而是直接变为了跨越两台机器人的明确的数学耦合约束。
  • 数学建模:目标函数完全解耦,系统仅通过物理观测定律进行约束连接。

    \[\min_{x_A, x_B} \left[ f_A(x_A) + f_B(x_B) \right]\] \[\text{subj. to } g(x_A, x_B) = 0\]

    (注:这里的耦合约束方程直接表达物理回环方程,例如 $g(x_A, x_B) = x_{A,t1} \ominus x_{B,t2} - \Delta z = 0$)

  • 极简通信与对偶求解:在求解此类问题时(如利用拉格朗日对偶分解),A 和 B 绝对不会交换完整的地图状态 $x_A$ 或 $x_B$。它们仅在对偶空间中,针对产生交集的那个具体回环节点,交换所谓的“拉格朗日乘子”(即虚拟弹簧拉力 $\lambda$)。这使得通信开销仅与“多机回环边的数量”成正比,而与“局部地图的总规模”彻底解耦。

4.3 局部物理回环与全局数学约束的矛盾

物理直觉上,A 和 B 仅在回环处相遇,理应只在回环处产生约束。但在一致性优化的数学世界里,$X_A = X_B$ 是一种“强行补齐”的暴力设定。要理解这个反直觉的机制,必须区分“物理世界的观测”和“数学内存里的变量”。

1. 变量的“暴力膨胀”:每个人都必须拥有“上帝视角” 在一致性优化的设定里,$X_A$ 和 $X_B$ 不再是它们各自的局部地图,而是它们各自脑海中的完整全局地图副本

  • A 的内存里:强制开辟了 \(X_A = [\hat{x}_{A}^{(A)}, \hat{x}_{B}^{(A)}]\),即“A 认为的 A 轨迹”和“A 认为的 B 轨迹”。
  • B 的内存里:强制开辟了 \(X_B = [\hat{x}_{A}^{(B)}, \hat{x}_{B}^{(B)}]\),即“B 认为的 A 轨迹”和“B 认为的 B 轨迹”。

2. 局部代价函数的“事不关己”:不懂的部分梯度为零 在 A 的局部目标函数 $F_A(X_A)$ 中,只有关于 \(\hat{x}_{A}^{(A)}\) 的里程计残差项。对于它没去过的 \(\hat{x}_{B}^{(A)}\) 区域,这部分的代价永远是 0,梯度也永远是 0。也就是说:A 脑子里虽然装着 B 的地图,但 A 对 B 的地图长什么样“毫无意见”。

3. $X_A = X_B$ 是如何运作的?(“互相抄作业”机制) 既然 A 对 B 的区域没意见(梯度为 0),而 B 对自己的区域有强烈的物理观测(梯度很大),当算法引入 $X_A = X_B$ 约束并开始网络迭代时,实际发生的是:

  • 针对非相交区域:B 算出自己的轨迹 \(\hat{x}_{B}^{(B)}\) 后发给 A。A 发现自己这部分梯度为 0,为了满足等式约束,A 只能乖乖把 B 的结果“抄”进自己的内存 \(\hat{x}_{B}^{(A)}\) 中。
  • 针对回环相遇点:双方都有传感器数据(都有非零梯度),意见产生分歧。此时一致性约束会作为“和事佬”,让双方在这个相交点上进行加权平均折中。

4.4 核心区别总结

比较维度 一致性优化 (Consensus Optimization) 约束耦合优化 (Constraint-Coupled Optimization)
核心优化变量 极其庞大:每个机器人都维护一份全局状态的完整拷贝 小巧轻量:每个机器人仅维护本地私有状态
目标函数 (Cost) 耦合的:包含了对全局交互节点的误差评估 解耦的:仅包含纯本地的私有观测误差
约束的本质 计算共识约束:必须满足 $X_A = X_B$(认知必须绝对一致) 物理交互约束:必须满足 $g(x_A, x_B) = 0$(闭环张量必须闭合)
通信交互内容 必须通过网络交换整个全局状态向量 仅需交换发生物理耦合位置的极少量拉格朗日乘子

总结: 虽然物理上只在极少的回环处发生了交互,但一致性优化为了数学公式的统一(所有节点必须求解同维度的全局 $X$),强迫网络去维护和传输大量的冗余零梯度信息。这就是为什么在多机 SLAM 后端中,它被视为一种会引发通信灾难的框架,也凸显了只在物理纠葛处建立小维度等式约束的约束耦合优化的巨大优势。

5. 从 1D 到 3D 空间:分布式 PGO 的严谨数学表达

为了将分布式优化理论真正应用于三维物理空间,我们需要在流形上严谨地描述 3D 位姿图优化(Pose Graph Optimization, PGO)。

5.1 3D 物理场景设定

假设有两台机器人 A 和 B 在执行建图:

  • 状态变量
    • A 的局部轨迹:$x_A = {T_{A1}, T_{A2}}$,其中 $T \in SE(3)$ 是包含 $3 \times 3$ 旋转矩阵和 $3 \times 1$ 平移向量的齐次变换矩阵。
    • B 的局部轨迹:$x_B = {T_{B1}, T_{B2}}$。
  • 局部里程计观测 (Odometry)
    • A 在 $T_{A1}$ 和 $T_{A2}$ 之间产生局部相对位姿观测 $U_A \in SE(3)$。
    • B 在 $T_{B1}$ 和 $T_{B2}$ 之间产生局部相对位姿观测 $U_B \in SE(3)$。
  • 跨机器人 3D 回环观测 (Loop Closure)
    • 在时刻 2,A 和 B 互相观测(或观测到同一水下地标),产生了一个 3D 相对位姿测量 $\Delta Z_{AB} \in SE(3)$,即 B 相对于 A 的 6-DoF 相对位姿。

5.2 采用“一致性优化 (Consensus Optimization)”构建 3D PGO

在一致性框架下,必须强迫网络中的每个节点维护一个等维度的全局信念(Belief)。

A 和 B 在内存中各自生成一个包含所有人 3D 位姿的全量全局地图估计:

\[X_A = \{T_{A1}^{(A)}, T_{A2}^{(A)}, T_{B1}^{(A)}, T_{B2}^{(A)}\}\] \[X_B = \{T_{A1}^{(B)}, T_{A2}^{(B)}, T_{B1}^{(B)}, T_{B2}^{(B)}\}\]

2. 目标函数与残差构建:

在 $SE(3)$ 空间中,我们使用李代数($\mathfrak{se}(3)$,即 $6 \times 1$ 的向量)来计算残差。回环残差被强行揉进 A 和 B 本地的全局代价函数中:

\[F_A(X_A) = \underbrace{|| \log( (T_{A1}^{(A)})^{-1} T_{A2}^{(A)} U_A^{-1} )^\vee ||_{\Sigma_A}^2}_{\text{A的局部里程计残差}} + \frac{1}{2} \underbrace{|| \log( (T_{A2}^{(A)})^{-1} T_{B2}^{(A)} \Delta Z_{AB}^{-1} )^\vee ||_{\Sigma_{LC}}^2}_{\text{本地计算的全局回环残差}}\]

3. 优化模型:

\[\min_{X_A, X_B} \left[ F_A(X_A) + F_B(X_B) \right]\] \[\text{subj. to } X_A = X_B\]

为了让 $X_A = X_B$ 成立,在每一次迭代中,A 和 B 都必须互相发送成百上千个完整的 $4 \times 4$ 变换矩阵。


5.3 采用“约束耦合优化 (Constraint-Coupled Optimization)”构建 3D PGO

在约束耦合框架下,我们将 3D 几何约束剥离出来,转化为联结两个独立系统的数学纽带。

1. 极简的本地状态:

A 仅维护 $x_A = {T_{A1}, T_{A2}}$,B 仅维护 $x_B = {T_{B1}, T_{B2}}$。

2. 纯净的局部代价函数:

代价函数仅包含本地数据,完全解耦:

\[f_A(x_A) = || \log( T_{A1}^{-1} T_{A2} U_A^{-1} )^\vee ||_{\Sigma_A}^2\] \[f_B(x_B) = || \log( T_{B1}^{-1} T_{B2} U_B^{-1} )^\vee ||_{\Sigma_B}^2\]

3. 构建李群上的 3D 耦合约束方程:

物理回环 $\Delta Z_{AB}$ 被转化为一个严格的等式约束 $g(x_A, x_B) = \mathbf{0}_{6 \times 1}$。

在李代数空间中,该约束表示为回环误差向量必须为零向量:

\[g(x_A, x_B) = \log\left( \Delta Z_{AB}^{-1} \cdot T_{A2}^{-1} \cdot T_{B2} \right)^\vee = \begin{bmatrix} 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \end{bmatrix}\]

4. 优化模型:

\[\min_{x_A, x_B} \left[ f_A(x_A) + f_B(x_B) \right]\] \[\text{subj. to } \log\left( \Delta Z_{AB}^{-1} \cdot T_{A2}^{-1} \cdot T_{B2} \right)^\vee = \mathbf{0}_{6 \times 1}\]

$6 \times 1$ 的李代数约束,算法会引入一个同样是 $6 \times 1$ 的拉格朗日乘子向量 $\lambda$(代表了 3 个方向的平移拉力与 3 个轴向的扭矩)。 A 和 B 只需要在每一次通信握手时,交换这 6 个浮点数(即在这个回环处各自感受到的“空间拉扯力”),然后在本地的高性能计算节点上自行更新庞大的位姿图。这实现了计算在本地,仅在约束的边界(回环处)进行极低带宽通信的设计。

6. 求解约束耦合优化问题

6.1 分布式对偶分解

约束耦合问题的对偶问题具有一致性优化(Consensus Optimization)的结构,在 [98] 中,提出了一种基于对偶问题分布式次梯度上升的分布式算法。

6.1.1. 数学建模与可分离性

给定约束耦合问题 $\min \sum f_i(x_i)$ 受限于 $\sum g_i(x_i) \le 0$,引入拉格朗日乘子 $\mu \in \mathbb{R}_+^S$,构建拉格朗日函数:

\[L(x,\mu) = \sum_{i=1}^N \left( f_i(x_i) + \mu^T g_i(x_i) \right)\]

利用该函数在原变量 $x$ 上的可分离性,对偶函数可以被完美拆解为各个机器人局部函数的纯加和:

\[\varphi(\mu) = \min_{x_1 \in X_1, \dots, x_N \in X_N} L(x, \mu) = \sum_{i=1}^N \left( \min_{x_i \in X_i} L_i(x_i, \mu) \right) = \sum_{i=1}^N \varphi_i(\mu)\]

最终,原问题转化为求解对偶问题的最大值(即通过不断提升拉格朗日乘子,来逼近原问题的最优解下界):

\[\max_{\mu \ge 0} \sum_{i=1}^N \varphi_i(\mu)\]

思考:对偶的含义是什么,为什么对偶后变成了max问题?

对偶的物理含义(视角的转换)

在优化理论中,“对偶 (Duality)”指的是看待同一个问题的两种不同视角:

  • 原问题 (Primal Problem):核心变量是 $x$(动作/策略)。我们在满足一堆物理约束条件(如 \(\sum g_i(x_i) \le 0\))的前提下,寻找最优的决策变量 $x$ 来让总代价最小。

  • 对偶问题 (Dual Problem):核心变量是 $\mu$(影子价格/惩罚力度)。数学家发现处理带硬约束的 $x$ 太难了,于是通过引入拉格朗日乘子 $\mu \ge 0$,把硬约束变成一种“罚款”放入了拉格朗日函数中。在这个新视角下,我们不再直接盯着 $x$ 看,而是把注意力转移到了乘子 $\mu$ 上。因为彻底切换了研究的主体(从 $x$ 变成了 $\mu$),所以新构建的问题被称为原问题的“对偶问题”。

为什么原问题是求 $\min$,对偶问题却变成了求 $\max$?

这背后隐藏着著名的弱对偶定理 (Weak Duality),我们可以通过“寻底与铺地板”的过程来直观理解:

  • $\varphi(\mu)$ 是一个“下界 (Lower Bound)”:当你固定了一个惩罚力度 $\mu$ 后,让所有机器人各自去寻找能让拉格朗日函数最小的策略,算出来的最小值就是对偶函数 $\varphi(\mu)$。数学上严格证明了:无论你取什么合法的 $\mu \ge 0$,算出来的 $\varphi(\mu)$ 永远小于或等于原问题的真实最小代价。打个比方,原问题的真实最小代价是山脉中“最深的谷底”,而 $\varphi(\mu)$ 就像是你拿着 $\mu$ 这块木板,在谷底的下方“铺了一层地板”。这层地板永远在真实谷底的下方。

  • 逼近谷底必须“升起地板”:既然 $\varphi(\mu)$ 永远是一个下界,那么对于工程求解来说,什么样的下界才最有用?当然是越高越好、越接近真实谷底越好的下界

因此,这形成了一个极其优雅的逻辑闭环:

  1. 内部的 $\min_x L(x, \mu)$ 是在给定 $\mu$ 时“寻找当前罚款规则下的最低代价”。
  2. 外部的 $\max_{\mu \ge 0} \varphi(\mu)$ 是在所有可能的下界中“寻找最高的那层地板”,从而从下方无限逼近真实的最小代价。这就是为什么对偶问题最终呈现为一个最大化($\max$)问题。

6.1.2. 算法伪代码

以下是机器人 $i$ 视角下的分布式对偶分解算法:

初始化: $x_i^0 \in X_i$, $\mu_i^0 \in \mathbb{R}_+^S$。

对于 $t=0, 1, \dots$ 执行:

  1. 协商对偶变量:
\[v_i^t = \sum_{j \in \mathcal{N}_i^t} a_{ij}^t \mu_j^t\]
  1. 局部原变量更新:
\[\hat{x}_i^{t+1} \in \text{arg}\min_{x_i \in X_i} L_i(x_i, v_i^t)\]
  1. 局部对偶变量更新:
\[\mu_i^{t+1} = \text{arg}\max_{\mu_i \ge 0} \left\{ g_i(\hat{x}_i^{t+1})^T \mu_i - \frac{1}{2\gamma^t} ||\mu_i - v_i^t||^2 \right\}\]
  1. 原变量静默恢复:
\[x_i^{t+1} = x_i^t + \frac{\gamma^t}{\sum_{r=0}^t \gamma^r} (\hat{x}_i^{t+1} - x_i^t)\]

结束循环

6.1.3. 核心步骤与公式深度解析

步骤 1(对偶空间的一致性)

公式 \(v_i^t = \sum_{j \in \mathcal{N}_i^t} a_{ij}^t \mu_j^t\) 是一个加权平均过程。注意,邻居集合 \(\mathcal{N}_i^t\) 包含机器人 \(i\) 自己(自环),且权重矩阵的对角线元素 \(a_{ii}^t > 0\)。这使得机器人在本地乘子估计和邻居传来的乘子估计之间求折中,从而在对偶变量 $\mu$ (即共享资源的影子价格)上达成全网共识。

步骤 2(解耦的极简通信):机器人 $i$ 利用协商好的乘子 $v_i^t$,在本地闭门求解最小化问题,得到临时状态 $\hat{x}_i^{t+1}$。在此过程中,机器人之间绝不交换任何关于局部状态 $x_i$ 的信息。在多机协同 SLAM 等场景中,通信量仅与低维的乘子 $\mu$ 相关,完美避开了高维状态(如大尺度地图、海量特征点)的传输灾难,隐私性也得到了天然的保护。

步骤 3(次梯度上升):由于对偶问题是一个最大化问题,此处对乘子执行梯度上升操作。公式中的二次惩罚项

\[\frac{1}{2\gamma^t} \|\mu_i - v_i^t\|^2\]

用于限制单次更新的步长,防止乘子更新过冲导致系统发散。

步骤 4(原变量静默恢复):公式中的 $\gamma^t$ 为第 $t$ 次迭代的步长(又称学习率,理论上要求满足 $\sum \gamma^t = \infty$ 且 $\lim_{t \to \infty} \gamma^t = 0$ 以确保收敛)。由于次梯度法在接近最优解时会剧烈震荡,直接使用 $\hat{x}_i^{t+1}$ 会导致系统无法稳定。因此,利用衰减的步长 $\gamma^t$ 作为权重,对历史所有的临时解进行加权滑动平均计算得到最终的 $x_i^{t+1}$,以此来平滑震荡并强制系统收敛(这一过程称为 Primal Recovery)。

上述方法只交换拉格朗日乘子,但对于多机协同SLAM过程来说是不合适的。纯理论的分布式对偶分解在拉格朗日函数是线性的情况下,确实可以完美解耦,实现“零位姿交换”。但在实际的 SLAM 系统中,位姿处于高度非凸的 $SE(3)$ 流形上。如果直接裸跑上述算法,次梯度法会在非凸流形上疯狂震荡甚至发散。

为了把发散的系统强行按住,SLAM 学者们引入了 ADMM(交替方向乘子法)。ADMM 的核心操作是在拉格朗日函数中强行加入了一个二次惩罚项(Augmented Lagrangian)

\[L_{ADMM} = f(x) + \mu^T(x_A - x_B - \Delta z) + \frac{\rho}{2} || x_A - x_B - \Delta z ||^2\]

这个 $\frac{\rho}{2} || x_A - x_B - \Delta z ||^2$ 就像一根极其强力的物理弹簧,死死拉住 A 和 B 的回环节点,让它们迅速收敛。

但代价是什么?

代价就是,当把这个平方项展开时,必然会出现一个交叉相乘的项:$-\rho x_A^T x_B$。

这就形成了数学上的“死锁”:

  • 当机器人 A 想要在本地用 CPU 最小化自己的目标函数时,公式里死死地嵌着一个 $x_B$。
  • 如果 A 不知道 B 当前的位姿 $x_B$ 到底在哪,A 的求导公式里就包含未知数,根本算不下去!

最终的工程折中方案: 因此,对于多机协同 SLAM (DPGO) 来说,纯靠交换拉格朗日乘子是走不通的。实际的分布式后端交互协议必须打破绝对的物理隔离,做出如下工程妥协:

  1. 交换拉格朗日乘子 $\mu$:用于协调全局的受力平衡(线性约束部分)。
  2. 交换公开/边界位姿(Public Poses):机器人必须把产生回环的那个节点的位姿发送给对方,因为对方需要把这个具体数值代入交叉项 $-\rho x_A^T x_B$ 中,从而解除死锁,完成本地求解。

6.2 分布式原分解 (Distributed Primal Decomposition)

与对偶分解(用“价格”去软性限制总量)不同,原分解的本质是直接对有限的物理资源进行“切分”,并在网络中讨价还价。 它能绝对保证在算法的每一步,全局的物理约束都不会被打破。

为了直观理解这套复杂的数学推导,我们设定一个具体的物理场景:“多机器人抢通信带宽”

假设有一个由 2 台机器人(A 和 B)组成的团队,在执行任务:

  • 全局物理红线 ($b$):通信网络的总带宽只有 100 kbps。如果两台机器人的总发包量超过 100 kbps,网络就会瘫痪。

  • 机器人 A 的任务 ($f_A$):正在进行高分辨率建图,极度渴望带宽。给它的带宽越多,它的建图误差(代价 $f_A$)下降得越快。

  • 机器人 B 的任务 ($f_B$):只是偶尔发送一下自身的电池电量和坐标,对带宽需求极低。

6.2.1 第一阶段:原分解的基本框架

首先,系统给这 100 kbps 的总带宽强行切一刀,引入分配变量 $y_i$。比如初始时平分:$y_A = 50$,$y_B = 50$。

底层子问题

\[p_i(y_i) \triangleq \min_{x_i \in X_i} f_i(x_i) \quad \text{subj. to } g_i(x_i) \le y_i\]
  • 物理映射:系统给机器人 A 下发死命令:“你当前的带宽配额是 \(y_A = 50\) kbps”。A 只能在这个配额限制下(\(g_A(x_A) \le 50\)),寻找最优的采样率 \(x_A\),使自己的建图误差最小。算出的最小误差值就是 \(p_A(50)\)。

高层主问题(网络上的讨价还价)

\[\min_{y_1, \dots, y_N} \sum_{i=1}^N p_i(y_i) \quad \text{subj. to } \sum_{i=1}^N y_i = b\]
  • 物理映射:在宏观层面上,网络不关心底层数据怎么压缩,只负责重新切分带宽 \(y_i\)。目标是让全网的“总建图误差”降到最低,同时死守总带宽等于 100 kbps 的红线(\(\sum y_i = 100\))。

6.2.2 第二阶段:混合整数问题 MILP(公式 20 - 22)

现实中,决策往往是非黑即白的。假设 \(x_i\) 不是连续的采样率,而是“传或者不传”(只能取 0 或 1),这就是混合整数规划(MILP)。

公式 (20):残酷的物理现实

\[\min \sum_{i=1}^N c_i^\top x_i \quad \text{subj. to } \sum_{i=1}^N A_i x_i \le b, \quad x_i \in X_i\]
  • 物理映射:我们要决定每个人是传还是不传,使得总误差最小,且总带宽不超过 100 kbps。但由于 0 或 1 没法求导,网络无法进行讨价还价。

公式 (21):算法的“自欺欺人”(凸松弛 + 安全余量)

\[\min \sum_{i=1}^N c_i^\top x_i \quad \text{subj. to } \sum_{i=1}^N A_i x_i \le b - \sigma, \quad x_i \in conv(X_i)\]

为了让算法跑起来,我们进行两项“自欺欺人”的操作:

  1. \(conv(X_i)\)(凸松弛):假装决策是连续的,允许机器人算出 $x_i = 0.6$(即“假装我传 60% 的数据”)。

  2. \(b - \sigma\)(预留安全余量):因为最后肯定要从 0.6 恢复成 1(整数跳变会突然耗费大量带宽),为了防止最后跳变时网络瘫痪,提前扣留一部分“安全带宽 \(\sigma\)”。现在大家只能去抢 95 kbps 的带宽(\(b - \sigma\))。

公式 (22):在假想世界中求代价

\[p_i(y_i) = \min_{x_i} c_i^\top x_i \quad \text{subj. to } A_i x_i \le y_i, \quad x_i \in conv(X_i)\]
  • 物理映射:机器人在允许出现小数的假想世界里,根据自己分到的配额 \(y_i\),计算最优解。

6.2.3 拉格朗日乘子 $\mu_i$ 到底从哪来?

在算法 2 中,求解步骤:

\[\min_{x_i, v_i} \quad c_i^\top x_i + M v_i\] \[\text{subj. to } \quad \mathbf{\mu_i :} \quad A_i x_i \le y_i^t + v_i 1\]

这里的 \(\mu_i\) 根本不是我们通过某个代数公式(加减乘除)自己算出来的,它是底层凸优化求解器(如 Gurobi、CVXPY 等)在计算完毕后,自动“吐出来”的副产物(Dual Variable)

  • 符号 : 的含义:这是一种学术约定缩写。意思是:“我在调用求解器解决这个 $\min$ 问题时,请把这个特定的约束条件所对应的影子价格(Shadow Price)提取出来,命名为 $\mu_i$”。

  • 物理意义(饥渴度):\(\mu_i^t\) 代表“这堵约束墙把我卡得有多难受”。如果 A 分到的配额 \(y_A^t\) 极小,求解器极其痛苦,算出的 \(\mu_A^t\) 就会非常大(比如 10,代表极度渴望带宽);如果 B 的配额绰绰有余,\(\mu_B^t\) 就是 0(毫无感觉)。

拿到各自的“饥渴度” \(\mu_i^t\) 后,网络就会执行“劫富济贫”(即算法 2 的 Update 步骤):

\[y_i^{t+1} = y_i^t + \alpha^t \sum_{j \in \mathcal{N}_i} (\mu_i^t - \mu_j^t)\]

因为 A 的饥渴度(10)远大于 B(0.1),公式括号内为正,网络就会自动把 B 的带宽配额扣掉一点,转移给 A(\(y_A\) 增加,\(y_B\) 减少)。

6.2.4 第三阶段:强制变现与安全保底

公式 (23):强行恢复物理现实 (lex-min)

\[\text{lex-min } \rho_i, \xi_i, c_i^\top x_i \quad \text{subj. to } \dots A_i x_i \le y_i^{T_f} + \rho_i 1\]
  • 物理映射:网络讨价还价结束。机器人 A 最终分到了 $y_A = 70$ kbps 的配额。但 70 kbps 只够传 0.7 张图。物理世界不允许传 0.7 张,lex-min(字典序最小化)强制 A 在合法的整数(0 或 1)里选一个。为了从 0.7 跳变到 1,A 使用松弛变量 $\rho_i$,向系统借用了一开始预留的“安全余量 \(\sigma\)”,从而在不导致物理断网的前提下,安全地恢复出了整数策略。

公式 (24):算法不崩溃的保底条款

\[\zeta \triangleq \min \left[ b - \sigma - \sum_{i=1}^N A_i \hat{x}_i \right] > 0\]
  • 物理映射:这是算法运行前的最后一道保险。意思是:就算我们把总带宽缩水了 \(\sigma\)(只剩 95 kbps),在这个残破的网络里,一定还能找出一套最保守的合法整数方案 \(\hat{x}_i\)(比如大家都不发高分辨率图),使得总消耗不仅小于 95 kbps,还能抠出一点盈余 \(\zeta > 0\)。如果没有这条退路,系统可能一上来就发现无法生存,直接报 Infeasible 崩溃。

6.3 对偶分解法和分布式原分解法的区别

6.3 对偶分解法和分布式原分解法的区别

从数学公式的底层逻辑来看,这两种方法代表了解决约束耦合问题的两种截然不同的“拆解哲学”:一个是软性罚款,一个是硬性配额。

针对全局约束耦合问题:

\[\min_{x_1, \dots, x_N} \sum_{i=1}^N f_i(x_i) \quad \text{subj. to } \sum_{i=1}^N g_i(x_i) \le b\]

它们的本质区别体现在以下四个维度:

1. 约束处理方式:松弛 (Relaxation) vs 切分 (Allocation)

  • 对偶分解(引入统一定价 $\mu$):破坏了原有的约束墙,将 \(\sum g_i(x_i) \le b\) 乘以一个惩罚单价 $\mu$,塞进目标函数里变成惩罚项。

    局部目标函数为:

    \[L_i(x_i, \mu) = f_i(x_i) + \mu^T g_i(x_i)\]

    (直觉:随便越界,只要付得起统一的罚款 $\mu$)

  • 原分解(引入分配变量 $y_i$):坚守约束墙,将总额度 $b$ 直接切分为 $N$ 份 $y_i$ 下发给每个机器人。

    局部约束为:

    \[g_i(x_i) \le y_i \quad \text{其中 } \sum y_i = b\]

    (直觉:绝对不能超过分给你的配额 $y_i$)

2. 底层子问题:求解目标不同

  • 对偶分解的子问题(已知 $\mu$,求 $x_i$)

    \[\min_{x_i} \left( f_i(x_i) + \mu^T g_i(x_i) \right)\]

    机器人 $i$ 把乘子 $\mu$ 当作已知常量,算出局部最优决策 $x_i$。

  • 原分解的子问题(已知 $y_i$,求 $x_i$ 和 $\mu_i$)

    \[p_i(y_i) = \min_{x_i} f_i(x_i) \quad \text{subj. to } g_i(x_i) \le y_i\]

    机器人 $i$ 把配额 $y_i$ 当作已知边界,算出 $x_i$,同时求解器会在这个硬约束上逼出一个局部的拉格朗日乘子 $\mu_i$(资源饥渴度)。

3. 高层主问题:网络通信在交换什么?

  • 对偶分解的主问题(调整统一价格)

    \[\max_{\mu \ge 0} \sum_{i=1}^N \varphi_i(\mu)\]

    网络中流通的是乘子 $\mu$。如果总消耗超标,就统一提高罚款单价 $\mu$,逼迫大家缩减消耗。

  • 原分解的主问题(重新分配配额)

    \[\min_{y_1, \dots, y_N} \sum_{i=1}^N p_i(y_i) \quad \text{subj. to } \sum_{i=1}^N y_i = b\]

    网络中流通的是各自的饥渴度 $\mu_i$。根据饥渴度差值,进行“劫富济贫”,把配额 $y_i$ 转移给极度渴望资源的机器人。

4. 物理安全性:数学上的可行性 (Feasibility)

  • 对偶分解的隐患:在任意中间迭代 $t$ 时,临时解 $x_i^t$ 大概率超标(\(\sum g_i(x_i^t) \not\le b\))。它不保证物理安全,直接上机可能会导致系统崩溃。
  • 原分解的绝对安全:在任意中间迭代 $t$ 时,本地严格满足 \(g_i(x_i^t) \le y_i^t\),且 \(\sum y_i^t = b\)。因此必然有 \(\sum g_i(x_i^t) \le b\)。它在数学上做到了有限时间可行性 (Finite-time feasibility),无论何时强行终止算法,输出的解都绝对安全。

7. 求解聚合优化问题

聚合优化(Aggregative Optimization)解决的是“如何控制机器人群体的宏观形态(如编队质心、网络覆盖面),同时兼顾个体局部目标”的问题。其标准数学模型为:

\[\min_{x_1, \dots, x_N} \sum_{i=1}^N f_i(x_i, \sigma(x)) \quad \text{subj. to } x_i \in X_i\]

其中,$\sigma(x) \triangleq \frac{1}{N} \sum_{i=1}^N \phi_i(x_i)$ 是全网决策变量的宏观聚合量(例如群体的几何质心)。


7.1 投影聚合追踪 (Projected Aggregative Tracking)

该算法基于投影梯度下降法,并巧妙地引入了“动态追踪器”来弥补去中心化网络中全局信息的缺失。

7.1.1 核心算法公式

在每次迭代 $t$ 中,机器人 $i$ 执行以下更新:

  1. 计算候选步(梯度下降与投影)

    \[\tilde{x}_i^t = P_{X_i} \left[ x_i^t - \gamma \left( \nabla_1 f_i(x_i^t, s_i^t) + \nabla \phi_i(x_i^t) y_i^t \right) \right]\]
  2. 保守滑行

    \[x_i^{t+1} = x_i^t + \delta (\tilde{x}_i^t - x_i^t)\]
  3. 动态追踪器更新(打听 + 上报增量)

    \[s_i^{t+1} = \sum_{j=1}^N a_{ij} s_j^t + \phi_i(x_i^{t+1}) - \phi_i(x_i^t)\] \[y_i^{t+1} = \sum_{j=1}^N a_{ij} y_j^t + \nabla_2 f_i(x_i^{t+1}, s_i^{t+1}) - \nabla_2 f_i(x_i^t, s_i^t)\]

7.1.2 物理映射与深度解析

  • 追踪器:因为无法纵观全局,每架无人机在本地脑海中维护两个追踪变量:

    • $s_i^t$:我猜测的当前“全队质心位置”

    • $y_i^t$:我猜测的“全队为了让质心靠近 VIP 而产生的全局拉力”

  • “自私”与“大局”的博弈(梯度计算)

    • $\nabla_1 f_i$ 是“自私的拉力”(我为了盯住敌机,想往哪飞)。

    • $\nabla \phi_i \cdot y_i^t$ 是“大局的拉力”(我掂量一下我飞这一步会不会导致编队质心偏离 VIP,从而让队友难受)。两者相加决定了最终的飞行向量。

  • 动态追踪的精髓:走完一步后,立刻通过 Wi-Fi 和邻居交换自己脑海中的 $s$ 和 $y$(加权平均),并加上自己刚刚这一小步造成的绝对确定增量。数学保证了这种“打听+上报”的机制能让所有人的猜测极速收敛到真实的上帝视角。

  • 工程优劣:在目标函数强凸的条件下,该算法能达到线性收敛(极快)。但在可行集 $X_i$ 复杂时,投影操作 $P_{X_i}$ 本质上是解一个二次规划问题(QP),极其消耗机载 CPU 算力。


7.2 带梯度追踪的分布式 Frank-Wolfe 算法

为了解决投影聚合追踪中“投影操作(QP)太耗算力”的痛点,学者们引入了 Frank-Wolfe 方法,用数学上的收敛速度换取了工程上的极低单步计算成本

7.2.1 核心算法公式

追踪器 $s_i$ 和 $y_i$ 的更新逻辑与 7.1 节完全一致,但状态 $x_i$ 的更新被替换为:

  1. 计算当前总梯度 $d_i^t$

    \[d_i^t \triangleq \nabla_1 f_i(x_i^t, s_i^t) + \nabla \phi_i(x_i^t) y_i^t\]
  2. 在可行集内找极值角落点(线性规划 LP)

    \[z_i^t = \text{arg}\min_{z_i \in X_i} (d_i^t)^\top z_i\]
  3. 拉直线走一小步

    \[x_i^{t+1} = (1 - \gamma^t) x_i^t + \gamma^t z_i^t\]

7.2.2 物理映射与工程权衡

  • 为什么弃用投影?:在算力极弱的微型无人机(如 Crazyflie)或水下节点上,如果在每一步迭代中都去解极其沉重的二次规划(QP)来做投影,系统会严重卡顿。

  • Frank-Wolfe 的降维打击:算法不再盲目往外冲然后再费力投影回来。它直接拿着当前算好的梯度方向 $d_i^t$,在自己的安全飞行边界 $X_i$ 内寻找一个“在这个梯度方向上投影最小的最远角落点 $z_i^t$”

    • 寻找这个角落点,数学上只是一个线性规划(LP)问题,计算速度极快!

    • 找到角落点后,用当前位置 $x_i^t$ 和角落点 $z_i^t$ 连一条直线,沿着直线按照衰减步长 $\gamma^t$ 往前走一点点。因为起点和终点都在安全集合 $X_i$ 内,由于凸集的性质,连线上的任何一点都绝对安全,彻底免去了复杂的投影计算

  • 工程优劣:极大地降低了单次迭代的计算负担,但代价是收敛速度降级为次线性收敛(变慢了),且需要使用逐渐衰减的步长 $\gamma^t$ 来保证收敛。这是一种非常经典的底层算力妥协。

7.3.3 把具体公式塞进算法更新方程

现在,我们将上述极简结果代入 Algorithm 3 第一步的候选步更新方程中:

论文里的抽象方程

\[\tilde{x}_i^t = P_{X_i} \left[ x_i^t - \gamma \left( \nabla_1 f_i(x_i^t, s_i^t) + \nabla \phi_i(x_i^t) y_i^t \right) \right]\]

在 C++/Python 代码中实际执行的代数方程

\[\tilde{x}_i^t = P_{X_i} \left[ x_i^t - \gamma \left( 2(x_i^t - r_i) + y_i^t \right) \right]\]

代码落地核心释义

机器人决定下一步该往哪飞($\tilde{x}_i^t$)时,只需做极其简单的向量加法:

  1. 算个人拉力:看看敌机在哪,算出指向敌机的向量 $2(x_i^t - r_i)$。

  2. 算全局拉力:直接加上动态追踪器向量 $y_i^t$(它在代码里就是一个存着 [dx, dy, dz] 的长度为 3 的数组,代表全队为了让质心靠近 VIP 而产生的集体抱怨度拉力)。

  3. 极简投影:把这两个向量相加,乘以学习率 $\gamma$,即可得到最终的飞行目标。如果在物理控制中,无人机的可行集 $X_i$ 是一个代表安全活动范围的 3D 立方体边界(Bounding Box),那么投影操作 $P_{X_i}$ 根本不需要去解沉重的二次规划,在 Python 中直接调用类似 numpy.clip(target_pos, box_min, box_max) 进行简单的数值截断即可完成操作。

7.3 对偶一致性ADMM

这一部分没太看懂,先放一段AI总结在下面回来慢慢看

文献 [120] 提出了一种基于 ADMM(交替方向乘子法)的方法,用于求解一类简化的聚合优化问题。与前两节“灵巧但脆弱”的梯度法不同,ADMM 就像一辆“笨重但极其抗造的重型坦克”,特别适合通信环境恶劣的多机器人协同场景。

7.3.1 数学模型与物理映射

该算法处理的聚合优化问题形式如下:

\[\min_{x_1, \dots, x_N} \sum_{i=1}^N f_i(x_i) + g(\sigma(x)), \quad \text{其中 } \sigma(x) \triangleq \frac{\sum_{i=1}^N Q_i x_i}{N}\] \[\text{subj. to } x_i \in X_i \quad \forall i \in \mathbb{I}\]

物理映射(以水下 AUV 共享声学信道为例)

  • $x_i$:AUV 决定发射的信号功率

  • $f_i(x_i)$:发射信号耗费的电池代价

  • $\sigma(x)$:水下信道中的总声学拥堵程度

  • $g(\sigma(x))$:全局信道拥堵惩罚

  • 算法的对偶本质:算法 5 不直接处理物理约束,而是通过共轭函数引入对偶变量(即“信道拥堵税率”),让 AUV 们在网络中协商出一个统一的价格,以此来间接控制总拥堵程度。

7.3.2 算法核心步骤与直觉解析

在算法 5 的每次迭代 $t$ 中,机器人 $i$ 会执行以下三大步骤:

步骤 1:开会吵架与翻旧账(一致性与残差更新)

\[p_i^{t+1} = p_i^t + \rho \sum_{j \in \mathcal{N}_i} (y_i^t - y_j^t)\] \[s_i^{t+1} = s_i^t + \xi (y_i^t - z_i^t)\] \[r_i^{t+1} = \rho \sum_{j \in \mathcal{N}_i} (y_i^t + y_j^t) + \xi z_i^t - p_i^{t+1} - s_i^{t+1}\]
  • 直觉解析:AUV 们交换彼此理想的税率 $y_i$。积分变量 $p_i, s_i$ 就像“历史账本”,专门记录你和邻居、你和全网历史上的误差积怨。系统最终扣除这些历史积怨,合成一个本轮的综合强制指导价 $r_i^{t+1}$。哪怕偶尔通信丢包,误差也会记在账上,保证长期的准确性。

步骤 2:闭门算账(带强力橡皮筋的本地优化)

\[\arg\min_{x_i} \left\{ f_i(x_i) + \frac{1}{2(\xi + 2\rho d_i)} ||Q_i x_i + r_i^{t+1}||^2 \right\}\]
  • 直觉解析:AUV 关起门来计算自己的发射功率 $x_i$。大括号右侧的二次项是 ADMM 的灵魂——“强力橡皮筋”。它会对任何偏离系统指导价 $-r_i^{t+1}$ 的行为施加巨大的平方级罚款,迫使自私的 AUV 必须向全局妥协。

步骤 3:宏观调控与强行平滑(近端算子更新)

\[z_i^{t+1} = \frac{s_i^{t+1}}{\xi} + y_i^{t+1} - \frac{1}{N\xi} Prox_g^{1/(N\xi)} (N s_i^{t+1} + \xi y_i^{t+1})\]
  • 直觉解析:$Prox_g$ 是近端算子(Proximal Operator),宛如一个“超级液压减震器”。它在不违反信道拥堵规则 $g$ 的前提下,对大家提议的新税率做一次最温和的平滑过滤,防止价格因为信道波动而剧烈震荡发散。

7.3.3 工程权衡与收敛性评价

根据定理 5,该算法能收敛到最优解,但在工程落地时有着极其鲜明的优缺点:

  • 劣势(单步极慢):在步骤 2 中,每一步迭代都要求解一个完整的本地最优化问题 ($\arg\min_{x_i}$),而不是像梯度法那样进行简单的乘加运算,极其消耗机载 CPU 算力。且数学上无法保证线性收敛率。

  • 优势(全局极稳):由于引入了积分账本、强力二次罚函数以及近端减震器,它把所有的发散倾向全部用数学死死拉住。在容易丢包、高延迟、异步的恶劣通信网络中展现出极强的多功能性和鲁棒性,是复杂机器人工程中的终极保底利器。

8. 多机SLAM工具

两个开源工具:

  1. ChoiRbot (A ROS 2 Toolbox for Cooperative Robotics):DISROPT (Distributed Optimization in Python):数学计算引擎。一个 Python 库,把复杂的局部约束、拉格朗日乘子、追踪器更新,全部封装成了易用的 API。只要定义代价函数和约束条件就能自动求解arg min问题。

  2. ChoiRbot (A ROS 2 Toolbox for Cooperative Robotics):ChoiRbot 基于最新的 ROS 2 架构构建。它帮你处理了所有恶劣的底层网络问题:如何建立无中心化的点对点通信(P2P)、如何发现邻居节点、如何打包和解析那些追踪器数据。它把 DISROPT 算出来的理想指令,无缝转化为控制机器人车轮和螺旋桨的 Twist 速度指令。

9. 未来研究方向

  1. 异步计算与通信 (Asynchronous Algorithms):由于各节点的 CPU 算力不同,如果强行要求大家同步迭代,全网的速度就会被最慢的那个节点拖垮。未来的算法必须允许机器人“各算各的,随时更新”。

  2. 有向图与时变拓扑 (Directed and Time-Varying Graphs):通信链路可能只是单向的,而且随时会断开。

  3. 极低带宽优化:比如引入事件触发通信 (Event-triggered communication) 和量化通信 (Quantization),做到只在误差超过某个阈值时才发送压缩后的数据。这对于带宽极其珍贵、延迟极高的水下声学通信网络来说,简直是必须要跨过的第一道大关。

  4. 非凸分布式优化:真实的机器人世界充满了非凸性。比如多机协同中的动态避障约束,以及前端里程计在李群流形上产生的位姿数据。如何设计能在高度非凸空间中不发散、还能跳出局部最优的分布式算法(例如针对非线性问题的自适应 ADMM),是目前理论界的一大方向

  5. 融合底层非完整动力学:目前的分布式优化大多算出的是一个“理想空间坐标 $x_i$​”,但它没有考虑机器人底层的非完整约束(比如固定翼无人机不能悬停、车辆不能横着平移)。未来的方向是将分布式优化与模型预测控制(NMPC)深度融合。

  6. 从静态求解走向“在线时变优化” (Online and Time-varying Optimization): 这就要求算法必须在极少的迭代次数(甚至 1 次)内,就能给出具有安全边界的次优解。

  7. 网络的安全性与隐私保护 (Security and Privacy).




Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • Google Gemini updates: Flash 1.5, Gemma 2 and Project Astra
  • Displaying External Posts on Your al-folio Blog
  • LLM微调——LoRA
  • 主流多机SLAM框架——多机SLAM问题思考与总结
  • 主流多机SLAM框架3——SlideSLAM