视觉SLAM——位姿估计

2023-05-16

******看完位姿估计原理过一段时间又忘记了,现参考高翔视觉SLAM十四讲做本文笔记。
SLAM中的里程计都是基于特征点方式的算法。

1.特征匹配
特征匹配是视觉SLAM中极为关键的一步,它解决了数据关联问题。通过图像与图像或图像与地图间描述子进行准确匹配,可以为后续姿态估计、优化等操作减轻大量负担。由于图像特征的局部特性、误匹配、重复纹理等,仅利用局部特征很难解决问题。首先讨论图像与图像匹配情况。不同相机匹配原理不一样,2D-2D:对极几何, 3D-3D:ICP, 3D-2D: PnP,本文重点考虑3D-3D的情况。

2.3D-3D: ICP
假设有一对匹配好的3D点:P=\{p_1,...,p_n\},P'=\{p'_1,...,p'_n\},寻找一个欧氏变换R,t使,这个问题使用迭代最近点ICP求解。ICP的求解有两种方式:线性代数的求解(SVD),非线性优化方式(BA).
2.1SVD方法的一般步骤如下:
a.计算两组点的质心位置p,p',然后计算每个点的去质心坐标:q_i=p_i-p,q_i'=p'_i-p'.
b.根据以下优化问题计算旋转矩阵:R^*=arg \underset{R}{min}\frac{1}{2}\sum_{i=1}^{n} \left \| q_i-Rq_i'\right \|^2.
c.根据第二步的R,计算t:t^*=p-Rp'.
2.2非线性优化方法:以迭代方式寻找最优值
以李代数表达位姿时,目标函数可以写成\underset{\xi }{min}=\frac{1}{2}\sum_{i=1}^{n} \left \| (p_i)-exp(\xi^\wedge ){p_i}'\right \|_2^2,使用李代数扰动模型得到:。不断迭代找到极小值。具体BA的求解参考https://blog.csdn.net/xranmail/article/details/86486759.

3.李群李代数参考(https://blog.csdn.net/xiaocainiaodeboke/article/details/75041547)
使用2.2中非线性优化方法求解ICP问题时,需用李代数表达位姿。使用重投影计算位姿的表达式为:
T^*=min\frac{1}{2}\sum_{i=1}^{n} \left \| u_i-\frac{1}{s_i}KTP_i\right \|^2.Pi是3D点, ui是Pi对应的像素位置, K为相机内参矩阵,si为ui对应的深度值。直接对上式求导无法解出,因为 T满足以下约束:T=\begin{bmatrix}R & t \\ o^T &1 \end{bmatrix}, RR^T=I,det(R)=1,t\in R^3.R为旋转矩阵,它是正交矩阵并且行列式为1,t是平移向量。在求解T的时候,必须考虑到T满足的约束,那么这个问题就变成了有约束优化问题.可以去另外一个空间求解,比如李代数,可以将位姿表达式转化为无约束问题,然后很方便的通过GN法\LM法等优化算法求解。
3.1 群:一种集合加上一种运算的代数结构,把集合记为A,运算记为 .,群可以记为G=(A,.)
群要求这个运算要满足封闭性,结合律,幺元和可逆。矩阵中常见的群有:a.一般线性群GL(n):指n×n的可逆矩阵,它们对矩阵乘法成群;b.特殊正交群SO(n):就是旋转矩阵群,其中SO(2),SO(3)最为常见;c.特殊欧式群SE(n):就是n维欧式变换,其中SE(2),SE(3)最为常见。群结构保证了在群上的运算具有良好的性质,李群是指具有连续性质的群。SO(n),SE(n)在实数空间上是连续的,可以直观的感觉到一个刚体能够在空间中连续运动,所以SO(n)和SE(n)都是李群。那么相机的位姿就可以表示为:
SO(3)=\{R\in \mathbb{R}^{3\times3} }|RR^T=I,det(R)=1\}; SE(3)={T=\begin{bmatrix}R & t \\ o^T &1 \end{bmatrix}\in \mathbb{R}^{4\times4}|R\inSO(3),t\in\mathbb{R}^3\},这里说明了相机位姿是特殊欧式群,旋转矩阵是特殊正交群。
3.2李群和李代数相互转化
    
