视觉SLAM十四讲
SLAM (simultaneous localization and mapping),
也称为CML (Concurrent Mapping and Localization),
即时定位与地图构建,或并发建图与定位。
1 视觉SLAM十四讲ch1~2
https://www.bilibili.com/video/BV16t411g7FR?from=search&seid=12179252473882727723
基于 视觉的 SLAM
图形定位 与 地形构建 /建图
搭载 特定传感器 的 主体 没有 环境 信息 情况下 运动过程中 建立环境 模型 -----环境描述 离散的点
同时 估计自己的 运动 — 运动模型 当前位置 轨迹
人类看到的 ---- 计算机 看到的 视图矩阵 点 灰度值
去 计算 自己 本身的 运动
三维空间 运动
机器人学
计算机视觉
状态估计理论 有噪声 数据 去 估计 内在 的 变量
计算机 视觉 多视图 几何 (拓展几何)
机器人学 状态估计
李群描述
线性 高斯 系统 滤波器
二维激光
证明 — 最优性
刚体运动 旋转 平移 单稳电路
eigen 几何模块
单目重建
奇异值分解(Singular Value Decomposition) SVD 矩阵论
矩阵微分
矩阵向量求导
linux 编译 运行 程序 调试
工程管理 Cmake
局部 整体
2 3 维度
定位 建图 耦合
误差 全局优化 求解
MU传感器
激光
相机
连续的 视频流
处理器 资源
工作环境 环境无遮挡 环境纹理 光差变化 静态刚体
(1)结构光(Structured-light),代表公司有奥比中光,苹果(Prime Sense),微软 Kinect-1,英特尔 RealSense, Mantis Vision 等。
(2)双目视觉(Stereo),代表公司 Leap Motion, ZED, 大疆;
(3)光飞行时间法(TOF),代表公司微软 Kinect-2,PMD,SoftKinect, 联想 Phab。
近大远小
单目 需要 运动 才能确定 位置 距离
有一个 尺度 的 不确定性
双目 左右眼 有偏差 距离
每一张 照片 每一个像素 的 位置
点 与 深度
三维结构
功耗 稍大
深度值准确
量程 较近
测量手段 受干扰 tof 红外光 (室内 好)
步与步 之前 运动 累加 知道运动轨迹
图像 与 图像 运动 叠起来 帧与下一帧 局部 帧 的 运动 估计 运动
得到 局部相机 运动 局部地图 表示
时间久了 容易 偏移 因为 叠加 误差
所以 来一个 全局 优化
再 回环 里程计 回到 之前的 地方 来调整 估计 符合 回环检测 的 结果
得到 特征点 地图
无法做 导航与 避障 (不知道 里面的 点 可不可以 通过 ) 所以 需要有 重建
多视图 几何 过一遍
滤波器
图优化
梯度下降 高斯牛顿
位姿图
运动方程 知道 怎么从 上一个 时刻 去 下一个时刻
抽象的 运动方程
纯视觉 的 不知道 相机 怎么运动 没有输入 就 不知道 这个 运动方程
知道 运动 还得 知道 这个 时刻 的 观测
又 得到 这个 抽象 观测 方程 (多个 一个位置 观测 了 好几个 路标 )
vk噪声项
状态估计 优化 内容
makefile 也有点麻烦
用 cmake
指定 cmake 版本
project 新建工程
通过 main cpp 编译成 hellslam 可执行程序
按照 cmake 语法
指定 当前目录 一个点
给出 编译信息 编译器 --- makefile
cmake 自动生成的
make 就开始编译 了
生成了 一堆 中间文件
新建文件夹
在上层文件 进行编译
产生的 临时文件 在 这个 临时文件夹
上层 文件 夹 是 干净的 分层清晰
可以删除 build 临时 cmake编译文件
一些类 可以在 可执行 程序 里 调用
对 库 的 演示
生成一个 libhello.a
本身打了个包 对刚才的 函数
要调用 hello 这个 函数 还需要一个 h 文件 头文件 告诉 说 库里面 有 这么一个 函数
防止重新编译
声明一下
hello.cpp 提供函数 的 实现
h cpp 构成了 一个 完整的 库
可以在 其他程序 调用
在头文件 里 引用 一个 函数
在 main 里 进行调用
链接到 之前编译 的 库 上面
注意 语法
可执行 文件 链接到 库 上面
就可以找到 另一个源文件 里 的 函数 了
别人的 东西
有了 这个 头文件 和 库文件 就可以 调用
在自己的 程序 使用
编译过程
分成 两部
1 编译器 编译
2 链接器 链接 (链接到 之前的 库 上面 )
才能 完整的 进行 调用
能通过编译
过不了链接
未定义的 引用
ide 的 使用
写一个 错的东西
声明一个指针
进行赋值
可以通过 编译 运行有 问题
程序 崩溃
进入断点
告诉他 执行 那个程序
赋值 不合法