SLAM中的加权最小二乘法

一、数学描述

        机器人携带传感器在环境中运动可由 运动方程 观测方程 描述。

\begin{cases}\boldsymbol{x}_k=f\left(\boldsymbol{x}_{k-1},\boldsymbol{u}_k,\boldsymbol{w}_k\right),&k=1,\cdots,K\\\boldsymbol{z}_{k,j}=h\left(\boldsymbol{y}_j,\boldsymbol{x}_k,\boldsymbol{v}_{k,j}\right),&(k,j)\in\mathcal{O}\end{cases}.

        其中 k 表示时刻;x_{^{k}} 表示 k 时刻的位姿;u_{k} 是运动传感器的读数或者输入;y_{j} 为路标点;z_{k,j} 表示观测数据。

\boldsymbol{w}_k\sim\mathcal{N}\left(\boldsymbol{0},\boldsymbol{R}_k\right),\boldsymbol{v}_k\sim\mathcal{N}\left(\boldsymbol{0},\boldsymbol{Q}_{k,j}\right).

        w_{k} 为运动噪声,例如对机器人下达了前进 1m 的指令,机器人实际前进了 0.9m。

        v_{k} 为观测噪声 ,例如前方障碍物距离机器人 1m,但传感器测量得到的值为 1.1m。

        这两种噪声和卡尔曼滤波中的噪声一样,参考 一文详解卡尔曼滤波两处噪声的来源及影响 和 过程噪声和测量噪声

        其中 \text{N} 表示高斯分布,0 表示零均值,R_k,Q_{k,j}为协方差矩阵。在这些噪声的影响下,我们希望通过带噪声的数据 z 和 u 推断位姿 x 和地图 y(以及它们的概率分布),这构成了一个状态估计问题。

        运动方程和观测方程可以表述为:

\begin{cases}\boldsymbol{x}_k=f\left(\boldsymbol{x}_{k-1},\boldsymbol{u}_k\right)+\boldsymbol{w}_k\\\boldsymbol{z}_{k,j}=h\left(\boldsymbol{y}_j,\boldsymbol{x}_k\right)+\boldsymbol{v}_{k,j}\end{cases}.

        其中 运动误差观测误差 可表述为:

\begin{gathered} e_{\boldsymbol{u},k} =\boldsymbol{x}_k-f\left(\boldsymbol{x}_{k-1},\boldsymbol{u}_k\right) \\ e_{\boldsymbol{z},j,k} =\boldsymbol{z}_{k,j}-h\left(\boldsymbol{x}_k,\boldsymbol{y}_j\right), \end{gathered} 

        构造加权最小二乘问题为:

\min J(\boldsymbol{x},\boldsymbol{y})=\sum_k\boldsymbol{e}_{\boldsymbol{u},k}^\mathrm{T}\boldsymbol{R}_k^{-1}\boldsymbol{e}_{\boldsymbol{u},k}+\sum_k\sum_j\boldsymbol{e}_{\boldsymbol{z},k,j}^\mathrm{T}\boldsymbol{Q}_{k,j}^{-1}\boldsymbol{e}_{\boldsymbol{z},k,j}. 

        其中协方差矩阵之逆 R_{k}^{-1} 和 Q_{k,j}^{-1} 提供了最小二乘问题的权重分布。

二、 协方差矩阵之逆提供了最小二乘问题的权重分布

1. 协方差的定义

        首先,协方差是衡量两个随机变量之间关系的统计量。对于两个变量 XY,它的协方差定义为:

\mathrm{Cov}(X,Y)=E[(X-E[X])(Y-E[Y])]

  • 如果 \operatorname{Cov}(X,Y)>0,意味着 X 和 Y 趋向于同时增大或减小(正相关)。
  • 如果 \operatorname{Cov}(X,Y)<0,意味着 X 增大时 Y 倾向于减小(负相关)。
  • 如果\operatorname{Cov}(X,Y)=0,则 X 和 Y 之间没有线性相关性。
  •  \operatorname{Cov}(X,Y) 的绝对值越大,表示两个变量的同向(正相关)或反向(负相关)关系越强。

