视觉SLAM十四讲学习5 位姿估计(2)本质矩阵的计算

2023-05-16

视觉SLAM十四讲学习5 位姿估计(2)本质矩阵的计算

  • 前言
  • 本质矩阵的性质
  • 本质矩阵计算
    • 五点法
    • 八点法
  • 位姿计算
  • 对极几何计算本质矩阵的问题
  • 后记

前言

本篇详细推导对极几何中,本质矩阵的计算。

本质矩阵的性质

根据上篇的内容,由对极几何约束获得相邻帧相对位姿与匹配点坐标的关系:
P 2 T t ∧ R P 1 = 0 p 2 T K − T t ∧ R K − 1 p 1 = 0 P_2^Tt^\land RP_1 = 0 \\ \quad \\ p_2^TK^{-T}t^\land R K^{-1}p_1 = 0 P2TtRP1=0p2TKTtRK1p1=0

①对于本质矩阵 E = t ∧ R E=t^\land R E=tR,原本有旋转+位移六个自由度,但是等式右边为零,乘以任意尺度等式都成立,因此方程缺少尺度约束,减去一个自由度,共五个自由度。

②本质矩阵有一个内在性质:奇异值必为 σ , σ , 0 {\sigma,\sigma,0} σ,σ,0的形式。

性质②需要进行证明:

首先,对于奇数阶反对称矩阵 A A A,必不满秩:
A T = − A ∣ A T ∣ = ∣ − A ∣ ∣ A ∣ = ( − 1 ) n ∣ A ∣ = − ∣ A ∣ → ∣ A ∣ = 0 A^T=-A \\ |A^T|=|-A|\\ |A|=(-1)^n|A|=-|A| \to |A|=0 AT=AAT=AA=(1)nA=AA=0
任意 n n n阶反对称矩阵合同于矩阵
d i a g { [ 0 1 − 1 0 ] , [ 0 1 − 1 0 ] , … [ 0 1 − 1 0 ] , 0 , 0 , … , 0 } diag\{\begin{bmatrix}0 & 1 \\ -1 & 0 \end{bmatrix} , \begin{bmatrix}0 & 1 \\ -1 & 0 \end{bmatrix}, \dots \begin{bmatrix}0 & 1 \\ -1 & 0 \end{bmatrix}, 0, 0 ,\dots , 0 \} diag{[0110],[0110],[0110],0,0,,0}
并正交相似于
d i a g { [ 0 a 1 − a 1 0 ] , [ 0 a 2 − a 2 0 ] , … [ 0 a r − a r 0 ] , 0 , 0 , … , 0 } diag\{\begin{bmatrix}0 & a_1 \\ -a_1 & 0 \end{bmatrix} , \begin{bmatrix}0 & a_2 \\ -a_2 & 0 \end{bmatrix}, \dots \begin{bmatrix}0 & a_r \\ -a_r & 0 \end{bmatrix}, 0, 0 ,\dots , 0 \} diag{[0a1a10],[0a2a20],[0arar0],0,0,,0}
因此,反对称矩阵的秩必为偶数,则三阶非零反对称矩阵 A A A的秩必为2,可将 A A A分解:
A = U [ 0 a 1 0 − a 1 0 0 0 0 0 ] U T , U U T = E Z = [ 0 1 0 − 1 0 0 0 0 0 ] W = [ 0 1 0 − 1 0 0 0 0 1 ] , W W T = E Z = W d i a g { 1 , 1 , 0 } A = a 1 U Z U T = a 1 U W d i a g { 1 , 1 , 0 } U T 注 意 , 当 Z = W T d i a g { − 1 , − 1 , 0 } ( 1 ) A = − a 1 U Z U T = a 2 U W T d i a g { 1 , 1 , 0 } U T 也 满 足 分 解 要 求 A = U \begin{bmatrix}0 & a_1 & 0 \\ -a_1 & 0 & 0 \\ 0 & 0 & 0 \\ \end{bmatrix}U^T,UU^T=E \\ \quad \\ Z= \begin{bmatrix} 0 & 1 & 0 \\ -1 & 0 & 0 \\ 0 & 0 & 0\\ \end{bmatrix} \\ \quad \\ W = \begin{bmatrix} 0&1&0 \\ -1&0&0\\ 0&0&1\\ \end{bmatrix},WW^T=E \\ \quad \\ Z=W diag\{1,1,0 \} \\ \quad \\ A=a_1UZU^T=a_1UWdiag\{1,1,0 \}U^T \\ \quad \\ 注意,当Z=W^Tdiag\{-1,-1,0\} \quad (1) \\ \quad \\ A=-a_1UZU^T=a_2UW^Tdiag\{1,1,0 \}U^T也满足分解要求 A=U0a10a100000UT,UUT=EZ=010100000W=010100001,WWT=EZ=Wdiag{1,1,0}A=a1UZUT=a1UWdiag{1,1,0}UTZ=WTdiag{1,1,0}(1)A=a1UZUT=a2UWTdiag{1,1,0}UT

