视觉SLAM十四讲

SLAM (simultaneous localization and mapping),

也称为CML (Concurrent Mapping and Localization),

即时定位与地图构建,或并发建图与定位。

视觉SLAM_多视图

视觉SLAM_SLAM_02

1 视觉SLAM十四讲ch1~2

https://www.bilibili.com/video/BV16t411g7FR?from=search&seid=12179252473882727723

视觉SLAM_多视图_03

视觉SLAM_可执行_04

视觉SLAM_头文件_05

视觉SLAM_可执行_06

视觉SLAM_可执行_07

视觉SLAM_多视图_08

视觉SLAM_头文件_09

视觉SLAM_可执行_10

视觉SLAM_SLAM_11

视觉SLAM_SLAM_12

视觉SLAM_可执行_13

视觉SLAM_SLAM_14

视觉SLAM_头文件_15

视觉SLAM_SLAM_16

视觉SLAM_可执行_17

视觉SLAM_SLAM_18

基于 视觉的 SLAM

图形定位 与 地形构建 /建图

搭载 特定传感器 的 主体 没有 环境 信息 情况下 运动过程中 建立环境 模型 -----环境描述 离散的点

同时 估计自己的 运动 — 运动模型 当前位置 轨迹

人类看到的 ---- 计算机 看到的 视图矩阵 点 灰度值

去 计算 自己 本身的 运动

三维空间 运动

机器人学

计算机视觉

状态估计理论 有噪声 数据 去 估计 内在 的 变量

视觉SLAM_计算机视觉_19

计算机 视觉 多视图 几何 (拓展几何)

机器人学 状态估计

李群描述

线性 高斯 系统 滤波器

二维激光视觉SLAM_计算机视觉_20

视觉SLAM_计算机视觉_21

证明 — 最优性

刚体运动 旋 平移 单稳电路

eigen 几何模块视觉SLAM_多视图_22

视觉SLAM_可执行_23

单目重建 视觉SLAM_可执行_24视觉SLAM_可执行_25

视觉SLAM_多视图_26

奇异值分解(Singular Value Decomposition) SVD 矩阵论

矩阵微分

矩阵向量求导

视觉SLAM_计算机视觉_27

视觉SLAM_头文件_28

视觉SLAM_可执行_29

视觉SLAM_多视图_30

视觉SLAM_可执行_31

视觉SLAM_多视图_32

视觉SLAM_多视图_33

视觉SLAM_可执行_34

视觉SLAM_SLAM_35

视觉SLAM_计算机视觉_36

视觉SLAM_可执行_37

视觉SLAM_多视图_38

linux 编译 运行 程序 调试

工程管理 Cmake视觉SLAM_SLAM_39

局部 整体

2 3 维度视觉SLAM_SLAM_40

定位 建图 耦合

误差 全局优化 求解

视觉SLAM_SLAM_41

MU传感器

激光

相机

连续的 视频流

处理器 资源

工作环境 环境无遮挡 环境纹理 光差变化 静态刚体视觉SLAM_计算机视觉_42

视觉SLAM_多视图_43

视觉SLAM_头文件_44

(1)结构光(Structured-light),代表公司有奥比中光,苹果(Prime Sense),微软 Kinect-1,英特尔 RealSense, Mantis Vision 等。

(2)双目视觉(Stereo),代表公司 Leap Motion, ZED, 大疆;

(3)光飞行时间法(TOF),代表公司微软 Kinect-2,PMD,SoftKinect, 联想 Phab。

近大远小

单目 需要 运动 才能确定 位置 距离

有一个 尺度 的 不确定性 视觉SLAM_多视图_45

视觉SLAM_计算机视觉_46

双目 左右眼 有偏差 距离

每一张 照片 每一个像素 的 位置 视觉SLAM_SLAM_47

点 与 深度

三维结构

功耗 稍大

深度值准确

量程 较近

测量手段 受干扰 tof 红外光 (室内 好)

视觉SLAM_多视图_48

视觉SLAM_多视图_49

步与步 之前 运动 累加 知道运动轨迹

图像 与 图像 运动 叠起来 帧与下一帧 局部 帧 的 运动 估计 运动

得到 局部相机 运动 局部地图 表示

时间久了 容易 偏移 因为 叠加 误差

所以 来一个 全局 优化

再 回环 里程计 回到 之前的 地方 来调整 估计 符合 回环检测 的 结果

得到 特征点 地图

无法做 导航与 避障 (不知道 里面的 点 可不可以 通过 ) 所以 需要有 重建 视觉SLAM_头文件_50

多视图 几何 过一遍

视觉SLAM_计算机视觉_51

滤波器

图优化

梯度下降 高斯牛顿

位姿图视觉SLAM_头文件_52

视觉SLAM_计算机视觉_53

视觉SLAM_头文件_54

运动方程 知道 怎么从 上一个 时刻 去 下一个时刻

抽象的 运动方程

纯视觉 的 不知道 相机 怎么运动 没有输入 就 不知道 这个 运动方程

视觉SLAM_多视图_55

