SLAM框架与相关理论梳理

news/2024/12/23 1:24:40/

应该是思维导图的形式使用markmap实现,可以使用md文档在VSCode中添加插件预览,预览图如绑定的那个资源的样式。

效果大概是长这个样子
在这里插入图片描述> 但是CSDN不好用,一堆乱码。这里建议从这个链接中复制下载md文件,使用VSCode的markmap插件查看,或者直接把md的内容复制到markmap网站也能查看。


markmap:
colorFreezeLevel: 50
initialExpandLevel: 10
maxWidth: 600

VSLAM

传感器输入

相机

相机模型

针孔模型
内参模型
  • 相机内参 K K K: ( f x 0 c x 0 f y c y 0 0 1 ) \begin{pmatrix} f_x&0 &c_x \\ 0 &f_y&c_y \\ 0 &0 &1 \end{pmatrix} fx000fy0cxcy1
  • 归一化坐标: [ X / Z Y / Z 1 ] T \begin{bmatrix} X/Z &Y/Z &1 \end{bmatrix}^T [X/ZY/Z1]T
  • 像素坐标: ( u v 1 ) = 1 Z ( f x 0 c x 0 f y c y 0 0 1 ) ( X Y Z ) = 1 Z K P \begin{pmatrix} u\\ v\\ 1\\ \end{pmatrix}=\frac{1}{Z} \begin{pmatrix} f_x&0 &c_x \\ 0 &f_y&c_y \\ 0 &0 &1 \end{pmatrix}\begin{pmatrix} X\\ Y\\ Z\\ \end{pmatrix}=\frac{1}{Z} KP uv1 =Z1 fx000fy0cxcy1 XYZ =Z1KP
畸变模型
  • 径向畸变: x d i s t o r t e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y d i s t o r t e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) \begin{matrix} x_{distorted} = x(1+k_1r^2+k_2r^4+k_3r^6)\\ y_{distorted} = y(1+k_1r^2+k_2r^4+k_3r^6) \end{matrix} xdistorted=x(1+k1r2+k2r4+k3r6)ydistorted=y(1+k1r2+k2r4+k3r6)
  • 切向畸变: x d i s t o r t e d = x + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y d i s t o r t e d = y + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y \begin{matrix} x_{distorted} = x+2p_1xy+p_2(r^2+2x^2)\\ y_{distorted} = y+p_1(r^2+2y^2)+2p_2xy \end{matrix} xdistorted=x+2p1xy+p2(r2+2x2)ydistorted=y+p1(r2+2y2)+2p2xy
  • 畸变后的归一化坐标: x d i s t o r t e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y d i s t o r t e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y \begin{matrix} x_{distorted} = x(1+k_1r^2+k_2r^4+k_3r^6)+2p_1xy+p_2(r^2+2x^2)\\ y_{distorted} = y(1+k_1r^2+k_2r^4+k_3r^6)+p_1(r^2+2y^2)+2p_2xy \end{matrix} xdistorted=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ydistorted=y(1+k1r2+k2r4+k3r6)+p1(r2+2y2)+2p2xy
  • 畸变后的像素坐标: u = f x x d i s t o r t e d + c x v = f y y d i s t o r t e d + c y \begin{matrix} u=f_xx_{distorted}+c_x\\ v=f_yy_{distorted}+c_y \end{matrix} u=fxxdistorted+cxv=fyydistorted+cy

相机类型

单目RGB
双目RGB
双目相机模型
  • 相似三角形关系:$\frac{z-f}{z} = \frac{b-u_L+u_R}{b} , 其中 ,其中 ,其中b$是双目相机的基线,两个水平放置的相机光圈在x轴上的距离。
  • 深度值 z = f b d z = \frac{fb}{d} z=dfb,视差 d = d e f u L − u R d\overset{def}{=}u_L-u_R d=defuLuR b b b是基线
深度图像RGB-D

IMU

IMU参数

积分方法

预积分
中值积分

外参标定

前端里程计 Visual Odometry

图像预处理

特征提取

  • 外观相似的特征应该具有相似的描述子

ORB特征 Oriented FAST

  • FAST角点 3像素半径灰度值变化明显的点
  • 尺度不变性:使用图像金字塔放缩关系处理尺度不变性
  • 旋转不变性:通过灰度质心和几何中心确定特征点的方向
  • BRIEF描述子
  • 使用FAST关键点的方向计算Steer BRIEF获得ORB描述子的旋转不变性