2. 协方差矩阵

        协方差矩阵 Σ 是一个对称矩阵,用于描述多维随机变量的协方差结构。设一个 n 维随机变量 X=[X1,X2,...,Xn],其协方差矩阵定义为:

\Sigma=\begin{bmatrix}\mathrm{Var}(X_1)&\mathrm{Cov}(X_1,X_2)&\dots&\mathrm{Cov}(X_1,X_n)\\\mathrm{Cov}(X_2,X_1)&\mathrm{Var}(X_2)&\dots&\mathrm{Cov}(X_2,X_n)\\\vdots&\vdots&\ddots&\vdots\\\mathrm{Cov}(X_n,X_1)&\mathrm{Cov}(X_n,X_2)&\dots&\mathrm{Var}(X_n)\end{bmatrix}

  • 对角线上元素是各观测误差的方差 Var(Xi)。
  • 非对角线元素是不同观测值误差之间的协方差 Cov(Xi,Xj),反映了不同观测值误差之间的相关性。

3. 最小二乘法与加权最小二乘法

        在经典的最小二乘法中,我们试图通过最小化目标函数来找到一组最优参数:

\min_\theta\sum_{i=1}^n\left(y_i-f(x_i,\theta)\right)^2

        假设观测数据 yi 存在观测误差(观测噪声)。如果这些误差是均匀的且相互独立,我们可以直接使用普通最小二乘法。但是,当这些误差的方差不同时,或者误差之间存在相关性时,普通最小二乘法不再是最佳选择。此时,使用加权最小二乘法(Weighted Least Squares, WLS),目标函数变为:

\min_\theta\sum_{i=1}^nw_i\left(y_i-f(x_i,\theta)\right)^2

        其中,wi 是观测值 yi 的权重。观测值的误差越小(更准确),它对结果的贡献越大,所以赋予它的权重 wi 越大。

4. 协方差矩阵的逆与权重分布

        在加权最小二乘法中,权重 wi 通常来源于观测值的误差协方差矩阵的逆,也就是说:

\min_\theta\left(y-f(x_i,\theta)\right)^T\Sigma^{-1}\left(y-f(x_i,\theta)\right)

  • \Sigma 是观测误差的协方差矩阵。
  • \Sigma^{-1} 是协方差矩阵的逆,它提供了观测数据的权重分布
为什么协方差矩阵的逆提供权重分布?
  1. 误差的方差:对角线元素 Var(Xi) 代表观测值 yi 的误差的方差。如果某个观测值的方差较大,它的误差就大。为了降低这些大误差观测对拟合结果的影响,我们在权重中给它分配较小的值。由于权重与方差成反比,方差矩阵的逆就体现了这个“反比”关系:误差大,权重小;误差小,权重大。

  2. 误差的协方差:非对角线元素 Cov(Xi,Xj)代表观测值 yi 和 yj 之间的误差相关性。如果 yi 和 yj 的误差相关性很强(\operatorname{Cov}(X,Y) 的绝对值很大),我们就需要降低它们的权重,避免它们共同影响模型的拟合结果。协方差矩阵的逆反映了这种相关性的处理方式,通过重新分配权重减少相互关联的观测值的影响。

5. 直观理解

        协方差矩阵之逆 \Sigma^{-1} 可以看作一个“校正因子”,用来对观测数据进行加权。具体地:

  • 如果某些观测值的误差较小(方差小),它们的权重就大,意味着它们对拟合结果贡献更大。
  • 如果某些观测值的误差较大(方差大),它们的权重就小,意味着它们对拟合结果的影响被减弱。
  • 如果观测值之间存在相关性(非对角线协方差非零),协方差矩阵的逆会根据这些相关性调整每个观测的权重,避免相关性带来的重复信息影响结果。

6. 总结

        协方差矩阵的逆在加权最小二乘法中起到了分配观测值权重的作用:

  • 它通过对误差方差和相关性的分析,决定每个观测值对最终结果的影响力。
  • 协方差矩阵之逆越大的元素,对应的观测值权重越大,意味着该观测值更“可信”或重要。
  • 这种权重分布能够优化拟合过程,使得误差小、相互独立的观测值对结果贡献更大,而误差大、相互相关的观测值影响更小。
