视觉SLAM十四讲学习记录 第一讲

2022年6月16日,现在是大学本科毕业准研一的暑假,老师开组会让我们确定了研究方向,我的研究方向是协同探测与自动驾驶。与师兄交流后建议我阅读一本书《视觉SLAM十四讲从理论到实践》。怕自己学的不好,也怕自己坚持不下去,特意写一下读书笔记,记录下自己的学习过程。如果有任何问题,欢迎评论指正或者私信留言,不胜感激!

第一讲 预备知识

我觉得吧,第一讲就说了几点。

  • 笔者不是个正经人
  • 你得会高数、线代和概率论,C++基础以及Linux基础。

课后习题

  1. 有线性方程Ax = b,若已知A,b,需要求解x,该如何求解?这对A和b有哪些要求?
    提示:从A的维度和秩角度来分析。

    设A为 m × n 的矩阵,同时记A的秩为r(A) = r
    ① 若 b = 0,则转化为齐次方程组解的问题。
    1)当r=n,则方程有唯一解,行列式不为0。
    2)当r<n,则方程有无穷解。
    ② 若 b ≠ 0,则转化为非齐次方程组解的问题。系数矩阵A和增广矩阵B的秩分别记为r(A)和r(B)
    1)当r(A) < r(B),方程组无解
    2)当r(A) = r(B) = n,方程有唯一解
    3)当r(A) = r(B) < n,方程有无穷解
  2. 高斯分布是什么?它的一维形式是什么样子?它的高维形式是什么样子?.
    高斯分布又称正态分布,他的标准型如下:
    f ( x ) = 1 2 π e − x 2 2 f(x) = \frac{1}{\sqrt{2π}}e^{-\frac{x^2}{2}} f(x)=2π 1e2x2
    图像如下:
    标准图像
    先假设n个变量 x=[x1,x2,⋯,xn]T 互不相关,且服从正态分布(维度不相关多元正态分布),各个维度的均值E(x)=[μ1,μ2,⋯,μn]T, 方差 σ(x)=[σ1,σ2,⋯,σn]T
    根据联合概率密度公式:
    f ( x ) = p ( x 1 , x 2 . . . . x n ) = 1 ( 2 π ) n σ 1 σ 2 ⋯ σ n e − ( x 1 − μ 1 ) 2 2 σ 1 2 − ( x 2 − μ 2 ) 2 2 σ 2 2 ⋯ − ( x n − μ n ) 2 2 σ n 2 f(x) = p(x_{1},x_{2}....x_{n}) = \frac{1}{(\sqrt{2π})^nσ_{1}σ_{2}\cdotsσ_{n}}e^{-\frac{(x_{1}-μ_{1})^2}{2σ_{1}^2}-\frac{(x_{2}-μ_{2})^2}{2σ_{2}^2}\cdots-\frac{(x_{n}-μ_{n})^2}{2σ_{n}^2}} f(x)=p(x1,x2....xn)=(2π )nσ1σ2σn1e2σ12(x1μ1)22σ22(x2μ2)22σn2(xnμn)2
    例如二元正态分布图像如下:
    在这里插入图片描述
  3. 你知道C++中的类吗?你知道STL吗?你使用过它们吗?
    学习过类的同学可能知道,类有两个属性私有属性和公有属性,私有属性内的数据成员在类的外部是无法访问的,而公有属性是可以被访问的,这就保证了数据的安全性。
    我们在设计类时需要传进更少的参数,将可以不传进的参数都放在类里面获得(即设置为类的私有数据成员),而在类的外面,即对类的使用者而言,这些数据成员的值是无法修改的,这也就保证了数据的安全性。因为主函数是类的使用者进行编写,所以我们传进的参输越少,就与可以方便他们的使用,这就是类的基本理解,它可以增强代码的重用性。
    STL(Standard Template Library,标准模板库),简而言之就是该库里面已经写好了很多常用的数据结构,以及一些常用操作,编程者只需调用其中的某个函数或类即可。这本身也可以看成一个大的类。用过。
  4. 你以前怎样书写c++程序?(你完全可以说只在Visual C++ 6.0下写过C++工程,只要你有写c++和c语言的经验就行。)
    在Ubuntu中用Vim和GCC等命令写过代码,Windows用Visual C++ 6.0和CFree写过。
  5. 你知道 c++11 标准吗?你听说过或用过其中哪些新特性?有没有其他的标准?
    借鉴了部分CSDN答主AngelDg的文章
    在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为 C++11之前的最新C++标准名称。不过由于TC1主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑, 第二个真正意义上的标准珊珊来迟。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率。
  6. 你知道Linux吗?你有没有至少使用过一种(不算安卓)操作系统,比如Ubuntu?
    以前在上操作系统实验课的时候老师讲过,当时也安装了虚拟机进行上机实验,对一些基本的命令有所了解。并且我当时安装的是Ubuntu。
  7. Linux的目录结构是什么样的?你知道哪些基本命令,比如ls,cat等?
    借鉴了部分知乎答主动力节点在线的文章
    目录结构:
    	bin (binaries)存放二进制可执行文件
    	sbin (super user binaries)存放二进制可执行文件,只有root才能访问
    	etc (etcetera)存放系统配置文件
    	usr (unix shared resources)用于存放共享的系统资源
    	home 存放用户文件的根目录
    	root 超级用户目录
    	dev (devices)用于存放设备文件
    	lib (library)存放跟文件系统中的程序运行所需要的共享库及内核模块
    	mnt (mount)系统管理员安装临时文件系统的安装点
    	boot 存放用于系统引导时使用的各种文件
    	tmp (temporary)用于存放各种临时文件
    	var (variable)用于存放运行时需要改变数据的文件
    
    基本命令:
    	1.find 查找文件或目录
    	find / -name filename.txt //根据名称查找/目录下的filename.txt文件。
    	2.复制文件包括其子文件到自定目录
    	cp -r sourceFolder targetFolder
    	3.查看一个程序是否运行
    	ps –ef|grep tomcat //查看所有有关tomcat的进程
    	4.终止线程
    	kill -9 19979 //终止线程号位19979的线程
    	5.查看文件,包含隐藏文件
    	ls -al
    	6.当前工作目录
    	pwd
    	7.创建目录
    	mkdir newfolder
    	8.删除目录(此目录是空目录)
    	rmdir deleteEmptyFolder
    	9.删除文件包括其子文件
    	rm -rf deleteFile
    	10.移动文件
    	mv /temp/movefile /targetFolder//扩展重命名 mv oldNameFile newNameFile
    	11.切换用户
    	su -username
    	12.修改文件权限
    	chmod 777 file.java //file.java的权限-rwxrwxrwx,r表示读、w表示写、x表示可执行
    	13.压缩文件
    	tar -czf test.tar.gz /test1 /test2
    	14.列出压缩文件列表
    	tar -tzf test.tar.gz
    	15.解压文件
    	tar -xvzf test.tar.gz
    	16.查看文件头10行
    	head -n 10 example.txt
    	17.查看文件尾10行
    	tail -n 10 example.txt
    	18.查看日志文件
    	tail -f exmaple.log //这个命令会自动显示新增内容,屏幕只显示10行内容的(可设置)。
    	19.启动Vi编辑器
    	vi
    	20.查看系统当前时间
    	date
    	```
    
  8. 如何在Ubuntu系统中安装软件(不打开软件中心的情况下)?这些软件被安装在什么地方?如果只知道模糊的软件名称(比如想要装一个名称中含有Eigen的库),应该如何安装它?
    (1)在/etc/apt/sources.list中加入相关源,然后使用sudo apt-get install xxx 进行安装。通过下载deb软件安装包去安装.
    (2)一般软件被安装在/usr/bin目录下,或者在/usr/share和/usr/local目录下。
    (3)只知道模糊的软件名,可以通过按tab键进行补全的方式,当只知道模糊的软件名称(如Eigen),可以在终端中输入 sudo apt search eigen,找到名字后再进行安装
  9. 花一个小时学习vim, 因为你迟早会用它。你可以在终端中输人vimmtor阅读一遍所有内容。我们不需要你非常熟练地操作它,只要能够在学习本书的过程中使用它输人代码即可。不要在它的插件上浪费时间.不要想着把vim用成IDE, 我们只用它做文本编辑的工作
    推荐博客园答主jiqing Wu的文章,可以不用全会,当成linux手册用的时候查一下就很不错。

猜你喜欢

转载自blog.csdn.net/qq_20184333/article/details/125324177
今日推荐