SIFT特征 Scale-Invariant Featrue Transform尺度不变特征变化

  • 先进行非极大抑制,再去除低对比度的点,再通过Hessian矩阵去除边缘响应过大的点。
  • 利用不同尺寸的图像与高斯差分滤波器卷积
  • 在正方形区域内统计梯度幅值的直方图,直方图最大值对应主方向,可以有多个主方向
  • 描述子:128维度: 4 ∗ 4 ∗ 8 4*4*8 448
  • 旋转、尺度、亮度不变性,对视角、仿射变换、噪声保持稳定性

SURF特征

  • 先利用Hessian矩阵确定候选点,然后进行非极大抑制
  • 利用原图片与不同尺寸的方框滤波器(box filter)卷积。
  • 在圆形区域内计算各个扇形范围内x、y方向的haar小波响应,模最大的扇形方向作为主方向
  • 描述子:64维度: 4 ∗ 4 ∗ 4 4*4*4 444

特征匹配

基于描述子

暴力匹配 Brute-Force Matcher
快速近似最近邻匹配 GLANN

基于光流

稀疏光流
Lucas-Kanade 光流
  • 灰度不变假设
  • 假设图像块中的像素具有相同的运动
  • 多层光流,以获得比较好的初始运动估计
稠密光流

计算当前相机位姿

  • 2D-2D、2D-3D、3D-3D都有个前提: 已知匹配关系

2D-2D 对极几何

本质矩阵E和基础矩阵F
  • 约束关系: x 2 T E x 1 = p 2 T F p 1 x_2^TEx_1 = p_2^TFp_1 <

http://www.ppmy.cn/news/1022187.html

相关文章

【JS常见数据结构】

JS数据结构 前言数组JavaScript 中数组的常见操作&#xff1a;1. 创建数组&#xff1a;2. 访问数组元素&#xff1a;3. 插入元素&#xff1a;4. 删除元素&#xff1a;5. 查询元素&#xff1a; 链表单向链表双向链表循环链表 栈队列树二叉树示例 图图的定义图的分类图的表示方法…

MAUI+Blazor 如何开启浏览器调试工具

文章目录 前言如何开启调试模式输入快捷键打开浏览器有什么意义&#xff1f; 前言 MAUIBlazor其实就是浏览器套壳&#xff0c;我觉得很有意义&#xff0c;因为现在性能已经不是主要的限制了&#xff0c;很多时候讲究的快速开发。而且MAUIBlazor跨平台的未来感觉实在是太香了。…

5.全局ts类型的抽取

大家开发的时候&#xff0c;基本都会把TS类型抽取出来&#xff0c;然后每次都要把TS的类型导出&#xff0c;再引入后使用&#xff0c;这样会很麻烦&#xff0c;那么有没有办法可以直接使用&#xff0c;不用导出导入&#xff0c;下面这个方法可以实现。 1.在src平级的目录下新建…

Nodejs+vue+elementui汽车租赁管理系统_1ma2x

语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 前端nodejsvueelementui, 课题主要分为三大模块&#xff1a;即管理员模块、用户模块和普通管理员模块&#xff0c;主要功能包括&#…

JS逆向系列之猿人学爬虫第11题 - app抓取 - so文件协议破解

题目地址 http://match.yuanrenxue.com/match/11这是个app题目,先下载下来安装到测试手机上 安装完成后的app界面长这样 打开之后是这样的: 要求已经简单明了了。 二话不说先反编译app 不出意外的是没出意外,源代码里面没啥混淆,所有东西都展示的明明白白的。 "…

【UE4 RTS】08-Setting up Game Clock

前言 本篇实现的效果是在游戏运行后能够记录当前的游戏时间&#xff08;年月日时分秒&#xff09;&#xff0c;并且可以通过修改变量从而改变游戏时间进行的快慢。 效果 步骤 1. 在Blueprints文件夹中新建如下两个文件夹&#xff0c;分别命名为“GameSettings”、“Player”…

MFC第二十九天 CView类的分支(以及其派生类的功能)、MFC六大关键技术

文章目录 CView类的分支CEditViewCHtmlViewMainFrm.h CMainFrame 类的接口CMainView .h CListCtrl与CListView的创建原理 CTreeViewCTreeCtrl类简介CTreeCtrl类的原理以及常用功能 MFC六大关键技术视图和带分割栏的框架开发与消息路由CLeftView.cppCRightView.hCRightView.cppC…

立创EDA(专业版)画PCB怎么开窗?

阻焊层是开窗&#xff0c;助焊层是开钢网用的 大概的步骤&#xff1a; 1 选择图层&#xff1a;顶层阻焊层&#xff08;如果是想在顶层开窗&#xff09;&#xff1b; 2 画个矩形框框 3 右击点击属性&#xff0c;选择顶层阻焊&#xff1b; 4 利用3D PCB 观察&#xff0c;如果…