视觉SLAM理论——位姿的理解与间接求解

2023-05-16

目录:
  • 位姿的定义
  • 位姿与变换矩阵的区别与联系
  • 位姿的求解方法
位姿的定义

  在SLAM中,位姿是世界坐标系相机坐标系的变换,包括旋转平移。根据以上定义可以衍生以下几个问题:

1.世界坐标系在哪?
通常世界坐标系是自己定义的,一经定义,便不可更改,通常构图所用点的坐标便是世界坐标系下的坐标。

2.相机坐标系在哪?
相机坐标系是指以相机的光心为原点所构成的坐标系,由于相机是运动的,所以相机坐标系也是运动的。

3.如何表达位姿?
位姿通常以三维空间中的欧式变换来表示,变换矩阵T最常用,也可以分别用旋转R和平移向量t来表示。因为相机坐标系是运动的,所以位姿也是变换的。

  设一点 P P P在世界坐标系下的坐标为 p w p_w pw,相机坐标系下的坐标为 p C p_C pC,根据位姿的定义有:

p w = T 1 ∗ p c p_w=T_1*p_c pw=T1pc
p c = T 2 ∗ p w p_c=T_2*p_w pc=T2pw

  通常把 T 1 , T 2 T_1,T_2 T1,T2记作 T c w Tcw Tcw T w c Twc Twc,其中 T 1 , T 2 T_1,T_2 T1,T2是互为逆矩阵,因此有:

p w = T w c ∗ p c p_w=Twc*p_c pw=Twcpc
p c = T c w ∗ p w = T w c − 1 ∗ p w p_c=Tcw*p_w=Twc^{-1}*p_w pc=Tcwpw=Twc1pw

   T w c , T c w Twc,Tcw Twc,Tcw是位姿的两种表达方式,实际过程中根据情况自己选择。

位姿与变换矩阵的区别与联系

  由定义可知,位姿本质上是变换矩阵,特指世界坐标系与相机坐标系之间的变化关系。
  而变换矩阵是任意两个空间(坐标点)之间的欧式变换关系。
在这里插入图片描述
  图中的Ti为位姿,Tij为变换矩阵,分别表达了不同坐标系之间的变换。

位姿的求解方法

  这里讨论的是位姿的一种间接求解方法,不同于重投影误差优化,对极约束等直接求解方法,这类求解方法常常是作为位姿直接求解方法的初始值。关于直接求解位姿的方法可参考前面写的一系列文章。
在这里插入图片描述
  如图所示,结合上面的基本推倒,有以下式子成立:

p c 1 = T 1 ∗ p w p_{c1}=T_1*p_w pc1=T1pw
p c 2 = T 2 ∗ p w p_{c2}=T_2*p_w pc2=T2pw
p c 2 = T 12 ∗ p c 1 p_{c2}=T_{12}*p_{c1} pc2=T12pc1

  利用前面两式进行代换:

T 2 ∗ p w = T 12 ∗ T 1 ∗ p w T_2*p_w=T_{12}*T_1*p_w T2pw=T12T1pw

  约去 p w p_w pw得:

T 12 = T 2 T 1 − 1 T_{12}=T_2T_1^{-1} T12=T2T11
T 2 = T 12 ∗ T 1 T_2=T_{12}*T_1 T2=T12T1

   T 12 T_{12} T12是一类特殊的变换矩阵,表达的是相机之间的运动,并且跟位姿有着非常密切的联系。在实际的使用过程中,通常可以按照以下步骤进行使用:

1.利用初始化算法得到 T 1 , p c 1 T_1,p_{c1} T1,pc1
2.设定一个初始值 T 12 T_{12} T12
3.令 T 2 = T 12 ∗ T 1 , p c 2 = p c 1 T_2=T_{12}*T_1,p_{c2}=p_{c1} T2=T12T1,pc2=pc1,得到一个初步的 T 2 T_2 T2 p c 2 p_{c2} pc2
4.利用重投影误差重新估计 T 2 T_2 T2 p c 2 p_{c2} pc2
5.重新更新 T 12 T_{12} T12
6.令 T 3 = T 12 ∗ T 1 , p c 3 = p c 2 T_3=T_{12}*T_1,p_{c3}=p_{c2} T3=T12T1,pc3=pc2,得到一个初步的 T 3 T_3 T3 p c 3 p_{c3} pc3…依次类推求得每一个 T i j , p c i T_{ij},p_{ci} Tijpci

  经过1234,一帧图像的优化过程便结束了,后面是进行连续的图像追踪与优化。

  值得注意的是,我们可以把世界坐标系的原点与相机的原点重合,这样得到的 T i j T_{ij} Tij会更特殊,会直接包含位姿中的平移信息。

