当前位置: 首页 > news >正文

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. 总结

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

  • 它通过对误差方差和相关性的分析,决定每个观测值对最终结果的影响力。
  • 协方差矩阵之逆越大的元素,对应的观测值权重越大,意味着该观测值更“可信”或重要。
  • 这种权重分布能够优化拟合过程,使得误差小、相互独立的观测值对结果贡献更大,而误差大、相互相关的观测值影响更小。

http://www.mrgr.cn/news/50061.html

相关文章:

  • 解析:ARM 工业计算机在光伏储能中的关键作用
  • Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
  • gbase8s之建表相关问题
  • C语言:在Visual Studio中使用C语言scanf输入%s出现的栈溢出问题
  • 量子噪声与量子操作
  • 谷歌浏览器主题和皮肤设置教程
  • Jetpack-ViewModel+LiveData+DataBinding
  • docker删除容器要怎么操作?如何保障容器安全!
  • leetcode哈希表(二)-两个数组的交集
  • 图新地球移动端(外业精灵)产品入门指南
  • js的基础问题
  • 今日最佳WAF雷池社区版,tengine问题解决办法
  • Mongo开启执行splitVector命令
  • 部署带证书的docker高可用的私有仓库harbor
  • 暴力破解案例
  • c++-类与对象-对象特性-深拷贝和浅拷贝
  • Arthas 介绍,阿里开源线上JVM性能监控工具
  • LeetCode岛屿数量
  • 代码生成器技术乱弹五十六,超级语言和高级语言的根本区别
  • 【Spring相关技术】spring进阶-自定义请求报文转对象HttpMessageConverter