3.3 李代数的求导
使用李代数解决问题的求导思路分为两种:
step 1. 用李代数表示位姿,然后根据李代数加法来对李代数求导.
step 2. 对李群左乘或者右乘微小扰动量,然后对该扰动求导,成为左扰动和右扰动模型.
step1: 首先关于旋转矩阵对应的李代数SO(3)求导,第一种的求导过程,如下:
\frac{\partial exp(\phi^\land)p}{\partial\phi}=\underset{\delta\phi->0}{lim}\frac{exp((\phi+\delta\phi)^\land)p-exp(\phi^\land)p}{\delta\phi}=\underset{\delta\phi->0}{lim}\frac{exp((J_l\delta\phi)^\land)exp(\phi^\land)p-exp(\phi^\land)p}{\delta\phi}\approx
\underset{\delta\phi\rightarrow 0}{lim}\frac{(I+J_l\delta\phi)exp(\phi^\land)p-exp(\phi^\land)p}{\delta\phi}=\underset{\delta\phi\rightarrow0}{lim}\frac{(J_l\delta\phi)^\land exp(\phi^\land)p}{\delta\phi} =\underset{\delta\phi\rightarrow0}{lim}\frac{-(exp(\phi^\land)p)^\land J_l\delta\phi}{\delta\phi}=-(Rp)^\land J_l


这样就得到了旋转后点相对于李代数的导数:\frac{\partial(Rp)}{\partial\phi}=-(Rp)^\land J_l,由于旋转矩阵对应的李代数是一个三维向量,所以我们可以用模长与单位向量的乘积表示。ϕ=θa, θ为模长,a为单位向量。
附:f(x)的导数为
step 2.接下来计算旋转矩阵李代数的左扰动模型,左乘一个微小扰动,对微小扰动求导:
\frac{\partial(Rp)}{\partial\varphi}=\underset{\varphi->0}{lim}\frac{exp(\varphi^\land)exp(\phi^\land)p-exp(\phi^\land)p}{\varphi}\approx\underset{\varphi->0}{lim}\frac{(1+\varphi^\land)exp(\varphi^\land)p-exp(\varphi^\land)p}{\varphi}=\underset{\varphi->0}{lim}\frac{\varphi^\land Rp}{\varphi}=\underset{\varphi->0}{lim}\frac{-(Rp)\varphi^\land }{\varphi}=-(Rp)^\land
,这种方式省去了计算雅克比Jl,
使用左扰动模型SE(3)上的李代数求导如下:

有了李群和李代数相互转换公式,李代数上的导数,那么我们就可以将位姿求解公式用李代数重新表达如下:
e=\xi^*=arg min\frac{1}{2}\sum_{i=1}^{n} \left \| u_i-\frac{1}{s_i}Kexp(\xi^\land)P_i\right \|^2_2,对这个式子使用左扰动模型,利用链式法则展开:

相机投影模型相对于P‘为:,消去s后,
得到,求导的第二项前面已经给出,取出这部分的前三行,然后两个导数项相乘,就可以得到一个2*6的雅克比矩阵:
。如果变换矩se(3)的旋转在前,平移在后,只需要将上式的前面3列和后面3列对调即可。有了李代数表示,下一步可以利用一些优化库(ceres,g2o)计算。

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