由本质矩阵 E = t ∧ R E=t^\land R E=tR t ∧ t^\land t是一个反对称矩阵,可得:
t ∧ = σ U W d i a g { 1 , 1 , 0 } U T E = U W d i a g { σ , σ , 0 } U T R ∵ U W ( U W ) T = E , U T R ( U T R ) T = E U W = U ∗ , U T R = ( V ∗ ) T ∴ E = U ∗ d i a g { σ , σ , 0 } ( V ∗ ) T t^\land = \sigma UWdiag\{1,1,0 \}U^T \\ E = UWdiag\{\sigma,\sigma,0 \}U^TR \\ \quad \\ \because UW(UW)^T=E,U^TR(U^TR)^T=E \\ UW=U^*,U^TR=(V^*)^T\\ \therefore E = U^* diag\{\sigma,\sigma,0\}(V^*)^T t=σUWdiag{1,1,0}UTE=UWdiag{σ,σ,0}UTRUW(UW)T=E,UTR(UTR)T=EUW=U,UTR=(V)TE=Udiag{σ,σ,0}(V)T
E E E的SVD分解得到的奇异值为 { σ , σ , 0 } \{\sigma,\sigma,0 \} {σ,σ,0}的形式。

本质矩阵计算

五点法

由于本质矩阵自由度为5,因此最少需要五对匹配点就可以计算出 E E E。五点法计算比较复杂,后面有时间我再补充。

八点法

如果只考虑本质矩阵的尺度等价性,则 E E E具有八个自由度,需要八对匹配点计算出 E E E。对于一对匹配点 P 1 = { x 1 , y 1 , 1 } , { x 2 , y 2 , 1 } P_1=\{x_1,y_1,1\},\{x_2,y_2,1\} P1={x1,y1,1},{x2,y2,1},由对极几何约束有:
[ x 2 y 2 1 ] [ e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ] [ x 1 y 1 1 ] = 0 → [ x 2 x 1 , x 2 y 1 , x 2 , y 2 x 1 , y 2 y 1 , y 2 , x 1 , y 1 , 1 ] [ e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ] = 0 \begin{bmatrix} x_2 & y_2 & 1 \end{bmatrix} \begin{bmatrix} e_1 & e_2 & e_3 \\ e_4 & e_5 & e_6 \\ e_7 & e_8 & e_9 \\ \end{bmatrix} \begin{bmatrix} x_1 \\ y_1 \\ 1 \end{bmatrix} = 0 \\ \quad \\ \to \begin{bmatrix} x_2x_1,x_2y_1,x_2,y_2x_1,y_2y_1,y_2,x_1,y_1,1 \end{bmatrix} \begin{bmatrix} e_1 \\ e_2 \\ e_3 \\ e_4 \\ e_5 \\ e_6 \\ e_7 \\ e_8 \\ e_9 \\ \end{bmatrix} = 0 \\ \quad \\ [x2y21]e1e4e7e2e5e8e3e6e9x1y11=0[x2x1,x2y1,x2,y2x1,y2y1,y2,x1,y1,1]e1e2e3e4e5e6e7e8e9=0