知道 运动 还得 知道 这个 时刻 的 观测

又 得到 这个 抽象 观测 方程 (多个 一个位置 观测 了 好几个 路标 )

vk噪声项 视觉SLAM_计算机视觉_56

状态估计 优化 内容

视觉SLAM_头文件_57

视觉SLAM_头文件_58

视觉SLAM_头文件_59

视觉SLAM_头文件_60

视觉SLAM_计算机视觉_61

视觉SLAM_SLAM_62

视觉SLAM_多视图_63

视觉SLAM_可执行_64

视觉SLAM_计算机视觉_65

视觉SLAM_头文件_66

视觉SLAM_SLAM_67

makefile 也有点麻烦

用 cmake视觉SLAM_计算机视觉_68

视觉SLAM_SLAM_69指定 cmake 版本

project 新建工程

通过 main cpp 编译成 hellslam 可执行程序

视觉SLAM_SLAM_70

视觉SLAM_可执行_71

按照 cmake 语法 视觉SLAM_多视图_72

指定 当前目录 一个点

给出 编译信息  编译器   ---  makefile

​ cmake 自动生成的 视觉SLAM_可执行_73

make 就开始编译 了 视觉SLAM_多视图_74

生成了 一堆 中间文件 视觉SLAM_多视图_75

视觉SLAM_头文件_76

新建文件夹

在上层文件 进行编译

产生的 临时文件 在 这个 临时文件夹

上层 文件 夹 是 干净的 分层清晰 视觉SLAM_SLAM_77

可以删除 build 临时 cmake编译文件 视觉SLAM_可执行_78

视觉SLAM_头文件_79

视觉SLAM_SLAM_80

一些类 可以在 可执行 程序 里 调用 视觉SLAM_头文件_81

对 库 的 演示 视觉SLAM_头文件_82

视觉SLAM_可执行_83

生成一个 libhello.a

本身打了个包 对刚才的 函数

要调用 hello 这个 函数 还需要一个 h 文件 头文件 告诉 说 库里面 有 这么一个 函数 视觉SLAM_SLAM_84

视觉SLAM_计算机视觉_85

视觉SLAM_计算机视觉_86

防止重新编译

声明一下

hello.cpp 提供函数 的 实现

h cpp 构成了 一个 完整的 库

可以在 其他程序 调用 视觉SLAM_头文件_87

视觉SLAM_多视图_88

视觉SLAM_多视图_89

视觉SLAM_可执行_90

视觉SLAM_计算机视觉_91

视觉SLAM_头文件_92

视觉SLAM_多视图_93

在头文件 里 引用 一个 函数

在 main 里 进行调用 视觉SLAM_可执行_94

链接到 之前编译 的 库 上面

注意 语法

可执行 文件 链接到 库 上面

就可以找到 另一个源文件 里 的 函数 了 视觉SLAM_计算机视觉_95

别人的 东西

有了 这个 头文件 和 库文件 就可以 调用

在自己的 程序 使用 视觉SLAM_可执行_96

编译过程

分成 两部

1 编译器 编译

2 链接器 链接 (链接到 之前的 库 上面 )

才能 完整的 进行 调用 视觉SLAM_SLAM_97

视觉SLAM_可执行_98

视觉SLAM_多视图_99

能通过编译

过不了链接

未定义的 引用 视觉SLAM_头文件_100

视觉SLAM_头文件_101

ide 的 使用 视觉SLAM_多视图_102

视觉SLAM_头文件_103

视觉SLAM_多视图_104

视觉SLAM_SLAM_105

视觉SLAM_头文件_106

视觉SLAM_可执行_107

视觉SLAM_头文件_108

视觉SLAM_计算机视觉_109

视觉SLAM_可执行_110

视觉SLAM_头文件_111

视觉SLAM_可执行_112

视觉SLAM_SLAM_113

视觉SLAM_多视图_114

视觉SLAM_可执行_115

写一个 错的东西

声明一个指针

进行赋值视觉SLAM_头文件_116视觉SLAM_头文件_117

可以通过 编译 运行有 问题

程序 崩溃

视觉SLAM_头文件_118

视觉SLAM_多视图_119

视觉SLAM_可执行_120

视觉SLAM_SLAM_121

视觉SLAM_多视图_122

视觉SLAM_可执行_123

视觉SLAM_可执行_124

进入断点

告诉他 执行 那个程序 视觉SLAM_多视图_125

视觉SLAM_SLAM_126

视觉SLAM_多视图_127

视觉SLAM_可执行_128

视觉SLAM_头文件_129

视觉SLAM_计算机视觉_130

视觉SLAM_SLAM_131

视觉SLAM_计算机视觉_132

赋值 不合法 视觉SLAM_多视图_133

视觉SLAM_头文件_134

视觉SLAM_SLAM_135

视觉SLAM_头文件_136

视觉SLAM_计算机视觉_137

视觉SLAM_多视图_138

视觉SLAM_多视图_139

视觉SLAM_可执行_140

视觉SLAM_可执行_141

视觉SLAM_头文件_142

视觉SLAM_SLAM_143