视觉SLAM——位姿估计 的相关文章

  • 坐标变换与基变换到底哪个左乘,哪个右乘??

    Version Date By Change Cost A 2020 3 18 AYZP First Version 三小时 前言 学习目的 1 坐标变换与基变换到底哪个左乘 哪个右乘 答案 根本就是由基和坐标的维数决定其到底左乘还是右乘
  • 《视觉SLAM十四讲》学习笔记-第四讲部分习题的证明思路

    1 验证SO 3 SE 3 和Sim 3 关于乘法成群 证明 先看SO 3 定义为 SO 3 R R3 3 RR I det R 1 S O 3 R
  • Ubuntu20.04编译安装opencv3.2和opencv_contrib-3.2

    图像特征提取中需要用到SIFT等算法 因此不得不安装从源码编译安装opencv contrib 网上有很多教程 但是在不同的环境下多少会出现一些错误 针对Ubuntu20 04 gcc 7环境下对opencv opencv contrib编
  • ROS STAGE教程2(地图定义和GMAPPING建图)

    目前用在ROS Kinetic上的stage版本为4 1 官方教程http rtv github io Stage modules html 用户可以用stage或者gazebo来创建地图和机器人 传感器模型来进行仿真 并与自己的SLAM模
  • 《视觉SLAM十四讲》第一版源码slambook编译调试

    slambook master ch2 编译正常 log如下 slambook master ch2 mkdir build cd build cmake make j8 The C compiler identification is G
  • ROS激光SLAM导航理解

    ROS激光SLAM导航理解 注 最近学习ROS的激光导航知识 需要理清ROS的SLAM 环境感知 costmap 与导航算法 为防止自己忘记 将觉得有价值的内容收集于此 对AGV来说 SLAM是个大大坑 环境感知和局部运动控制也是大坑 学习
  • 各向异性(anisotropic)浅提

    文章目录 各向异性 anisotropic 定义 哪种物体具有各向异性反射 什么导致各向异性反射 总结 各向异性 anisotropic 定义 它指一种存在方向依赖性 这意味着在不同的方向不同的特性 相对于该属性各向同性 当沿不同轴测量时
  • np.meshgrid()函数 以及 三维空间中的坐标位置生成 以及 numpy.repeat()函数介绍

    一 np meshgrid 函数 1 np meshgrid 介绍 X Y np meshgrid x y 代表的是将x中每一个数据和y中每一个数据组合生成很多点 然后将这些点的x坐标放入到X中 y坐标放入Y中 并且相应位置是对应的 下面是
  • 速腾聚创雷达最新驱动安装(包含ring和timestamp)运行lio-sam

    记录一下搞slam的过程 ring和timestamp 最近想跑lio sam 需要用到ring和timestamp两个参数 lio sam作者用的velodyne雷达是带这两个参数的 但是rs雷达的老版驱动录制的点云包没有这两个参数 在g
  • 对最小二乘法的一点理解 - slam学习笔记

    我对最小二乘法的理解 在给定参数个数和函数模型之后 根据测试数据 找出与所有测试数据的偏差的平方和最小的参数 这里面应该有两个问题 1 为什么选取与真实数据平方和最小的拟合函数 2 如何求参数 为什么选取与真实数据平方和最小的拟合函数 极大
  • 【SLAM】libQGLViewer:VS 2019 + Qt 5.14.2 + Win 10 配置

    libQGLViewer 2 7 2 VS 2019 Qt 5 14 2 Win 10 配置 注意 这次配置没有完全成功 编译25个成功 一个失败 失败的是 qglviewerplugin qglviewerplugin 是一个可选控件 不
  • 关于GPS、惯导、视觉里程计的几个定义

    1 首先写几个定义 惯性导航系统 Inertial Navigation System INS 全球定位卫星系统 Global Navigation Satellite System GNSS GNSS 包括全球定位系统 Global Po
  • PnP 问题

    欢迎访问我的博客首页 PnP 问题 1 DLT 2 P3P 3 G2O 求解 PnP 3 1 单目 3 2 双目 4 自定义顶点与边优化内参 4 1 二元边 4 2 三元边 4 3 总结 5 参考 PnP Perspective n Poi
  • SLAM-hector_slam 简介与使用

    hector slam功能包使用高斯牛顿方法 不需要里程计数据 只根据激光信息便可构建地图 所以他的总体框架如下 hector slam功能包 hector slam的核心节点是hector mapping 它订阅 scan 话题以获取SL
  • ORB-SLAM2:基于可识别特征的自主导航与地图构建

    目录 ORB SLAM2 基于可识别特征的自主导航与地图构建 简介 地图 A 地图特征点或3D ORB B 关键帧 C 可视化图像 位置识别 A 图像识别数据库 B 高效优化的ORB匹配 C 视觉一致性 自主导航追踪 A ORB特征获取 B
  • LeGO-LOAM代码详细注释版

    学习LeGO LOAM时 写的代码注释github代码链接 一部分注释来自github用户wykxwyc 一部分来自网上查阅 还有一部分是自己的理解 持续更新中
  • 用Eigen库练习代数运算方式以便后续对刚体旋转和移动做基础

    include
  • 快看!那个学vSLAM的上吊了! —— (一)综述

    不同于之前发布的文章 我将使用一种全新的方式 iPad Notability Blog的方式打开这个板块的大门 原因有两个 1 Notability更方便手写长公式 也方便手绘坐标系变换等等 2 之前Apple Pencil找不到了新破费买
  • Ceres Solver从零开始手把手教学使用

    目录 一 简介 二 安装 三 介绍 四 Hello Word 五 导数 1 数值导数 2解析求导 六 实践 Powell函数 一 简介 笔者已经半年没有更新新的内容了 最近学习视觉SLAM的过程中发现自己之前学习的库基础不够扎实 Ceres
  • 视觉SLAM漫谈

    视觉SLAM漫谈 1 前言 开始做SLAM 机器人同时定位与建图 研究已经近一年了 从一年级开始对这个方向产生兴趣 到现在为止 也算是对这个领域有了大致的了解 然而越了解 越觉得这个方向难度很大 总体来讲有以下几个原因 入门资料很少 虽然国

随机推荐