则对于八对匹配点而言,形成了一个线性齐次方程组 A x = 0 , A ∈ R n × n Ax=0,A\in {\bf R}^{n\times n} Ax=0ARn×n。如果 A A A行满秩, d i m N U L ( A ) = 9 − r a n k ( A ) = 1 dimNUL(A)=9-rank(A)=1 dimNUL(A)=9rank(A)=1,即零空间是一维直线,刚好满足本质矩阵的尺度不确定性。

对于欠定方程组,可以采用SVD来解方程,如数值计算之 最小二乘法(3)最小二乘的矩阵解法所示。

位姿计算

通过SVD解方程,获得本质矩阵 E E E后,需要解算位姿 R , t R,t R,t,根据上面的证明,将 E E E进行奇异值分解:
E = U ∗ d i a g { σ , σ , 0 } ( V ∗ ) T = U W { σ , σ , 0 } U T R 奇 异 值 分 解 可 得 U ∗ , V ∗ , σ U ∗ = U W , W = [ 0 1 0 − 1 0 0 0 0 1 ] , V ∗ = ( U T R ) T U = U ∗ W T R = U ∗ W T ( V ∗ ) T t ∧ = U ∗ { σ , σ , 0 } W ( U ∗ ) T E = U^* diag\{\sigma,\sigma,0\}(V^*)^T=UW\{\sigma,\sigma,0\} U^TR \\ \quad \\ 奇异值分解可得U^*,V^*,\sigma \\ \quad \\ U^*=UW,W = \begin{bmatrix} 0&1&0 \\ -1&0&0\\ 0&0&1\\ \end{bmatrix}, V^*=(U^TR)^T \\ \quad \\ U=U^*W^T \\ R=U^*W^T(V^*)^T \\ t^\land = U^*\{\sigma,\sigma,0\}W(U^*)^T E=Udiag{σ,σ,0}(V)T=UW{σ,σ,0}UTRU,V,σU=UW,W=010100001,V=(UTR)TU=UWTR=UWT(V)Tt=U{σ,σ,0}W(U)T

关于《十四讲》中的四种情况,其原因是根据式(1), W , W T W,W^T W,WT都能满足本质矩阵奇异值为 { σ , σ , 0 } \{\sigma,\sigma,0\} {σ,σ,0}的形式,导致 E E E的分解有两种形式;而通过欠定方程求 E E E时,因为缺少尺度约束,可以得到 E E E − E -E E两种解,因此最后出现了四种 R , t R,t R,t可能。

在这里插入图片描述
这时,只要把其中一个匹配点代入四个解确定的相机位姿模型,得到两个相机坐标的深度都为正时,表示该解正确。

对极几何计算本质矩阵的问题

①由于本质矩阵缺乏尺度约束,因此求出来的 R , t R,t R,t也是没有尺度的。不过旋转矩阵 R R R在正交群中,自身有一个 ∣ R ∣ = 1 |R|=1 R=1的约束; t t t的尺度没有任何约束,因此单目求出的 t t t是没有尺度的。

也就是说,单目给出的 t = 1 t=1 t=1,可能指1m,1cm,10cm;而 t = 2 t=2 t=2,就是对应尺度的2倍。

②因为 t t t没有尺度,因此在单目SLAM中,需要在开始时进行尺度初始化,将初始化两帧之间的 t t t作为之后SLAM的尺度。因此,初始化的两帧不能是纯旋转。

③匹配点多于八组。通常ORB提取和匹配到的点数远多于8组。此时可以先通过RANSAC将误匹配点去除,然后通过线性最小二乘计算最优本质矩阵。

④求出的本质矩阵奇异值不满足 σ , σ , 0 \sigma,\sigma,0 σ,σ,0的形式。假设得到的奇异值为 σ 1 ≥ σ 2 ≥ σ 3 \sigma_1\ge \sigma_2\ge \sigma_3 σ1σ2σ3,可以将奇异值调整为 ( σ 1 + σ 2 ) / 2 , ( σ 1 − σ 2 ) / 2 , 0 (\sigma_1+\sigma_2)/2,(\sigma_1-\sigma_2)/2,0 (σ1+σ2)/2,(σ1σ2)/2,0,或者直接设定为 1 , 1 , 0 1,1,0 1,1,0的形式。