参考文献:
[1]视觉SLAM十四讲
[2]https://blog.csdn.net/cnn_block/article/details/88790909

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

视觉SLAM理论——位姿的理解与间接求解 的相关文章

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

    Version Date By Change Cost A 2020 3 18 AYZP First Version 三小时 前言 学习目的 1 坐标变换与基变换到底哪个左乘 哪个右乘 答案 根本就是由基和坐标的维数决定其到底左乘还是右乘
  • 每日浅读SLAM论文——简析Cartographer

    文章目录 二维激光SLAM 简单框架 前端 scan matching Submaps构建 后端 分支定界优化csm CorrelativeScanMatch 代码实现框架 Cartographer 论文名 Real Time Loop C
  • SLAM方法汇总

    原文 http blog csdn net smartxxyx article details 53068855 目录 SLAM概述 SLAM一般处理流程包括track和map两部分 所谓的track是用来估计相机的位姿 也叫front e
  • ubuntu系统下配置vscode编译cmake

    文章目录 一 配置vs code运行c 代码 三个关键文件介绍 1 tasks json run helloworld cpp 1 1 打开cpp文件 使其成为活动文件 1 2 按编辑器右上角的播放按钮 1 3生成task文件 1 4 此时
  • 正交矩阵的保范性:正交变换不改变向量的长度(范数)

    在推导使用SVD分解解方程时 用到了正交矩阵的保范性这一性质 1 正交矩阵定义 A mathbf A intercal A A A A
  • 【SLAM】卡尔曼滤波(Kalman Filter)

    卡尔曼滤波 Kalman filter 一种利用线性系统状态方程 通过系统输入输出观测数据 对系统状态进行最优估计的算法 由于观测数据中包括系统中的噪声和干扰的影响 所以最优估计也可看作是滤波过程 卡尔曼滤波器的原理解释如下 首先 我们先要
  • LeGO-LOAM论文翻译(内容精简)

    LeGO LOAM是一种在LOAM之上进行改进的激光雷达建图方法 建图效果比LOAM要好 但是建图较为稀疏 计算量也更小了 本文原地址 wykxwyc的博客 github注释后LeGO LOAM源码 LeGO LOAM NOTED 关于代码
  • LeGO-LOAM 系列(1): LeGO-LOAM 安装以及概述

    一 github GitHub RobustFieldAutonomyLab LeGO LOAM 二 安装依赖 1 ROS Ubuntu 64 bit 16 04 ROS Kinetic 比较常规 就不赘述了 2 gtsam Georgia
  • 图像匹配算法

    图像匹配算法分为3类 基于灰度的匹配算法 基于特征的匹配算法 基于关系的匹配算法 1 基于灰度的模板匹配算法 模板匹配 Blocking Matching 是根据已知模板图像到另一幅图像中寻找与模板图像相似的子图像 基于灰度的匹配算法也称作
  • IMU预积分的一些理解

    IMU预积分 算是比较简单的一个算法 无奈网上找到的资料都讲的晦涩难懂 看明白了也觉得不过如此 讲一下我的理解 整体流程 1 推导IMU离散运动方程 2 根据离散运动方程 进行预积分 并将预积分的误差项拆分出来 因为我们在定义误差的时候 有
  • Lego-LOAM IMU坐标系变换的详细记录

    Lego LOAM IMU坐标系变换的详细记录 0 基础知识 1 IMU 重力加速度消除 2 相机坐标系 camera 到初始坐标系 camera init 的转换 最近看了Lego LOAM 的IMU部分 没看懂IMU的坐标系变换 看其它
  • SLAM-hector_slam 简介与使用

    hector slam功能包使用高斯牛顿方法 不需要里程计数据 只根据激光信息便可构建地图 所以他的总体框架如下 hector slam功能包 hector slam的核心节点是hector mapping 它订阅 scan 话题以获取SL
  • Eigen::aligned_allocator

    如果STL容器中的元素是Eigen库数据结构 例如这里定义一个vector容器 元素是Matrix4d 如下所示 vector
  • 舒尔补-边际概率-条件概率

    margin求边际概率的时候喜欢通过舒尔补的形式去操作信息矩阵 如p b c 求积分p a b c da 从上图可知 边缘概率直接看协方差矩阵比较方便 边际概率的方差就是取对应联合分布中相应的协方差块 信息矩阵是由舒尔补的形式计算 此形式也
  • 【Pytorch论文相关代码】使用SOLD2预训练好的模型检测与匹配线段(自己的数据集)

    文章目录 前言 使用流程 检测与匹配结果 前言 论文链接 SOLD2 Self supervised Occlusion aware Line Description and Detection 论文源码 https github com
  • Ubuntu18.04安装pcl(过程/坑记录式教程)

    Ubuntu18 04安装pcl 1 下载pcl 2 安装依赖项 3 编译 4 安装 5 网上教程说要安装QT5和VTK 但按照本文的 本文记录了安装时出现的问题 出错的安装命令也记录了 建议浏览一遍再参考 不要错用了错误的指令 1 下载p
  • LOAM算法详解

    激光SLAM 帧间匹配方法 Point to Plane ICP NDT Feature based Method 回环检测方法 Scan to Scan Scan to Map LOAM创新点 定位和建图的分离 里程计模块 高频低质量的帧
  • Object SLAM: An Object SLAM Framework for Association, Mapping, and High-Level Tasks 论文解读

    是一篇来自机器人顶刊T RO的文章 发表于2023 5 An Object SLAM Framework for Association Mapping and High Level Tasks 论文 An Object SLAM Fram
  • Eigen几何模块的使用方法

    include
  • Todesk突然高速通道使用已结束

    今天使用Todesk直接报出如下错误 好像对于海外用户需要付费购买海外会员 大家有没有什么可以替换的远程控制软件的吗 能分享一下吗