<think>我们正在讨论最小二乘法在图像对齐中的应用。图像对齐通常涉及寻找最佳变换参数(如平移、旋转、缩放),使得两幅图像之间的对应点差异最小。最小二乘法通过最小化对应点之间的坐标误差平方和来求解这些变换参数。对于二维图像对齐,常见的变换有:1.刚体变换(平移和旋转)2.仿射变换(平移、旋转、缩放和剪切)3.投影变换(透视变换)以最简单的平移变换为例,假设我们有一组对应点对:源点集$P=\{p_i\}$和目标点集$Q=\{q_i\}$,其中$i=1,2,\dots,n$。每个点$p_i=(x_i,y_i)$,$q_i=(x_i',y_i')$。我们想要找到一个平移向量$(t_x,t_y)$使得变换后的源点与目标点之间的误差平方和最小。即:$$E=\sum_{i=1}^{n}\|(x_i+t_x-x_i')^2+(y_i+t_y-y_i')^2\|$$为了最小化$E$,我们分别对$t_x$和$t_y$求偏导并令导数为0:$$\frac{\partialE}{\partialt_x}=2\sum_{i=1}^{n}(x_i+t_x-x_i')=0$$$$\frac{\partialE}{\partialt_y}=2\sum_{i=1}^{n}(y_i+t_y-y_i')=0$$解方程得到:$$t_x=\frac{1}{n}\sum_{i=1}^{n}(x_i'-x_i)$$$$t_y=\frac{1}{n}\sum_{i=1}^{n}(y_i'-y_i)$$对于更复杂的变换(如仿射变换),变换模型为:$$\begin{bmatrix}x'\\y'\end{bmatrix}=\begin{bmatrix}a&b\\c&d\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}+\begin{bmatrix}t_x\\t_y\end{bmatrix}$$我们同样可以用最小二乘法求解变换矩阵的参数。将变换方程写成线性方程组形式,然后使用最小二乘解。下面我们以仿射变换为例,仿射变换有6个参数:$a,b,t_x,c,d,t_y$(通常写为:$x'=a\cdotx+b\cdoty+t_x$,$y'=c\cdotx+d\cdoty+t_y$)。对于每一对点,我们可以写出两个方程:$$x_i'=a\cdotx_i+b\cdoty_i+t_x$$$$y_i'=c\cdotx_i+d\cdoty_i+t_y$$将所有点对代入,得到超定方程组:$$\mathbf{A}\mathbf{x}=\mathbf{b}$$其中,$\mathbf{A}$是一个$2n\times6$的矩阵($n$是点对数),$\mathbf{x}$是待求参数向量$[a,b,t_x,c,d,t_y]^T$,$\mathbf{b}$是目标点坐标向量。具体形式为:$$\begin{bmatrix}x_1&y_1&1&0&0&0\\0&0&0&x_1&y_1&1\\x_2&y_2&1&0&0&0\\0&0&0&x_2&y_2&1\\\vdots&\vdots&\vdots&\vdots&\vdots&\vdots\\x_n&y_n&1&0&0&0\\0&0&0&x_n&y_n&1\\\end{bmatrix}\begin{bmatrix}a\\b\\t_x\\c\\d\\t_y\end{bmatrix}=\begin{bmatrix}x_1'\\y_1'\\x_2'\\y_2'\\\vdots\\x_n'\\y_n'\end{bmatrix}$$最小二乘解为:$\mathbf{x}=(\mathbf{A}^T\mathbf{A})^{-1}\mathbf{A}^T\mathbf{b}$(要求$\mathbf{A}^T\mathbf{A}$可逆)。下面我们给出一个使用最小二乘法求解仿射变换参数的Python代码示例:</think>### 最小二乘法在点云对齐中的实现 最小二乘法常用于点云对齐(配准)问题,核心是通过最小化对应点之间的欧氏距离平方和来求解最优变换矩阵。以下是完整实现原理和代码示例: #### 数学原理(刚体变换) 给定两组点云 $P = \{p_i\}$ 和 $Q = \{q_i\}$,寻找旋转矩阵 $R$ 和平移向量 $t$ 使目标函数最小化: $$ \min_{R,t} \sum_{i=1}^{n} \| R \cdot p_i + t - q_i \|^2 $$ 求解步骤: 1. **计算质心** $$ \bar{p} = \frac{1}{n}\sum p_i, \quad \bar{q} = \frac{1}{n}\sum q_i $$ 2. **中心化点云** $$ p_i' = p_i - \bar{p}, \quad q_i' = q_i - \bar{q} $$ 3. **计算协方差矩阵** $$ H = \sum_{i=1}^{n} p_i' \cdot q_i'^T $$ 4. **SVD分解求旋转矩阵** $$ [U, S, V^T] = \text{SVD}(H) $$ $$ R = V \cdot U^T \quad (\text{需保证}\ \det(R)=1) $$ 5. **求解平移向量** $$ t = \bar{q} - R \cdot \bar{p} $$ #### Python代码实现 ```python import numpy as np def point_cloud_alignment(source, target): """ 最小二乘法点云对齐(刚体变换) :param source: 源点云 (n x 3) :param target: 目标点云 (n x 3) :return: 旋转矩阵R, 平移向量t """ # 1. 计算质心 centroid_s = np.mean(source, axis=0) centroid_t = np.mean(target, axis=0) # 2. 中心化点云 src_centered = source - centroid_s tgt_centered = target - centroid_t # 3. 计算协方差矩阵 H = src_centered.T @ tgt_centered # 4. SVD分解求旋转 U, S, Vt = np.linalg.svd(H) R = Vt.T @ U.T # 处理反射情况 if np.linalg.det(R) < 0: Vt[-1, :] *= -1 R = Vt.T @ U.T # 5. 计算平移向量 t = centroid_t - R @ centroid_s return R, t # 测试示例 if __name__ == "__main__": # 生成示例点云(源点云绕z轴旋转30度) theta = np.pi/6 source = np.array([[1,0,0], [0,1,0], [0,0,1], [-1,0,0]]) R_true = np.array([[np.cos(theta), -np.sin(theta), 0], [np.sin(theta), np.cos(theta), 0], [0, 0, 1]]) t_true = np.array([2, 3, 0]) target = (R_true @ source.T).T + t_true # 计算变换矩阵 R_est, t_est = point_cloud_alignment(source, target) print("真实旋转矩阵:\n", R_true) print("估计旋转矩阵:\n", R_est.round(4)) print("\n真实平移向量:", t_true) print("估计平移向量:", t_est.round(4)) # 验证对齐误差 aligned = (R_est @ source.T).T + t_est error = np.mean(np.linalg.norm(aligned - target, axis=1)) print(f"\n对齐误差: {error:.6f}") ``` #### 关键说明 1. **适用场景**: - 刚体变换(旋转+平移) - 点云配准、图像特征点匹配 - 需要精确的对应点关系(可通过ICP迭代获取) 2. **算法优化**: ```python # 加权最小二乘法(考虑点的重要性) weights = np.array([...]) # 各点的权重 centroid_s = np.sum(weights[:, None] * source, axis=0) / np.sum(weights) ``` 3. **非刚体变换扩展**: - 仿射变换:求解线性方程组 $AX=B$,使用 `np.linalg.lstsq` - 投影变换:使用DLT算法(Direct Linear Transform) #### 典型输出 ``` 真实旋转矩阵: [[ 0.866 -0.5 0. ] [ 0.5 0.866 0. ] [ 0. 0. 1. ]] 估计旋转矩阵: [[ 0.866 -0.5 0. ] [ 0.5 0.866 0. ] [-0. -0. 1. ]] 真实平移向量: [2 3 0] 估计平移向量: [2. 3. 0.] 对齐误差: 0.000000 ``` 该算法在计算机视觉(如SLAM)、医学图像配准和工业检测中广泛应用,实际使用时需配合RANSAC等鲁棒方法处理噪声[^1][^4]。 --- ### 相关问题 1. 如何用最小二乘法实现曲线拟合(多项式回归)? 2. 最小二乘法与RANSAC算法在点云配准中的区别是什么? 3. 加权最小二乘法在什么场景下使用?如何设置权重? 4. 当点云存在尺度缩放时,如何扩展最小二乘法求解相似变换? 5. 最小二乘法求解超定方程组的基本原理是什么?[^2][^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值