后记

下篇记录单应矩阵。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

视觉SLAM十四讲学习5 位姿估计(2)本质矩阵的计算 的相关文章

  • 30道最新Linux内核大厂面试题(含答案)

    1 Linux 中主要有哪几种内核锁 xff1f Linux 的同步机制从 2 0 到 2 6 以来不断发展完善 从最初的原子操作 xff0c 到后来 的信号量 xff0c 从大内核锁到今天的自旋锁 这些同步机制的发展伴随 Linux 从单
  • 最新腾讯等大厂c/c++后端 linux开发常见面试题汇总

    计算机操作系统 xff08 Linux xff09 1 命令 xff1a netstat tcpdump ipcs ipcrm 这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验 2 cpu 内存 硬盘 等等与系统性能调试相关的命
  • C++高性能大规模服务器开发实践

    本文摘录自腾讯高级工程师在 全球C 43 43 及系统软件技术大会 上的专题演讲 01Lego简介 首先介绍一下 CDN 非常早期的时候有一个大牛创建了一个公司叫阿卡曼 xff0c 他把服务器部署到全球各地 xff0c 然后把源站的内容缓存
  • 梯度、散度、旋度、拉普拉斯算子

    梯度 运算的对象是纯量 xff08 即标量 xff0c 只有大小 xff0c 没有方向 xff09 xff0c 运算出来的结果是向量 xff08 矢量 xff0c 既有大小 xff0c 又有方向 xff09 定义 xff1a 函数在某点的梯
  • 【VINS-Fusion-gpu在NX的部署】

    VINS Fusion gpu在NX的部署 1 移除nx中已经默认的opencv sudo apt span class token operator span get purge libopencv span class token op
  • 电机扭矩计算

    转自 xff1a http blog sina com cn s blog 521a53b001011xdl html 扭矩的定义 xff1a 垂直方向的力 到旋转中心的距离 1 电动机有一个共同的公式 xff1a P 61 M N 955
  • px4ctrl代码-fsm.process()

    主进程 初始状态为MANUAL CTRL Finite State Machine 控制系统启动 v gt 手动控制 lt gt 自动起飞
  • px4ctrl代码解读-calculateControl()

    compute u thrust and u q controller gains and other parameters are in param quadrotor msgs Px4ctrlDebug LinearControl ca
  • linux系统启动过程(面试热点)

    linux系统启动过程 启动过程总览1 内核的引导2 运行init3 系统初始化4 建立终端5 用户登录系统6 进入login shell 启动过程总览 1 内核的引导 当计算机打开电源后 xff0c 首先是BIOS开机自检 xff0c 按
  • ZYNQ图像处理(4)——灰度图像转二值化图像

    1 二值化图像简介 前面已经完成了摄像头图像的采集和显示 xff0c 以及RGB图像转灰度图 二值化图像在图像处理领域同样有广泛的应用 xff0c 本节介绍如何用FPGA实现灰度转二值化图形 灰度实现二值化的原理很简单 xff0c 只需要设
  • Axios和Ajax处理后台返回文件流实现文件下载(图片和Excel)

    Axios 定义公共方法 xff0c 下载Excel download url data fileName return axios method 39 post 39 url headers里面设置token headers 34 tok
  • c++每日十题10.18

    1 将两个字符串连接起来组成一个字符串时 xff0c 选用 xff08 xff09 函数 正确答案 C 你的答案 C 正确 A strlen B strcap C strcat D strcmp strlen 测字符串长度 strcap复制
  • 人脸识别算法原理过程详解

    本文为转载内容 xff0c 由于找不到源作者链接 xff0c 故特此说明 人脸识别各算法详解 最近 xff0c 由于工作需要 xff0c 为了找到一款高效的人脸识别算法 xff0c 对各种人脸识别算法都研究了一番 xff0c 以下记录的是各
  • ERROR: Could not build wheels for cryptography which use PEP 517 and cannot be installed directly

    Note When installing in a non Anaconda environment make sure to install the Protobuf compiler before running the pip ins
  • Jetson Nano 关闭开启图形界面减少内存占用

    如果希望一直保持桌面关闭 xff0c 则可以使用下述命令 xff0c 然后 xff0c 重新启动后 xff0c 桌面将保持禁用或启用状态 xff1a ubuntu关闭图形用户界面 sudo systemctl set default mul
  • python程序docker化部署

    启动docker systemctl start docker 启动docker systemctl enable docker 设置开机自启动docker systemctl status docker 查看docker状态 步骤 xff
  • 嵌入式(一)——MPU9250九轴学习

    加速度计对四轴或小车的加速度比较敏感 xff0c 取瞬时值计算倾角误差比较大 xff1b 而陀螺仪积分得到的角度不受小车加速的的影响 xff0c 但是随着时间的增加积分漂移和温度漂移带来的误差比较大 xff0c 所以这两个传感器正好可以弥补
  • jetson nano Docker化部署

    Docker安装 1 安装docker https docs docker com engine install ubuntu sudo apt get update sudo apt get install apt transport h
  • 钢筋盘点计数数据集图片展示

    数据集分为训练集和测试集 xff0c 其中训练集共有569张已标注图片 xff0c 测试集共有85张未标注图片 xff0c 共计654张 其图片质量与标注质量满足工业化生产实际需要 xff0c 质量保障 有需要的可以到我的资源中进行下载 x
  • Windows下使用pip安装包 出错 TLS/SSL

    Windows下使用pip安装包的时候出现如下问题 xff1a WARNING pip is configured with locations that require TLS SSL however the ssl module in

