[高翔]SLAM十四讲第二版——课后习题(1

编程入门 行业动态 更新时间:2024-10-12 05:55:51

[高翔]SLAM十四讲第二版——<a href=https://www.elefans.com/category/jswz/34/1769768.html style=课后习题(1"/>

[高翔]SLAM十四讲第二版——课后习题(1

[高翔]SLAM十四讲2

  • 第1讲 预备知识
  • 第2讲 初始SLAM
  • 第3讲 三维空间刚体运动
  • 第4讲 李群与李代数
  • 第5讲 相机与图像
  • 第6讲 非线性优化
  • 实验部分
    • ch3-visualizeGeometry
    • ch5 imageBasics
    • ch5 rgbd
    • ch5 stereo
  • 后记

开始学习SLAM,记录一下

第1讲 预备知识

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

在线性代数中,一个矩阵的秩是其非零子式的最高阶数,一个向量组的秩是其最大无关组所含的向量个数。
线性方程组Ax=b有解的充分必要条件是r(A|b)=r(A),等价于b能被A的列向量线性表出。

参考:【线性代数】结合 Ax=b 的通解结构,直观理解秩、线性变换、相关无关、基础解系

求解方法:
1.对A的增广矩阵(A|b)做初等行变换,化最简行阶梯型
2.判断
r(A|b)=r(A)=n,有唯一解,若A为方阵,x=A^-1b
r(A|b)=r(A)<n,有无穷多解,将所有自由变量置0求非齐次方程组特解,再求齐次方程组基础解系,得通解
r(A|b)≠r(A),无解。

2.高斯分布是什么,它的一维形式和高维形式分别是什么?

参考:一维高斯分布与多维高斯分布


3.C++中的类和STL是什么?

类是C++中的一个新的数据类型,可以是对同一类型事物进行抽象处理,也可以是一个层次结构中的不同层次节点。
STL是C++的标准模板库,编程完全依赖模板的实现。
类模板是能根据不同参数建立不同类型成员的类。类模板中的数据成员、成员函数的参数、成员函数的返回值可以取不同类型,在实例化成对象时,根据传入的参数类型,实例化成具体类型的对象。

4.C++工程是什么?

头文件就是.h后缀结尾的文件。定义了类,包括类的变量和方法,但是方法只是声明,具体语句没有写。
源文件是工程中最重要的部分。 一般源文件的开头会引用头文件,如使用#include的方式进行引用 。

参考:.html

5.C++11标准的新特性?

1.引入auto和decltype关键字,在编译期就推导出变量或者表达式的类型
2.新增右值引用
3.在变量名后面加上初始化列表来进行对象的初始化

参考:

6.Linux操作系统

1.Debian运行起来极其稳定,这使得它非常适合用于服务器。Debian平时维护三套正式的软件库和一套非免费软件库,Debian这款操作系统无疑并不适合新手用户,而是适合系统管理员和高级用户。
2.Ubuntu是Debian的一款衍生版,也是当今最受欢迎的免费操作系统之一。
3.红帽企业级Linux是第一款面向商业市场的Linux发行版。它有服务器版本,支持众多处理器架构,包括x86和x86_64。
4.CentOS是一款企业级Linux发行版,它使用红帽企业级Linux中的免费源代码重新构建而成。

7.Linux的目录结构是什么样的?有哪些基本命令?

Linux的目录结构

基本命令

8. 如何在Ubuntu系统中安装软件(不打开软件中心的情况下)?这些软件被安装在什么地方?如果只知道模糊的软件名称(比如想要装一个名称中含有Eigen的库),应该如何安装它?

1.使用apt命令安装:
1.1安装软件:sudo apt install 软件包名
1.2软件安装位置:

软件包:/var/cache/apt/archives
安装位置:/usr/share
快捷方式:/usr/share/applications
可执行文件:/usr/bin
lib文件:/usr/lib
配置文件:/etc

1.3搜索软件:sudo apt search 关键字

2.使用snap命令安装
2.1安装软件:sudo snap install 软件包名
2.2软件安装位置:/snap
2.3搜索软件:sudo snap find 关键字

3.使用dpkg命令安装deb包
3.1安装软件:sudo dpkg -i 文件名.deb
3.2软件安装位置:/opt

9.Vim

.html

第2讲 初始SLAM

3.g++命令有哪些参数?怎么填写参数可以更改生成的程序文件名?

-c:只进行预处理、编译、汇编,生成.o文件
-S:只进行预处理和编译,生成.s文件。
-E:只进行预处理,不自动生成文件,可将结果重定向。
-o:进行预处理、编译、汇编、链接。

更改生成的程序文件名:g++ '要编译的文件' -o '希望生成的文件名'
默认参数下将生成a.out

6. 如果忘了把库链接到可执行程序上,编译会报错吗?什么样的错?
在链接时发现找不到某个函数的实现文件,会报错:undefined reference to …

7. * 阅读《cmake 实践》,了解 cmake 的其他语法。

cmake手册

第3讲 三维空间刚体运动

1. 验证旋转矩阵是正交矩阵。

参考:

旋转矩阵 R = [ e 1 T e 1 ′ e 1 T e 2 ′ e 1 T e 3 ′ e 2 T e 1 ′ e 2 T e 2 ′ e 2 T e 3 ′ e 3 T e 1 ′ e 3 T e 2 ′ e 3 T e 3 ′ ] R=\begin{bmatrix} e^{_{1}^{T}}e^{_{1}^{'}} & e^{_{1}^{T}}e^{_{2}^{'}} & e^{_{1}^{T}}e^{_{3}^{'}} \\ e^{_{2}^{T}}e^{_{1}^{'}} & e^{_{2}^{T}}e^{_{2}^{'}} & e^{_{2}^{T}}e^{_{3}^{'}} \\ e^{_{3}^{T}}e^{_{1}^{'}} & e^{_{3}^{T}}e^{_{2}^{'}} & e^{_{3}^{T}}e^{_{3}^{'}} \end{bmatrix} R= ​e1T​e1′​e2T​e1′​e3T​e1′​​e1T​e2′​e2T​e2′​e3T​e2′​​e1T​e3′​e2T​e3′​e3T​e3′​​ ​,表示单位正交基 ( e 1 e 2 e 3 ) (\begin{matrix} e^{_{1}} & e^{_{2}} & e^{_{3}} \end{matrix}) (e1​​e2​​e3​​)经过一次旋转变成了 ( e 1 ′ e 2 ′ e 3 ′ ) (\begin{matrix} e^{_{1}^{'}} & e^{_{2}^{'}} & e^{_{3}^{'}} \end{matrix}) (e1′​​e2′​​e3′​​)

故旋转矩阵的逆R^-1表示单位正交基 ( e 1 ′ e 2 ′ e 3 ′ ) (\begin{matrix} e^{_{1}^{'}} & e^{_{2}^{'}} & e^{_{3}^{'}} \end{matrix}) (e1′​​e2′​​e3′​​)经过一次旋转变成了 ( e 1 e 2 e 3 ) (\begin{matrix} e^{_{1}} & e^{_{2}} & e^{_{3}} \end{matrix}) (e1​​e2​​e3​​)

即有 [ e 1 ′ e 2 ′ e 3 ′ ] \begin{bmatrix} e^{_{1}^{'}} & e^{_{2}^{'}} & e^{_{3}^{'}} \end{bmatrix} [e1′​​e2′​​e3′​​] [ a 1 ′ a 2 ′ a 3 ′ ] \begin{bmatrix} a_{1}^{'}\\ a_{2}^{'}\\ a_{3}^{'} \end{bmatrix} ​a1′​a2′​a3′​​ ​ = [ e 1 e 2 e 3 ] \begin{bmatrix} e^{_{1}} & e^{_{2}} & e^{_{3}} \end{bmatrix} [e1​​e2​​e3​​] [ a 1 a 2 a 3 ] \begin{bmatrix} a_{1}\\ a_{2}\\ a_{3} \end{bmatrix} ​a1​a2​a3​​ ​,对等式两边同乘以 [ e 1 ′ T e 2 ′ T e 3 ′ T ] \begin{bmatrix} e_{1}^{'T}\\ e_{2}^{'T}\\ e_{3}^{'T} \end{bmatrix} ​e1′T​e2′T​e3′T​​

可得 R − 1 = [ e 1 ′ T e 1 e 1 ′ T e 2 e 1 ′ T e 3 e 2 ′ T e 1 e 2 ′ T e 2 e 2 ′ T e 3 e 3 ′ T e 1 e 3 ′ T e 2 e 3 ′ T e 3 ] R^{-1}=\begin{bmatrix} e_{1}^{'T}e_{1} & e_{1}^{'T}e_{2} & e_{1}^{'T}e_{3}\\ e_{2}^{'T}e_{1} & e_{2}^{'T}e_{2} & e_{2}^{'T}e_{3}\\ e_{3}^{'T}e_{1} & e_{3}^{'T}e_{2} & e_{3}^{'T}e_{3} \end{bmatrix} R−1= ​e1′T​e1​e2′T​e1​e3′T​e1​​e1′T​e2​e2′T​e2​e3′T​e2​​e1′T​e3​e2′T​e3​e3′T​e3​​

单位正交基转置不影响向量之间点积的值,故有 R − 1 = R T R^{-1} = R^{T} R−1=RT

进而由 R R T = R R − 1 = E RR^{T}=RR^{-1}=E RRT=RR−1=E,可证旋转矩阵为正交矩阵。

2.寻找罗德里格斯公式的推导过程并加以理解。

参考1
参考2 空间几何-向量在另外一个向量上的投影计算
参考3 一个向量乘它的转置,其几何意义是什么? - 半个冯博士的回答 - 知乎



3. 验证四元数旋转某个点后,结果是个虚四元数(实部为0),所以仍然对应到一个三维空间点。

参考1


4.画表总结旋转矩阵、轴角、欧拉角、四元数的关系。

5.假设有一个大的Eigen矩阵,想把它左上角3X3的块取出来,然后赋值为 I 3 × 3 I_{3\times 3} I3×3​,请编程实现。

因为是大矩阵,所以循环遍历不是最优解,Eigen中有子矩阵操作(block)

matrix.block(i,j,p,q)  提取块大小为(p,q),起始于(i,j)

故代码为:

#include <iostream>
#include<Eigen/Dense>
using namespace std;int main()
{Eigen::Matrix4d matrix_44 = Eigen::Matrix4d::Random();cout << "Here is a matrix:\n" << matrix_44 << endl;Eigen::Matrix3d matrix_33 = Eigen::Matrix3d::Constant(0.1);matrix_33 = matrix_44.block(0,0,3,3);cout << "左上角3×3的块取出来,并赋值给Matrix3_3\n" << matrix_33 << endl;return 0;
}

6. 一般线性方程Ax=b有哪几种做法?你能在Eigen中实现吗?

一般分为直接法和雅克比迭代法。
直接法分为:
1.直接求逆法,运算量大,仅对方阵有效,很可能没解;
2.QR分解法,一般比较常用,方程就算方程无解也会得到近似解;
3.最小二乘求解,和QR类似;
4.LU分解法,仅仅对于方阵有效;
5.cholesky分解法,也仅仅适合方阵。
雅克比迭代法属于一种数值求解法,需要计算方程的雅克比矩阵以及设计迭代策略。
原文链接:

第4讲 李群与李代数

1. 验证SO(3)、SE(3)和Sim(3)关于乘法成群。

参考

首先,成群需要满足的四条性质:

1.1特殊正交群 S O ( 3 ) = { R ∈ R 3 × 3 ∣ R R T = I , d e t ( R ) = 1 } SO\left ( 3 \right )=\left \{ R\in \mathbb{R}^{3\times 3}|RR^{T}=I, det\left ( R \right )=1 \right \} SO(3)={R∈R3×3∣RRT=I,det(R)=1}
因为R是矩阵,所以SO(3)满足结合律存在幺元I存在逆 R R T = I RR^{T}=I RRT=I
因为 R 1 R 2 ( R 1 R 2 ) T = R 1 R 2 R 2 T R 1 T = R 1 ( R 2 R 2 T ) R 1 T = R 1 R 1 T = I R_{1}R_{2}\left ( R_{1}R_{2} \right )^{T}=R_{1}R_{2}R_{2}^{T}R_{1}^{T}=R_{1}\left ( R_{2}R_{2}^{T} \right )R_{1}^{T}=R_{1}R_{1}^{T}=I R1​R2​(R1​R2​)T=R1​R2​R2T​R1T​=R1​(R2​R2T​)R1T​=R1​R1T​=I
d e t ( R 1 R 2 ) = d e t ( R 1 ) d e t ( R 2 ) = 1 × 1 = 1 det\left ( R_{1}R_{2} \right )=det\left ( R_{1} \right )det\left ( R_{2} \right )=1\times 1=1 det(R1​R2​)=det(R1​)det(R2​)=1×1=1
所以 R 1 R 2 ∈ S O ( 3 ) R_{1}R_{2}\in SO\left ( 3 \right ) R1​R2​∈SO(3),满足封闭性,所以SO(3)关于乘法成群。

1.2特殊欧式群 S E ( 3 ) = { T = [ R t 0 T 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 } ; SE(3)=\left \{ T=\left [ \begin{matrix} R & t\\ 0^{T} & 1 \end{matrix} \right ]\in\mathbb{R}^{4\times 4}|R\in SO(3), t\in \mathbb{R}^{3} \right \}; SE(3)={T=[R0T​t1​]∈R4×4∣R∈SO(3),t∈R3};
同样T是矩阵,满足结合律存在幺元存在逆
因为 T 1 ∗ T 2 = [ R 1 t 1 ⃗ 0 1 ] ∗ [ R 2 t 2 ⃗ 0 1 ] = [ R 1 R 2 + t 1 ⃗ ∗ 0 R 1 t 2 ⃗ + t 1 ⃗ ∗ 1 0 ∗ R 2 + 1 ∗ 0 0 ∗ t 2 ⃗ + 1 ∗ 1 ] = [ R 1 R 2 R 1 t 2 ⃗ + t 1 ⃗ 0 1 ] T_{1}*T_{2}=\left [ \begin{matrix} R_{1} &\vec{t_{1}} \\ 0 & 1 \end{matrix} \right ]*\left [ \begin{matrix} R_{2} &\vec{t_{2}} \\ 0 & 1 \end{matrix} \right ]=\left [ \begin{matrix} R_{1}R_{2}+\vec{t_{1}}*0 &R_{1}\vec{t_{2}}+ \vec{t_{1}}*1 \\ 0*R_{2}+1*0 & 0*\vec{t_{2}}+1*1 \end{matrix} \right ]\\ =\left [ \begin{matrix} R_{1}R_{2} &R_{1} \vec{t_{2}}+\vec{t_{1}} \\ 0 & 1 \end{matrix} \right ] T1​∗T2​=[R1​0​t1​ ​1​]∗[R2​0​t2​ ​1​]=[R1​R2​+t1​ ​∗00∗R2​+1∗0​R1​t2​ ​+t1​ ​∗10∗t2​ ​+1∗1​]=[R1​R2​0​R1​t2​ ​+t1​ ​1​]
已知 R 1 R 2 ∈ S O ( 3 ) R_{1}R_{2} \in SO(3) R1​R2​∈SO(3),从矩阵乘法维度我们知道 R 1 t 2 ⃗ + t 1 ⃗ ∈ R 3 × 3 R_{1} \vec{t_{2}}+ \vec{t_{1}} \in\mathbb{R}^{3\times 3} R1​t2​ ​+t1​ ​∈R3×3
即 T 1 T 2 ∈ S E ( 3 ) T_{1}T_{2}\in SE\left ( 3 \right ) T1​T2​∈SE(3),满足封闭性,所以SE(3)关于乘法成群。

1.3相似变换群 S i m ( 3 ) = { S = [ s R t 0 1 ] ∈ R 4 × 4 } Sim(3)=\left \{ S=\left [ \begin{matrix} sR & t\\ 0 & 1 \end{matrix} \right ]\in\mathbb{R}^{4\times 4} \right \} Sim(3)={S=[sR0​t1​]∈R4×4}
跟SE(3)的证明类似,同样假设 S 1 , S 2 ∈ S i m ( 3 ) S_{1},S_{2} \in Sim(3) S1​,S2​∈Sim(3),

S 1 ∗ S 1 = [ s R 1 t 1 ⃗ 0 1 ] [ s R 2 t 2 ⃗ 0 1 ] = [ s 2 R 1 R 2 s R 1 t 2 ⃗ + t 1 ⃗ 0 1 ] ∈ R 4 × 4 S_{1}*S_{1}=\left [ \begin{matrix} sR_{1} & \vec{t_{1}}\\ 0 & 1 \end{matrix} \right ]\left [ \begin{matrix} sR_{2} & \vec{t_{2}}\\ 0 & 1 \end{matrix} \right ]=\left [ \begin{matrix} s^{2} R_{1}R_{2}& sR_{1} \vec{t_{2}}+\vec{t_{1}} \\ 0 & 1 \end{matrix} \right ]\in\mathbb{R}^{4\times 4} S1​∗S1​=[sR1​0​t1​ ​1​][sR2​0​t2​ ​1​]=[s2R1​R2​0​sR1​t2​ ​+t1​ ​1​]∈R4×4,

易证得Sim(3)也关于乘法成群。

2.验证 ( R 3 , R , × ) \left ( \mathbb{R}^{3},\mathbb{R},\times \right ) (R3,R,×)构成李代数。

证明:

假设 a ⃗ = ( a 1 , a 2 , a 3 ) , b ⃗ = ( b 1 , b 2 , b 3 ) , c ⃗ = ( c 1 , c 2 , c 3 ) ∈ R 3 \vec{a}=\left ( a_{1},a_{2},a_{3} \right ),\vec{b}=\left ( b_{1},b_{2},b_{3} \right ) ,\vec{c}=\left ( c_{1},c_{2},c_{3} \right ) \in \mathbb{R}^{3} a =(a1​,a2​,a3​),b =(b1​,b2​,b3​),c =(c1​,c2​,c3​)∈R3

2.1封闭性:

a ⃗ × b ⃗ = [ i j k a 1 a 2 a 3 b 1 b 2 b 3 ] = [ a 2 b 3 − a 3 b 2 a 3 b 1 − a 1 b 3 a 1 b 2 − a 2 b 1 ] ∈ R 3 \vec{a}\times \vec{b}=\left [ \begin{matrix} i & j &k \\ a_{1} & a_{2} & a_{3}\\ b_{1} & b_{2} & b_{3} \end{matrix} \right ]=\left [ \begin{matrix} a_{2}b_{3}-a_{3}b_{2}\\ a_{3}b_{1}-a_{1}b_{3}\\ a_{1}b_{2}-a_{2}b_{1} \end{matrix} \right ] \in \mathbb{R}^{3} a ×b = ​ia1​b1​​ja2​b2​​ka3​b3​​ ​= ​a2​b3​−a3​b2​a3​b1​−a1​b3​a1​b2​−a2​b1​​ ​∈R3

2.2双线性:

再假设 α , β ∈ R \alpha , \beta \in \mathbb{R} α,β∈R。则:

( α a ⃗ + β b ⃗ ) × c ⃗ = [ i j k α a 1 + β b 1 α a 2 + β b 2 α a 3 + β b 3 c 1 c 2 c 3 ] = ( α a 2 c 3 − α a 3 c 2 ) i + ( β b 2 c 3 − β b 3 c 2 ) i + ( α a 3 c 1 − α a 1 c 3 ) j + ( β b 3 c 1 − β b 1 c 3 ) j + ( α a 1 c 2 − α a 2 c 1 ) k + ( β b 1 c 2 − β b 2 c 1 ) k = α [ i j k a 1 a 2 a 3 c 1 c 2 c 3 ] + β [ i j k b 1 b 2 b 3 c 1 c 2 c 3 ] = α a ⃗ × c ⃗ + β b ⃗ × c ⃗ \left ( \alpha \vec{a}+\beta \vec{b} \right )\times \vec{c}=\left [ \begin{matrix} i & j & k\\ \alpha a_{1}+\beta b_{1} & \alpha a_{2}+\beta b_{2} & \alpha a_{3}+\beta b_{3}\\ c_{1} & c_{2} & c_{3} \end{matrix} \right ]\\ =\left ( \alpha a_{2}c_{3}-\alpha a_{3}c_{2} \right )i+\left ( \beta b_{2}c_{3}-\beta b_{3}c_{2} \right )i+(\alpha a_{3}c_{1}-\alpha a_{1}c_{3})j+\left ( \beta b_{3}c_{1}-\beta b_{1}c_{3} \right )j\\ +\left ( \alpha a_{1}c_{2}-\alpha a_{2}c_{1} \right )k+\left ( \beta b_{1}c_{2}-\beta b_{2}c_{1} \right )k\\ =\alpha\left [ \begin{matrix} i & j &k \\ a_{1} & a_{2} & a_{3}\\ c_{1} & c_{2} & c_{3} \end{matrix} \right ]+\beta \left [ \begin{matrix} i & j & k\\ b_{1} & b_{2} &b_{3} \\ c_{1} & c_{2} & c_{3} \end{matrix} \right ]=\alpha \vec{a}\times\vec{c}+\beta \vec{b} \times \vec{c} (αa +βb )×c = ​iαa1​+βb1​c1​​jαa2​+βb2​c2​​kαa3​+βb3​c3​​ ​=(αa2​c3​−αa3​c2​)i+(βb2​c3​−βb3​c2​)i+(αa3​c1​−αa1​c3​)j+(βb3​c1​−βb1​c3​)j+(αa1​c2​−αa2​c1​)k+(βb1​c2​−βb2​c1​)k=α ​ia1​c1​​ja2​c2​​ka3​c3​​ ​+β ​ib1​c1​​jb2​c2​​kb3​c3​​ ​=αa ×c +βb ×c

同样能证得 c ⃗ × ( α a ⃗ + β b ⃗ ) = α ( c ⃗ × a ⃗ ) + β ( c ⃗ × b ⃗ ) \vec{c} \times \left ( \alpha \vec{a}+\beta \vec{b} \right )=\alpha\left ( \vec{c} \times \vec{a} \right ) + \beta\left ( \vec{c} \times \vec{b} \right ) c ×(αa +βb )=α(c ×a )+β(c ×b )

2.3自反性:

a ⃗ × a ⃗ = 0 \vec{a} \times \vec{a} = 0 a ×a =0

2.4雅克比等价性

a ⃗ × ( b ⃗ × c ⃗ ) + c ⃗ × ( a ⃗ × b ⃗ ) + b ⃗ × ( c ⃗ × a ⃗ ) = 0 \vec{a} \times \left(\vec{b} \times \vec{c} \right ) +\vec{c} \times \left(\vec{a} \times \vec{b} \right ) +\vec{b} \times \left(\vec{c} \times \vec{a} \right ) =0 a ×(b ×c )+c ×(a ×b )+b ×(c ×a )=0

故可证 ( R 3 , R , × ) \left ( \mathbb{R}^{3},\mathbb{R},\times \right ) (R3,R,×)构成李代数。

3.验证so(3)和se(3)满足李代数要求的性质。

s o ( 3 ) = { ϕ ∈ R 3 , Φ = ϕ ^ ∈ R 3 × 3 } so(3)=\left \{ \phi \in \mathbb{R}^{3}, \Phi =\hat{\phi } \in \mathbb{R}^{3\times 3} \right \} so(3)={ϕ∈R3,Φ=ϕ^​∈R3×3}

假设 ϕ 1 , ϕ 2 , ϕ 3 ∈ R 3 \phi _{1}, \phi_{2}, \phi_{3} \in \mathbb{R}^{3 } ϕ1​,ϕ2​,ϕ3​∈R3

3.1.1封闭性:
[ ϕ 1 , ϕ 2 ] = [ Φ 1 Φ 2 − Φ 2 Φ 1 ] ∨ ∈ R 3 \left [ \phi_{1},\phi_{2} \right ]=\left[ \Phi_{1}\Phi_{2}-\Phi_{2}\Phi_{1}\right]^{\vee }\in \mathbb{R}^{3 } [ϕ1​,ϕ2​]=[Φ1​Φ2​−Φ2​Φ1​]∨∈R3
3.1.2双线性:
再假设 a , b ∈ R a,b \in \mathbb{R} a,b∈R。则:

3.1.3自反性:
[ ϕ 1 , ϕ 1 ] = [ Φ 1 Φ 1 − Φ 1 Φ 1 ] ∨ = 0 \left [ \phi_{1},\phi_{1} \right ]=\left[ \Phi_{1}\Phi_{1}-\Phi_{1}\Phi_{1}\right]^{\vee }=0 [ϕ1​,ϕ1​]=[Φ1​Φ1​−Φ1​Φ1​]∨=0

3.1.4雅克比等价性

[ ϕ 1 , [ ϕ 2 , ϕ 3 ] ] + [ ϕ 3 , [ ϕ 1 , ϕ 2 ] ] + [ ϕ 2 , [ ϕ 3 , ϕ 1 ] ] = 0 \left [ \phi_{1},\left [ \phi_{2},\phi_{3} \right ] \right ]+\left [ \phi_{3},\left [ \phi_{1},\phi_{2} \right ] \right ]+\left [ \phi_{2},\left [ \phi_{3},\phi_{1} \right ] \right ]=0 [ϕ1​,[ϕ2​,ϕ3​]]+[ϕ3​,[ϕ1​,ϕ2​]]+[ϕ2​,[ϕ3​,ϕ1​]]=0

s e ( 3 ) = { ξ = [ ρ ϕ ] ∈ R 6 , ρ ∈ R 3 , ϕ ∈ s o ( 3 ) , ξ ^ = [ ϕ ^ ρ 0 0 ] ∈ R 4 × 4 } se(3)=\left \{ \xi =\left [ \begin{matrix} \rho \\ \phi \end{matrix} \right ] \in \mathbb{R}^{6},\rho \in \mathbb{R} ^{3}, \phi \in so(3),\hat{\xi }=\left [ \begin{matrix} \hat{\phi } & \rho \\ 0 & 0 \end{matrix} \right ] \in \mathbb{R}^{4 \times 4} \right \} se(3)={ξ=[ρϕ​]∈R6,ρ∈R3,ϕ∈so(3),ξ^​=[ϕ^​0​ρ0​]∈R4×4}

假设 ξ 1 , ξ 2 , ξ 3 ∈ R 6 \xi _{1}, \xi_{2}, \xi_{3} \in \mathbb{R}^{6} ξ1​,ξ2​,ξ3​∈R6

3.2.1封闭性:
[ ξ 1 ^ , ξ 2 ^ ] = ( ξ 1 ^ ξ 2 ^ − ξ 2 ^ ξ 1 ^ ) ∨ = [ ϕ ^ 1 ϕ ^ 2 − ϕ ^ 2 ϕ ^ 1 ϕ ^ 1 ρ 2 − ϕ ^ 2 ρ 1 0 T 0 ] ∨ ∈ R 6 [\hat{\xi_{1}},\hat{\xi_{2}}]=(\hat{\xi_{1}}\hat{\xi_{2}}-\hat{\xi_{2}}\hat{\xi_{1}})^{\vee }=\left [ \begin{matrix} \hat{\phi}_{1}\hat{\phi}_{2}-\hat{\phi}_{2}\hat{\phi}_{1} & \hat{\phi}_{1}\rho_{2}-\hat{\phi}_{2}\rho_{1} \\ 0^{T} & 0 \end{matrix} \right ] ^{\vee } \in \mathbb{R}^{6} [ξ1​^​,ξ2​^​]=(ξ1​^​ξ2​^​−ξ2​^​ξ1​^​)∨=[ϕ^​1​ϕ^​2​−ϕ^​2​ϕ^​1​0T​ϕ^​1​ρ2​−ϕ^​2​ρ1​0​]∨∈R6

其中 ( ϕ ^ 1 ϕ ^ 2 − ϕ ^ 2 ϕ ^ 1 ) ∨ ∈ s o ( 3 ) (\hat{\phi}_{1}\hat{\phi}_{2}-\hat{\phi}_{2}\hat{\phi}_{1})^{\vee}\in so(3) (ϕ^​1​ϕ^​2​−ϕ^​2​ϕ^​1​)∨∈so(3)
ϕ ^ 1 ρ 2 − ϕ ^ 2 ρ 1 ∈ R 6 \hat{\phi}_{1}\rho_{2}-\hat{\phi}_{2}\rho_{1}\in \mathbb{R}^{6} ϕ^​1​ρ2​−ϕ^​2​ρ1​∈R6

3.2.2双线性:
再假设 a , b ∈ R a,b \in \mathbb{R} a,b∈R。则:

3.2.3自反性:
[ ξ 1 ^ , ξ 1 ^ ] = ( ξ 1 ^ ξ 1 ^ − ξ 1 ^ ξ 1 ^ ) ∨ = 0 [\hat{\xi_{1}},\hat{\xi_{1}}]=(\hat{\xi_{1}}\hat{\xi_{1}}-\hat{\xi_{1}}\hat{\xi_{1}})^{\vee }=0 [ξ1​^​,ξ1​^​]=(ξ1​^​ξ1​^​−ξ1​^​ξ1​^​)∨=0

3.2.4雅克比等价性

4. 验证性质(4.20)和(4.21)。

a ⃗ = [ a 1 a 2 a 3 ] {\vec{a}}=\left [\begin{matrix} a_{1}\\ a_{2}\\a_{3}\end{matrix} \right ] a = ​a1​a2​a3​​ ​ a ⃗ ^ = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] \hat{\vec{a}}=\left [\begin{matrix} 0 & -a_{3} & a_{2}\\ a_{3} & 0 & -a_{1}\\ -a_{2} & a_{1} & 0 \end{matrix} \right ] a ^= ​0a3​−a2​​−a3​0a1​​a2​−a1​0​

证4.20

证4.21

5.证明: R p ^ R T = ( R p ) ^ R\hat{p}R^{T}=\hat{(Rp)} Rp^​RT=(Rp)^​

6.证明SO(3)上的伴随性质: R e x p ( p ^ ) R T = e x p ( ( R p ) ^ ) Rexp(\hat{p})R^{T}=exp(\hat{(Rp)}) Rexp(p^​)RT=exp((Rp)^​)

7.仿照左扰动的推导,推导SO(3)和SE(3)在右扰动下的导数。


8. 搜索cmake的find_package指令是如何运作的。它有哪些可选的参数?为了让cmake找到某个库,需要哪些先决条件?

文档:

第5讲 相机与图像

参考:视觉SLAM十四讲CH5代码解析及课后习题详解
视觉SLAM十四讲(第二版)第5讲习题解答 - Philip.cjh的文章
《视觉SLAM十四讲 第二版》笔记及课后习题(第五讲)

1. *寻找一个相机(你手机或笔记本的摄像头即可),标定它的内参。你可能会用到标定板,或者自己打印一张标定用的棋盘格。

本文采用的是传入图片&棋盘格方式

参考:
/

OpenCV官方提供的棋盘格:.4/_downloads/pattern.png
OpenCV自带的有相机标定例程:/PATH/TO/opencv-3.1.0/samples/cpp/tutorial_code/calib3d/camera_calibration

里面有cpp源程序
in_VID5.xml——配置文件
VID5.xml——图片路径
out_camera_data.yml——真正的输出结果在build文件夹,不是这个

1.1.查看修改配置文件in_VID5.xml

1.2.拍摄25张照片——可以用电脑展示图片,然后用手机拍摄
1.3.图片重命名xx1.xx2…,ubuntu可以直接多选重命名,nice!
1.4.修改VID5.xml
最好用绝对路径,(相对路径是相对于build文件夹的),不然容易错:

1.5.写CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
set (CMAKE_CXX_STANDARD 11)
project( camera_calibration )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( camera_calibration camera_calibration.cpp )
target_link_libraries( camera_calibration ${OpenCV_LIBS} )

1.6.build-cmake ..-make

1.7.运行如下命令开始标定,标定完成后将得到保存相关参数的文件。

./camera_calibration ../in_VID5.xml

标定需要一定时间,会有标定过程,标定完会显示矫正后的图片,按回车显示下一张

我的运行结果:
两次使用图片列表,两次使用电脑摄像头
不知道为什么图片列表,矫正后的图片特别扭曲
而且,拿手机拍出来的照片应该都是矫正后的,难道是因为这,才导致再次矫正会扭曲?

2. 叙述相机内参的物理意义。如果一个相机的分辨率变成两倍而其他地方不变,它的内参如何变化?

参考:相机内参的物理意义

相机的内参矩阵 K = [ f x 0 c x 0 f y c y 0 0 1 ] 相机的内参矩阵K=\left[ \begin{array} { l l l } { f _ { x } } & { 0 } & { c _ { x } } \\ { 0 } & { f _ { y } } & { c _ { y } } \\ { 0 } & { 0 } & { 1 } \end{array} \right] 相机的内参矩阵K= ​fx​00​0fy​0​cx​cy​1​

相机矩阵:包括焦距(fx,fy),光学中心(Cx,Cy),完全取决于相机本身,是相机的固有属性,只需要计算一次;
畸变系数:畸变数学模型的5个参数 D = (k1,k2, P1, P2, k3);
相机内参:相机矩阵和畸变系数统称为相机内参,在不考虑畸变的时候,相机矩阵也会被称为相机内参;

分辨率是指单位长度内像素点的数量,它的单位通常为像素/英寸(ppi)

如72ppi表示1英寸包含72个像素点,300ppi表示每英寸含300个像素点。分辨率决定了位图细节的精细程度,通常情况下,分辨率越高包含的像素就越高,图像就越清晰。

像素:是指在由一个数字序列表示的图像中的一个最小单位。像素仅仅只是分辨率的尺寸单位,而不是画质。

3. 搜索特殊的相机(鱼眼或全景)相机的标定方法。它们与普通的针孔模型有何不同?

4. 调研全局快门相机(global shutter)和卷帘快门相机(rolling shutter)的异同。它们在SLAM 中有何优缺点?
全局快门与卷帘式快门 - LinsonW的文章 - 知乎
卷帘快门(Rolling Shutter)与全局快门(Global Shutter)的区别

5. RGB-D 相机是如何标定的?以Kinect 为例,需要标定哪些参数?(参照.)

6. 除了示例程序演示的遍历图像的方式,你还能举出哪些遍历图像的方法?

遍历图像,应该就是遍历大的二维数组,示例程序中演示的是顺序访问,所以还可以随机访问,

看看别人的:

第6讲 非线性优化

实验部分

ch3-visualizeGeometry

左键-平移
右键-旋转

ch5 imageBasics

若报错:

CMakeFiles/imageBasics.dir/imageBasics.cpp.o:在函数‘cv::String::String(char const*)’中:
...
imageBasics.cpp:(.text.startup+0x804):对‘cv::String::deallocate()’未定义的引用
collect2: error: ld returned 1 exit status
CMakeFiles/imageBasics.dir/build.make:102: recipe for target 'imageBasics' failed
make[2]: *** [imageBasics] Error 1
CMakeFiles/Makefile2:94: recipe for target 'CMakeFiles/imageBasics.dir/all' failed
make[1]: *** [CMakeFiles/imageBasics.dir/all] Error 2
Makefile:102: recipe for target 'all' failed
make: *** [all] Error 2

解决方法:CMakeLists.txt 添加 find_package(OpenCV REQUIRED)

ch5 rgbd

找不到sophus
解决方法:把sophus的build删了,重新cmake、make、还报错的话sudo make install

ch5 stereo

Opencv报错Assertion failed (size.width>0 && size.height>0)
解决方法:看看是不是图片路径错误,建议写绝对路径

后记

很桑心,第七讲网课的时候,高老师说课后题是随便出的,并没有好好设计,让看看拓展文档就行。

所以课后题就写到这儿了,第七章实在太难了,还是专注课内知识吧,课后题比较拓展,可以看看,不建议第一遍学习的时候做,收获不大,还费时间。

一路过来参考了这位大佬和很多人的文章,很佩服也很羡慕,希望我以后也能自己写出来。

视觉SLAM十四讲(第二版)习题解答 - Philip.cjh的文章 - 知乎

更多推荐

[高翔]SLAM十四讲第二版——课后习题(1

本文发布于:2024-02-24 21:22:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1696700.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:课后   习题   高翔   SLAM   十四讲

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!