随机推荐

  • Keil软件仿真

    首先就是配置上面图中的debug xff0c 选择软件仿真 然后是选择芯片 xff0c 根据自己的硬件芯片选择 8号标注是进入该图中的debyg模式 1号标注 xff1a 这个是一个RST按钮 xff0c 和硬件一样是复位的功能 2号标注
  • STM32F103系列NVIC中断优先级分组讲解

    一 简介 CM3内核支持256个中断 xff0c 16个内核中断 xff0c 240个外部中断 xff0c 并且拥有256级的可编程中断设置 但是STM32只用到了CM3内核的一部分 xff0c STM32有84个中断 xff0c 包括16
  • BOM详解

    1 BOM 什么是 Browser Object Model 专门操作浏览器窗口的API 没有标准 DHTML对象模型 window 2个角色 1 代替global作为全局作用域对象 所有全局函数和全局变量都是window的成员 2 封装所
  • ERROR: Could not install packages due to an OSError: [Errno 13] Permission denied问题解决

    Windows Anaconda python3 6 安装依赖包发生错误如下 pip install i https pypi tuna tsinghua edu cn simple r requirements txt user ERRO
  • docker的深入浅出--3.Dockerfile介绍及保留字指令的使用run、entrypoint、onbuild、add和copy关键字以及自定义镜像

    目录 一 Dockerfile介绍 1 centos镜像来理解Dockerfile 2 docker的创建流程 二 Dockerfile的保留字指令 1 自定义centos镜像 xff08 run保留字 xff09 history指令 2
  • 通过MAVROS控制仿真无人机

    首先 xff0c 在目录中建立工作区 xff0c 并进行初始化操作 mkdir p catkin ws src cd catkin ws catkin init wstool init src rosinstall generator ro
  • Jetson nano+T265+PX4实现室内定点飞行

    目录 前言 一 MAVROS的安装 二 Realsense SDK和Realsense ROS的安装 四 给予串口权限 五 在QGC中修改PX4参数 六 启动VIO节点 七 参考文献 前言 1 硬件 飞控 xff1a Pixhawk 6C
  • ros通信之topic通信机制及基于topic的节点通信

    现在的我对于节点node和节点句柄nodehandle的粗俗的理解是 xff1a 节点 xff0c 就是一个进程 xff0c 在ros的环境中叫做节点node 在计算机的工作中叫做进程 xff0c 两者是同时的 xff0c 在ros中 xf
  • inter realsener D435 ROS驱动安装(非源码编译)

    1 安装公钥 sudo apt key adv keyserver keys gnupg net recv key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE sudo apt key adv keys
  • 斜率与倾斜角的关系

    k 61 tan 61 atan k k 斜率 倾斜角
  • NVIDIA JETSON TX2 安装扩展SATA硬盘

    安装扩展硬盘 在dash中搜素disk 进入磁盘管理工具 xff0c 可以看到我们的扩展硬盘 点击磁盘左下角设置按钮 xff0c 进入Format Partition 为硬盘起个名字 xff0c 比如JetsonSSD 250 xff0c
  • Qt——QMessageBox类详解

    QMessageBox类提供了一个模式对话框 xff0c 用于通知用户或询问用户问题并接收答案 我们先来看下QMessageBox information函数的使用 其原型 xff1a static int QMessageBox info
  • 【UWB定位】 - DWM1000模块调试简单心得 - 3

    UWB定位 DWM1000模块调试简单心得 1 UWB定位 DWM1000模块调试简单心得 2 前俩篇介绍了简单的一基站一标签TOF方式测距 xff0c 第三篇我们来搭建一个 一标签三基站 的定位demo 目的 标签与三个基站分别测距 xf
  • 51单片机——计数器与定时器的区别

    定时器和计数器是同一器件 计数器 其共同的特点是都有一个计数脉冲输入端 每输入一个脉冲 计数器就进行加1或减1计数 若计数器件的计数脉冲的频率固定 则可利用计数实现定时 这就是定时器 若计数器件的作用仅仅是记录输入脉冲的多少 则称为计数器
  • vue 中 如何修改【数组中】【对象的值】,解决步骤如下

    原创 https segmentfault com q 1010000012375354 a 1020000012377603 vue 中 如何修改 数组中 对象的值 通过数组的变异方法 xff08 Vue数组变异方法 xff09 我们可以
  • 英伟达Jetson TX2 资源贴

    NVIDIA JETSON TX2 install packages 原创博客 xff0c 欢迎转载 xff0c 请注明博客链接 xff1a 英伟达Jetson TX2 资源贴 资源汇总 jetson tx2 GPIO 解决方案汇总 Jet
  • 研究线程锁之RLock(一)

    死锁 xff1a 是指两个或两个以上的进程或线程在执行过程中 xff0c 因争夺资源而造成的一种互相等待的现象 xff0c 若无外力作用 xff0c 它们都将无法推进下去 此时称系统处于死锁状态或系统产生了死锁 xff0c 这些永远在互相等
  • 虚拟机中使用OpenGL遇到的错误总结

    由于VMware对OpenGL的支持有限 xff0c 目前最新版本的VMware workstation15 Pro只支持到OpenGL3 3的core profile xff08 核心模式 xff09 xff0c 在有条件的前提下建议安装
  • 视觉SLAM——视觉里程计解决方案分析(间接法)

    目录 基本问题 分析各类求解方案优缺点分析 基本问题 视觉里程计是视觉SLAM技术的起点 xff0c 其核心问题同SLAM技术一样 xff0c 主要是定位与构图 xff0c 但视觉里程计解决的核心是定位问题 xff0c 也就是相机的位姿 通
  • 视觉SLAM理论——位姿的理解与间接求解

    目录 xff1a 位姿的定义位姿与变换矩阵的区别与联系位姿的求解方法 位姿的定义 在SLAM中 xff0c 位姿是世界坐标系到相机坐标系的变换 xff0c 包括旋转与平移 根据以上定义可以衍生以下几个问题 xff1a 1 世界坐标系在哪 x