随机推荐

  • opencv模板匹配步骤及Code

    opencv模板匹配步骤及Code 首先介绍一下模板匹配的适用场景 xff1a 1 图像检索 2 目标跟踪 简单的说 xff0c 模板匹配最主要的功能就是在一幅图像中去寻找和另一幅模板图像中相似度最高的部分 xff0c 这就是模板匹配 比如
  • Tensorflow简单项目讲解

    Tensorflow简单项目讲解 转载请注明出处 xff1a https blog csdn net qq 41007606 article details 81906486 这里对Tensorflow就不在做具体介绍了 xff0c 直接切
  • Keras Model模型方法

    Model模型方法 compile compile self optimizer loss metrics 61 None loss weights 61 None sample weight mode 61 None weighted m
  • 关于Keras的“层”(Layer)——常用层

    所有的Keras层对象都有如下方法 xff1a layer get weights xff1a 返回层的权重 xff08 numpy array xff09 layer set weights weights xff1a 从numpy ar
  • Centos7 glibc库升级到2.23(实测可行)

    注意 xff1a Centos 为了稳定使用的glibc版本通常比较低 而安装有些程序需要依赖新版本 升级glibc需要慎重 xff0c 因很多人升级失败后导致系统不能用了 本人亲测 xff0c 升级了多台机器 xff0c 全部升级成功 g
  • [linux]wsl环境挂载window共享文件

    场景 xff1a 公司有一台内网的机器用来共享文件 xff0c 这里面的磁盘都是T级以上 xff0c 平时大家都是把文件存储到这台电脑上 xff0c 确保公司的资源安全 如果要用脚本来处理文件 xff0c 就需要挂载到内网的linux服务器
  • 最简单C/C++数据可视化函数库MathGL配置方法

    1 简介 xff1a MathGL是一个可用于C C 43 43 数据可视化的函数库 xff0c 可以对不同种类的数据进行可视化 由于MathGL本身不具有显示功能 xff0c 需要配合opencv以及其他可视化工具才能够显示图形 由于目前
  • 数学建模系列-优化模型---(一)规划模型

    数学建模中我们经常遇到的一种问题是给定一些条件 xff0c 目标是求得基于单或者多自变量的某个条件之的最优结果 一 线性规划模型 给定多个条件 xff0c 求某一个线性方程的最大值 xff08 对与这种问题 xff0c 我们一般采用的是最普
  • Linux----网络编程(相关名词概念)

    网络编程即编写通过计算机网络与其他程序进行通信的这类程序 相互通信的网络程序中 xff0c 一方称为客户程序 xff08 client xff09 xff0c 另一方称为服务器程序 server 计算机网络 xff08 简称网络 xff09
  • Python 列表参数 修改与赋值 对外部变量的影响

    两个函数 def test1 alist 对参数列表进行修改 alist 0 61 233 alist append 33 def test2 alist 对参数列表进行赋值 alist 61 9 5 1 10 调用结果 alist 61
  • APM配置

    开源飞控apm配置研究 项目介绍引言配置之前的文件准备我的配置过程配置文件链接小结 项目介绍 项目 xff1a 自动驾驶无人船 是老师的一个课题 xff0c 我们负责控制算法相关 当然 xff0c 也免不了要搬砖 做之前老师说 xff0c
  • python opencv实践 图像去畸变

    目录 前言镜头成像畸变原因去畸变方法python去畸变输入代码结果 前言 由于相机的镜头并不完全理想 xff0c 成像时会产生线条扭曲 失真等 对双目图像 鸟瞰图等进行处理时 xff0c 首先要矫正去畸变 镜头成像畸变原因 相机的镜头前有一
  • 通过直链下载google网盘里的文件

    目录 前言通过直链云下载保存在google drive的datasets 前言 科研学习的时候 xff0c 很多数据集是保存在google drive上的 xff0c 正常情况下国内打不开 xff0c 也就下载不了 于是我翻到了一个解决方法
  • 机器人建图算法2.1从栅格占据地图到ESDF地图

    机器人建图算法2 1从栅格占据地图到ESDF地图 前言论文解读示意图说明伪代码说明算法流程 总结 前言 最基础的地图是占据栅格地图Occupancy map xff0c 每个格子标明了该位置是否被物体占据 然而对于规划和避障而言 xff0c
  • 控制算法学习 一、卡尔曼滤波(1)以小车为例

    控制算法学习 一 卡尔曼滤波 xff08 1 xff09 以小车为例 前言线性系统状态方程和观测方程举例 卡尔曼滤波状态预测状态更新 卡尔曼滤波流程图 前言 卡尔曼滤波 xff08 Kalman Filter KF xff09 是最经典的传
  • ROS python3使用cv_bridge报错,在melodic中使用python3 cv_bridge

    ROS cv bridge报错 xff1a 在melodic中使用python3 43 cv bridge 问题描述解决方案使用方法2022 7补充 问题描述 ROS与opencv之间的数据类型转换是通过cv bridge这个包来实现的 m
  • 控制算法学习 四、扩展卡尔曼滤波EKF

    控制算法学习 四 扩展卡尔曼滤波EKF 前言非线性系统状态 观测方程线性化扩展卡尔曼滤波EKF后记 前言 经典卡尔曼滤波的使用场景是线性系统 xff0c 但现实应用时 xff0c 大多数系统都是非线性的 扩展卡尔曼滤波 xff08 Exte
  • ROS学习十、无人机通信模块mavros(1)常用的mavros消息类型

    ROS学习十 无人机通信模块mavros xff08 1 xff09 常用的mavros消息类型 前言数传全局位置IMU惯导本地位置飞控命令设置飞行位点 速度 加速度系统状态系统时间其它 前言 mavros用于无人机通信 xff0c 可以将
  • PX4FLOW--光流评价

    做了有三个月的光流 xff0c 进度很慢 过程如下 xff1a 1 从光流算法原理入手 xff1b 2 再了解PX4FLOW模块 xff1b 3 将相机曝光时间分三个等级保证输出频率在120HZ以上 xff1b 4 修改flow c部分源码
  • 视觉SLAM十四讲学习5 位姿估计(2)本质矩阵的计算

    视觉SLAM十四讲学习5 位姿估计 xff08 2 xff09 本质矩阵的计算 前言本质矩阵的性质本质矩阵计算五点法八点法 位姿计算对极几何计算本质矩阵的问题后记 前言 本篇详细推导对极几何中 xff0c 本质矩阵的计算 本质矩阵的性质 根