《视觉SLAM十四讲 第二版》笔记及课后习题(第一讲)
前言
之所以想要写这个系列的博客,是因为想要总结一下高博的《SLAM视觉十四讲第二版》的各章内容以及自己对书后习题的一些做法,也算是对自己学习过程的一个总结和回顾。博客分为两个大部分,即读书笔记和课后习题。 博客分为三个部分,即读书笔记,实践部分和课后习题。读书笔记来自于自己的整理以及相关的PPT和书本截图;实践部分就是书中的各章节的具体实践(这一块是坑比较多的,各种调试的问题还有各种库的安装),课后习题部分就是各章的课后习题,当然也参考了一部分其余的博客(站在巨人的肩膀上)。
那么,废话不多说,正式开始!
读书笔记:预备知识
SLAM 是Simultaneous Localization and Mapping 的缩写,中文译作“同时定位与地图构建”。它是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动 。如果这里的传感器主要为相机,那就称为“视觉 SLAM”。
关于本书的使用和阅读方法:
2-6讲:数学基础
三维空间运动(3):也就是对相机机器人建模,旋转矩阵,欧拉角,四元数这些概念
李群李代数(4):抽象数学,近世代数的一些内容
相机与图像(5):在计算机中表示,使用OpenCV
非线性优化(6):状态估计问题,非线性最小二乘,曲线拟合问题
7-14讲:实践应用
视觉里程计(7~8):特征点法,ICP算法、PnP、对极几何约束、用来估计相邻图像之间的运动,这是最重要的一块;直接法的OV,光流法和直接法,用g2o方法搞RGBD
后端优化(9~10):BA算法,Ceres和g2o的使用、稀疏性研究;位姿图,因子图,加入关键帧之间的约束关系
回环检测(11):BOW词袋模型,字典训练和回环检验
地图构建(12),单目稠密估计、RGBD的稠密估计,极线搜索和块匹配、点云地图和八叉树地图
设计SLAM系统(13):检验全书的学习效果(逃
SLAM研究展望(14):当前开源方案的总结以及SLAM的未来展望
话说这一讲就是对全书的整体结构做了一个概述,所以也没什么笔记可做的,下面直接进入习题模块!
课后习题
1. 有线性方程 Ax = b,当我们知道 A, b,想要求解 x 时,如何求解?这对 A 和 b 需 要哪些条件?提示:从 A 的维度和秩角度来分析。
答:不妨记A的维度为m×n,同时记A的秩为r。
1.若b≠0,则
当r=m=n时,整个方程存在唯一解;
当r=n<m,即A列满秩,整个方程要么无解要么存在唯一解;
当r=m<n,即A行满秩,整个方程有无穷解;
当r<m,r<n,整个方程要么无解要么存在唯一解。
(b≠0时,方程组为非齐次线性方程组,系数矩阵A与增广矩阵B的秩相当时,即R(A)=R(B)时,方程组有解;
R(A)≠R(B)时,方程组无解;R(A)=R(B)<n时,有无穷解,R(A)=R(B)=n时,有唯一零解.)
2.若b=0,则
当r=n时,整个方程只有解x=0;
当r<n,整个方程有无穷解;
(b=0时,方程组为齐次线性方程组,系数矩阵A的行列式D≠0时,该方程组只有唯一零解,即其秩R(A)=n(n为未知数个数)时;D=0时,方程组有无穷解,即R(A)<n时。)
2. 高斯分布是什么?它的一维形式是什么样子?它的高维形式是什么样子?
答:高斯分布(Gaussian distribution)又称为正态分布(normal distribution),是一个非常常见的连续概率分布
具体参考这篇博客或者直接看维基百科。
3. 你知道 C++ 的类吗?你知道 STL 吗?你使用过它们吗?
答:类是面对对象语言的特性:面对将系统看成通过交互作用来完成特定功能的对象的集合。每个对象用自己的方法来管理数据。也就是说对象内部的代码能够操作对象内部的数据。面向对象编程是C++有别于C的核心,其中类封装了数据和接口使得成为一个整体,方便后期的维护和扩展等。
STL 是“Standard Template Library”的缩写,中文译为“标准模板库”。STL 是 C++ 标准库的一部分,不用单独安装。C++ 对模板(Template)支持得很好,STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。例如,vector 的底层为顺序表(数组),list 的底层为双向链表,deque 的底层为循环队列,set 的底层为红黑树,hash_set 的底层为哈希表。详情可看这里
4. 你以前怎样书写 C++ 程序?(你完全可以说只在 VC6.0 下写过 C++ 工程,只要你有写 C++ 和 C 语言经验就行。)
答:当然是用宇宙第一IDE :
现在也常用vscode:
当然,在ubuntu系统上还是用clion最方便:
5. 你知道 C++11 标准吗?其中哪些新特性你之前听说过或使用过?有没有其他的标准?
答:C++11标准由国际标准化组织(ISO)和国际电工委员会(IEC)旗下的C++标准委员会(ISO/IEC JTC1/SC22/WG21)于2011年8月12日公布 ,并于2011年9月出版。2012年2月28日的国际标准草案(N3376)是最接近于C++11标准的草案(仅编辑上的修正)。此次标准为C++98发布后13年来第一次重大修正。
下面的韦恩图大致上回答了 C 和 C++ 相关的兼容情况:
c++11可以说是更“现代”的C++,有很多新的语法,例如:nullptr 与 constexpr,auto 与 decltype ,基于范围的 for 循环,Lambda 表达式,智能指针和新的容器等等。
6. 你知道 Linux 吗?你有没有至少使用过其中之一(安卓不算),比如 Ubuntu?
答:linux的最佳入门书当属《鸟哥的linux私房菜》。ubuntu正是我正在使用的linux发行版。
7. Linux 的目录结构是什么样的?你知道哪些基本命令,比如 ls, cat 等等?
答:linux是树状目录结构:
目录结构参考
ls命令用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。
语法:
ls(选项)(参数)
选项:
-a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出);
-A:显示除影藏文件“.”和“..”以外的所有文件列表;
-C:多列显示输出结果。这是默认选项;
-l:与“-C”选项功能相反,所有输出信息用单列格式输出,不输出为多列;
-F:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符;
-b:将文件中的不可输出的字符以反斜线“”加字符编码的方式输出;
-c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的一句是文件的状态改变时间;
-d:仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表;
-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;
-i:显示文件索引节点号(inode)。一个索引节点代表一个文件;
--file-type:与“-F”选项的功能相同,但是不显示“*”;
-k:以KB(千字节)为单位显示文件大小;
-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
-m:用“,”号区隔每个文件和目录的名称;
-n:以用户识别码和群组识别码替代其名称;
-r:以文件名反序排列并输出目录内容列表;
-s:显示文件和目录的大小,以区块为单位;
-t:用文件和目录的更改时间排序;
-L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;
-R:递归处理,将指定目录下的所有文件及子目录一并处理;
--full-time:列出完整的日期与时间;
--color[=WHEN]:使用不同的颜色高亮显示不同类型的。
参数:
目录:指定要显示列表的目录,也可以是具体的文件。
cat命令用于连接文件打印到输出设备中,cat是Linux的基本文本输出命令,通常用于查看文件内容。
作用:连接多个文件并且打印到屏幕输出,或者重定向到其他文件,也可以用来查看显示单个文件,或者多个文件。
语法
cat (参数)(选项)
-n 或 --number:由 1 开始对所有输出的行数编号。
-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
-E 或 --show-ends : 在每行结束处显示 $。
-T 或 --show-tabs: 将 TAB 字符显示为 ^I。
-e : 等价于 -vE。
-A, --show-all:等价于 -vET。
-t:等价于"-vT"选项;
cat主要功能:
1、一次显示文件的所有内容 cat filename
2、从磁盘创建一个新文件cat >filename(只能创建新文件不能编辑已有文件)
3、将几个文件合并为一个文件cat file1 file2 > file
8. 如何在 Ubuntu 中安装软件(不打开软件中心的情况下)?这些软件被安装在什么地方?当我只知道模糊的软件名称(比如我想要装一个 eigen 名称的库),我应该如何安装它?
答:如果是在软件源里的软件,三种方式:
- 通过sudo apt-get install <软件名>进行安装;
- 如果是deb文件则可以下载后双击安装,或下载后在终端执行sudo dpkg -i *.deb;
- 编译源码安装,(1 ./configure 2 make 3 sudo make install)
软件被安装在默认路径,一般是/usr或者/opt等,当然也可以自己指定安装的路径。可以用whereis
或者which
命令查看文件安装路径或者查询运行文件所在路径。
应该google查清楚后再安装(逃
9. * 花一个小时学习一下 Vim,因为你迟早会用它。你可以在终端中输入 vimtutor 阅读一遍所有内容。我们不需要你非常熟练地操作它,只要在学习本书的过程中使用它键入代码即可。不要在它的插件上浪费时间,不要想着把 vim 用成 IDE,我们只用它做文本编辑的工作。
答:可参考我之前的博客
《视觉SLAM十四讲 第二版》笔记及课后习题(第一讲)相关推荐
- 视觉SLAM十四讲从理论到实践第二版源码调试笔记(理论基础1-6章)
2019-2020-2学期机器人工程专业需要开设SLAM技术课程,使用教材为视觉SLAM十四讲从理论到实践第二版. 为方便学生学习课程知识,将Arduino.ROS1.ROS2和SLAM集成到课程定制 ...
- 《视觉SLAM十四讲 第二版》笔记及课后习题(第七讲)
读书笔记:视觉里程计1 之前的内容,介绍了运动方程和观测方程的具体形式,并讲解了以非线性优化为主的求解方法.从本讲开始,我们结束了基础知识的铺垫,开始步入正题:按照第二讲的内容,分别介绍视觉里程计.优 ...
- 《视觉SLAM十四讲》第二版源码slambook2编译调试
slambook2-master/ch2 编译正常,log如下: slambook2-master/ch2# mkdir build && cd build && cm ...
- 视觉slam十四讲ch5 joinMap.cpp 代码注释(笔记版)
视觉slam十四讲ch5 joinMap.cpp 代码注释(笔记版) 转载自大神 #include <iostream> #include <fstream> using na ...
- 视觉SLAM十四讲学习笔记-第二讲-开发环境搭建
专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 lin ...
- 高翔视觉SLAM十四讲(第二版)各种软件、库安装的以及报错解决方法
目录 前言 系统版本 下载高翔视觉SLAM十四讲第二版的源代码 一.安装 Vim 二.安装 g++ 三.安装 KDevelop 以及汉化 1.安装 2.汉化 四.安装 Eigen 库 五.安装 Pan ...
- tensorflow 语义slam_研究《视觉SLAM十四讲从理论到实践第2版》PDF代码+《OpenCV+TensorFlow深度学习与计算机视觉实战》PDF代码笔记...
我们知道随着人工神经网络和深度学习的发展,通过模拟视觉所构建的卷积神经网络模型在图像识别和分类上取得了非常好的效果,借助于深度学习技术的发展,使用人工智能去处理常规劳动,理解语音语义,帮助医学诊断和支 ...
- 视觉SLAM十四讲(第二版)环境安装心得体会
前言 将高博的视觉SLAM14讲(第二版)看完后,也将里面所有的代码都跑了一遍,在安装环境的时候遇到了无数的坑.为了后来的人能够更加快速上手SLAM,现将书中环境安装心得记录如下. 环境安装 1. 安 ...
- 视觉SLAM十四讲(高翔第二版)
视觉SLAM十四讲高翔第二版调试记录 前言 一.3.7可视化演示程序运行全过程Pangolin plotTrajectory.cpp 1. **在3rdparty中下载Pangolin** 2. ** ...
- 视觉SLAM十四讲第二版踩坑总结
寒假花了点时间把slam第二版过了一遍,安装库文件实在太麻烦,我又总是因为内存问题把ubuntu系统搞坏,前前后后安了三四次.在此,记录第二版安装踩坑,如果未来不幸又要重装,留个参考. 视觉SLAM十 ...
最新文章
- 专访施巍松:边缘计算早期提出者之一
- QQ牧场在高速模式下的一些小bug
- 首发 | 中间件小姐姐直播“带货”——阿里程序员必知的插件
- java自动随机字符_java随机字符生成工具
- mysql安装被打断_Mysql的安装/性能优化/安全加固
- 使用Java的BlockingQueue实现生产者-消费者
- 图的存储结构(邻接矩阵)
- JAVA开发第一步——JDK 安装
- Field userManageService in com....
- lesson2 欧拉数值方法及推广
- Pytorch中的torch.nn.Embedding()
- SPSS因子分析案例
- 适配ofd签章SES_Signature
- 两种办法解决外网资源下载速度过慢的问题
- App微信小程序测试流程及要点
- MaxCompute全套攻略
- 最新阿里巴巴面试官内部题库,2022年Java岗社招必备~
- linux加密文件系统
- PHP_递归函数时return
- char 与 unsign char的转换