本文为学习高翔、张涛等著的《视觉SLAM十四讲》的学习笔记,通过研究视觉SLAM,从三维空间刚体运动引出群论和李代数。

1. 初识SLAM

单目相机以二维的形式记录了三维的世界,缺少场景的深度维度,没有直观的距离感,也就是相机与物体间的距离无法获得。
而双目相机和深度相机,可以通过两个相机之间的距离(基线),以及大量的计算才能估计出距离,有了空间感。

在视觉SLAM中,前端和计算机视觉研究领域更为相关,比如图像的特征提取与匹配等,后端则主要是滤波与非线性优化算法。

后端优化与回环监测

度量地图
度量地图强调精确的表示地图中物体的位置关系,通常用稀疏(Sparse)与稠密(dense)对其分类。
在二维度量地图中体现为许多个小格子(Grid),而在三维度量地图中则体现为许多小方块(Voxel)。通常,一个小块含有占据、空闲、未知三种状态,以表达该格内是否有物体。

机器人运动SLAM数学描述:

  • 运动轨迹:机器人连续运动离散化,变成离散时刻t=1,...,Kt=1,...,Kt=1,...,K当中发生的事情。在每个时刻,用xxx表示机器人自身位置。于是时刻位置记为x1,...,xKx_{1},...,x_{K}x1​,...,xK​,构成了机器人的轨迹。
  • 地图路标:假设地图由路标组成,每个时刻观测到一部分路标有NNN个,用y1,...,y2y_{1},...,y_{2}y1​,...,y2​表示。
  1. 运动:我们分析从k−1k-1k−1时刻到kkk时刻,机器人的位置xxx是如何变化的。
    xk=f(xj−1,uk,wk)x_{k} = f(x_{j-1},u_{k},w_{k})xk​=f(xj−1​,uk​,wk​) (2.1)
    这里,uku_{k}uk​是运动传感器的读数或输入,wkw_{k}wk​是该过程中的噪声。

  2. 观测:假设机器人在kkk时刻于xkx_{k}xk​处探测到某个路标yjy_{j}yj​。
    zk,j=h(yj,xk,vk,j)z_{k,j} = h(y_{j},x_{k},v_{k,j})zk,j​=h(yj​,xk​,vk,j​) (2.2)
    这里,vk,jv_{k,j}vk,j​是这次观测的噪声。

2. 三维空间刚体运动

2.2. 点与向量、坐标系

点是空间中的基本元素,没有长度、体积,两个点连接起来就构成了向量,向量也可以看做从一个点到另一个点的一个箭头。当我们指定向量所在的三维空间的某个坐标系时,才可以谈论该向量在此坐标系下的坐标。

用线性代数描述,三维空间中的某个点的坐标用R3\mathbb{R}^3R3来表述。假设在这个线性空间内,我们找到该空间的一组基(e1,e2,e3)(e_{1},e_{2},e_{3})(e1​,e2​,e3​),那么,任意向量aaa在这组基下就有一个坐标:
a=[e1,e2,e3][a1a2a3]=a1e1+a2e2+a3e3a = [e_{1},e_{2},e_{3}]\begin{bmatrix}a_{1}\\ a_{2}\\ a_{3}\end{bmatrix} = a_{1}e_{1}+a_{2}e_{2}+a_{3}e_{3}a=[e1​,e2​,e3​]⎣⎡​a1​a2​a3​​⎦⎤​=a1​e1​+a2​e2​+a3​e3​

这里(a1,a2,a3)T(a_{1},a_{2},a_{3})^T(a1​,a2​,a3​)T称为aaa在此基下的坐标。

坐标系通常由3个正交的坐标轴组成(也可以非正交)。例如,当给定xxx和yyy轴时,zzz轴就可以通过右手(或左手)法则由x×yx \times yx×y定义出来。

关于向量内积、外积:
a.b=∣a∣∣b∣cos(a,b)a.b=|a||b|cos(a,b)a.b=∣a∣∣b∣cos(a,b)
a×b=∥e1e2e3a1a2a3b1b2b3∥=[a2b3−a3b2a3b1−a1b3a1b2−a2b1]=[0−a3a2a30−a1−a2a10]b=defa∧ba \times b = \begin{Vmatrix}e_{1} & e_{2} & e_{3}\\ a_{1} & a_{2} & a_{3}\\ b_{1} & b_{2} & b_{3} \end{Vmatrix} = \begin{bmatrix}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{bmatrix} = \begin{bmatrix}0 & -a_{3} & a_{2}\\ a_{3} & 0 & -a_{1}\\ -a_{2} & a_{1} & 0\end{bmatrix} b \overset{\underset{\mathrm{def}}{}}{=} a^{\wedge }ba×b=∥∥∥∥∥∥​e1​a1​b1​​e2​a2​b2​​e3​a3​b3​​∥∥∥∥∥∥​=⎣⎡​a2​b3​−a3​b2​a3​b1​−a1​b3​a1​b2​−a2​b1​​⎦⎤​=⎣⎡​0a3​−a2​​−a3​0a1​​a2​−a1​0​⎦⎤​b=def​a∧b

对于外积运算,我们引入∧^{\wedge}∧符号,把aaa写成一个矩阵,事实上是个反对称矩阵,将∧^{\wedge}∧符号记成反对称矩阵。

a∧=[0−a3a2a30−a1−a2a10]a^{\wedge } = \begin{bmatrix}0 & -a_{3} & a_{2}\\ a_{3} & 0 & -a_{1}\\ -a_{2} & a_{1} & 0\end{bmatrix}a∧=⎣⎡​0a3​−a2​​−a3​0a1​​a2​−a1​0​⎦⎤​

2.2. 坐标系变换与刚体运行

在实际机器人场景中,相机是一个移动坐标系xc,yc,zcx_{c},y_{c},z_{c}xc​,yc​,zc​,机器人运动系统被定义为惯性坐标系(或者叫世界坐标系)xw,yw,zwx_{w},y_{w},z_{w}xw​,yw​,zw​。

例如相机视野中的向量ppp,在相机移动坐标系下坐标为pcp_{c}pc​,从世界坐标系看为pwp_{w}pw​,如何转换呢?需要一个矩阵TTT。

两个坐标系之间的运动由一个旋转加上一个平移组成,这种运行称为刚体运动。坐标做旋转和平移变换,称为欧式变换

我们再假设某个单位正交基经过变换转变成(e1′,e2′,e3′)(e_{1}{'},e_{2}{'},e_{3}{'})(e1​′,e2​′,e3​′)。而对于同一个向量aaa(没有随坐标系而变),在两个坐标系下的坐标分别为[a1,a2,a3]T[a_{1}, a_{2},a_{3}]^{T}[a1​,a2​,a3​]T和[a1′,a2′,a3′]T[a_{1}{'}, a_{2}{'},a_{3}{'}]^{T}[a1​′,a2​′,a3​′]T。

[e1,e2,e3][a1a2a3]=[e1′,e2′,e3′][a1′a2′a3′][e_{1},e_{2},e_{3}]\begin{bmatrix}a_{1}\\ a_{2}\\ a_{3}\end{bmatrix} = [e_{1}{'},e_{2}{'},e_{3}{'}]\begin{bmatrix}a_{1}{'}\\ a_{2}{'}\\ a_{3}{'}\end{bmatrix}[e1​,e2​,e3​]⎣⎡​a1​a2​a3​​⎦⎤​=[e1​′,e2​′,e3​′]⎣⎡​a1​′a2​′a3​′​⎦⎤​

上述等式两边同时左乘[e1Te2Te3T]\begin{bmatrix}e_{1}^{T}\\ e_{2}^{T}\\ e_{3}^{T}\end{bmatrix}⎣⎡​e1T​e2T​e3T​​⎦⎤​,那么变换为:

[a1a2a3]=[e1Te1′e1Te2′e1Te2′e2Te1′e2Te2′e2Te2′e3Te1′e3Te2′e3Te2′][a1′a2′a3′]=defRa′\begin{bmatrix}a_{1}\\ a_{2}\\ a_{3}\end{bmatrix} = \begin{bmatrix} e_{1}^{T}e_{1}{'} & e_{1}^{T}e_{2}{'} & e_{1}^{T}e_{2}{'}\\ e_{2}^{T}e_{1}{'} & e_{2}^{T}e_{2}{'} & e_{2}^{T}e_{2}{'}\\ e_{3}^{T}e_{1}{'} & e_{3}^{T}e_{2}{'} & e_{3}^{T}e_{2}{'} \end{bmatrix} \begin{bmatrix}a_{1}{'}\\ a_{2}{'}\\ a_{3}{'}\end{bmatrix} \overset{\underset{\mathrm{def}}{}}{=} Ra{'}⎣⎡​a1​a2​a3​​⎦⎤​=⎣⎡​e1T​e1​′e2T​e1​′e3T​e1​′​e1T​e2​′e2T​e2​′e3T​e2​′​e1T​e2​′e2T​e2​′e3T​e2​′​⎦⎤​⎣⎡​a1​′a2​′a3​′​⎦⎤​=def​Ra′

把中间的矩阵拿出来,定义为一个矩阵RRR。这个矩阵由两组基之间的内积组成,刻画了旋转前后同一向量的坐标变换关系。只要旋转一样,这个矩阵就是一样的。因此称为旋转矩阵

R=[e1Te1′e1Te2′e1Te2′e2Te1′e2Te2′e2Te2′e3Te1′e3Te2′e3Te2′]R =\begin{bmatrix} e_{1}^{T}e_{1}{'} & e_{1}^{T}e_{2}{'} & e_{1}^{T}e_{2}{'}\\ e_{2}^{T}e_{1}{'} & e_{2}^{T}e_{2}{'} & e_{2}^{T}e_{2}{'}\\ e_{3}^{T}e_{1}{'} & e_{3}^{T}e_{2}{'} & e_{3}^{T}e_{2}{'} \end{bmatrix} R=⎣⎡​e1T​e1​′e2T​e1​′e3T​e1​′​e1T​e2​′e2T​e2​′e3T​e2​′​e1T​e2​′e2T​e2​′e3T​e2​′​⎦⎤​

同时,该矩阵各个分量是两个坐标系基的内积,由于基向量的长度为1,所以实际上是各基向量夹角的余弦值。

AAA是一个nnn阶方阵,AтA^{т}Aт是AAA的转置。如果有AтA=EA^{т}A=EAтA=E(单位阵),即AтA^{т}Aт等于AAA的逆,则称AAA是正交矩阵

旋转矩阵约束,必须是一个正交矩阵。反之,行列式为1的正交矩阵也是一个旋转矩阵。所以,可以将nnn维旋转矩阵的集合定义如下:

SO(n)={R∈Rn×n∣RRT=I,det(R)=1}SO(n) = \left \{ R \in \mathbb{R}^{n \times n} | R R^{T} = I ,det(R) = 1 \right \}SO(n)={R∈Rn×n∣RRT=I,det(R)=1}

其中,SO(n)SO(n)SO(n)是特殊正交群。SO(3)SO(3)SO(3)是指三维空间的旋转。

欧式变换描述为:
旋转:
a′=R−1a=RTaa{'} = R^{-1}a = R^{T}aa′=R−1a=RTa
加上平移:
a′=Ra+ta{'} = Ra + ta′=Ra+t

则,实际上述相机例子的变换为:

pw=Rwcpc+twcp_{w} = R_{wc}p_{c} + t_{wc}pw​=Rwc​pc​+twc​

其中,RwcR_{wc}Rwc​是指“把相机移动坐标系ccc”变换到世界坐标系www中。(由于向量乘在这个矩阵的右边,它的下标是从右读到左)

这种三维变换在多次变换的情况下,比较啰嗦,通过数学技巧,在一个三维向量的末尾添加1,将变成四位向量,称为齐次坐标。

[a′1]=[Rt0T1][a1]=defT[a1]\begin{bmatrix}a'\\ 1\end{bmatrix}=\begin{bmatrix}R & t\\ 0^{T} & 1\end{bmatrix}\begin{bmatrix}a\\ 1\end{bmatrix}\overset{\underset{\mathrm{def}}{}}{=} T\begin{bmatrix}a\\ 1\end{bmatrix}[a′1​]=[R0T​t1​][a1​]=def​T[a1​]

我们用a~\tilde{a}a~表示aaa的齐次坐标,则两次变换叠加有较好的表现形式:
b~=T1a~,c~=T2b~⇒c~=T2T1a~\tilde{b} = T_{1}\tilde{a} , \tilde{c}=T_{2}\tilde{b} \Rightarrow \tilde{c} = T_{2}T_{1}\tilde{a}b~=T1​a~,c~=T2​b~⇒c~=T2​T1​a~

这样的符号还是挺麻烦的,我们在不引起歧义的情况下,可以写成:b=Tab=Tab=Ta。

关于变换矩阵TTT,其左上角为旋转矩阵,右侧为平移向量,左下角为000向量,右下角为1。这种矩阵称为特殊欧式矩阵:

SE(3)={T=[Rt0T1]∈R4×4}∣R∈SO(3),t∈R4SE(3)=\left \{ T= \begin{bmatrix}R & t\\ 0^{T} & 1\end{bmatrix} \in \mathbb{R}^{4 \times 4} \right \} | R \in SO(3) , t \in \mathbb{R}^{4}SE(3)={T=[R0T​t1​]∈R4×4}∣R∈SO(3),t∈R4

与SO(3)SO(3)SO(3)一样,求解该矩阵的逆表示一个方向的变换:
T−1=[RT−RTt0T1]T^{-1} = \begin{bmatrix}R^{T} & -R^{T}t\\ 0^{T} & 1\end{bmatrix}T−1=[RT0T​−RTt1​]

2.3. 旋转向量和欧拉角

旋转矩阵表达旋转有两个缺点:

  • SO(3)SO(3)SO(3)的旋转矩阵有9个量,但一次选择只用了3个自由度,变换矩阵有16个量表达6个自由度,有没有更紧凑的方式;
  • 旋转矩阵必须是正交矩阵的约束,且行列式为1,求解困难。

因此,我们用一个三维向量表达旋转,用一个六维向量变大变换。事实上,任意旋转都可以用一个旋转轴和一个旋转角来表达。同样,变换矩阵则使用一个旋转向量和一个平移向量表达一次变换,这时的变量维数正好是六维。

从旋转向量到旋转矩阵的转换过程由罗德里格斯公式表明:

R=cosθI+(1−cosθ)nnT+sinθn∧R=cos \theta I + (1 - cos \theta)nn^{T} + sin \theta n^{\wedge}R=cosθI+(1−cosθ)nnT+sinθn∧

因此:
θ=arccostr(R)−12\theta = arccos \frac{tr(R)-1}{2}θ=arccos2tr(R)−1​

tr()tr()tr()是指求迹(trace),即是求矩阵的对角线元素之和。

欧拉角定义了一种直观的方式描述旋转——用3个分离的转角,分解成3次绕ZYXZYXZYX的分别旋转。

ZYXZYXZYX转角相当于把任意旋转分解以下3个轴的转角:

  • 绕物体的ZZZ轴旋转,得到偏航角yaw。
  • 绕旋转之后的YYY轴旋转,得到俯仰角pitch。
  • 绕旋转之后的XXX轴旋转,得到滚转角roll。

最后,可以用[r,p,y]T[r,p,y]^{T}[r,p,y]T三维向量描述任意旋转。

2.4. 四元素

四元素是一种扩展复数,一个四元数qqq拥有一个实部和3个虚部,本质上是一种扩展复数,描述3维的量,用四元数

q=q0+q1i+q2j+q3kq = q_{0} + q_{1}i+q_{2}j+q_{3}kq=q0​+q1​i+q2​j+q3​k

{i2=j2=k2=−1ij=k,ji=−kjk=i,kj=−iki=j,ik=−j\left \{\begin{matrix} i^{2}= j^{2} = k^{2} = -1 \\ ij = k,ji = -k \\ jk = i, kj = -i\\ ki = j,ik = -j \end{matrix}\right. ⎩⎪⎪⎨⎪⎪⎧​i2=j2=k2=−1ij=k,ji=−kjk=i,kj=−iki=j,ik=−j​
如果把i,j,ki,j,ki,j,k看作三个坐标轴,那么他们与自己的乘法和复数一样,相互之间的乘法和外积一样。有时,可以用一个标量和一个向量表达四元数:
q=[s,v]T,s=q0∈R,v=[q1,q2,q3]T∈R3q=[s,v]^{T} , s= q_{0} \in \mathbb{R}, v=[q_{1},q_{2},q_{3}]^{T} \in \mathbb{R}^{3}q=[s,v]T,s=q0​∈R,v=[q1​,q2​,q3​]T∈R3

从四元数到旋转矩阵的变换关系:

R=vvT+s2I+2sv∧+(v∧)2R = vv^{T} + s^{2}I +2sv^{\wedge} + (v^{\wedge})^{2}R=vvT+s2I+2sv∧+(v∧)2

最后,四元数到旋转向量的转换公式如下:

{θ=2arccosq0[nx,ny,nz]T=[q1,q2,q3]Tsinθ2\left \{\begin{matrix} \theta = 2arccos q_{0} \\ [n_{x},n_{y},n_{z}]^{T} = \frac {[q_{1},q_{2},q_{3}]^{T}}{sin \frac{\theta}{2}} \end{matrix}\right. {θ=2arccosq0​[nx​,ny​,nz​]T=sin2θ​[q1​,q2​,q3​]T​​

2.5. 其他几种变换方式

相似变换:
TS=[sRt0T1]T_{S}=\begin{bmatrix} sR &t \\ 0^{T} & 1 \end{bmatrix} TS​=[sR0T​t1​]

3. 李群与李代数基础

三维旋转矩阵构成了特殊正交群SO(3)SO(3)SO(3):

SO(3)={R∈R3×3∣RRT=I,det(R)=1}SO(3) = \left \{ R \in \mathbb{R}^{3 \times 3} | R R^{T} = I ,det(R) = 1 \right \}SO(3)={R∈R3×3∣RRT=I,det(R)=1}

变换矩阵构成了特殊欧氏群SE(3)SE(3)SE(3):

SE(3)={T=[Rt0T1]∈R4×4}∣R∈SO(3),t∈R4SE(3)=\left \{ T= \begin{bmatrix}R & t\\ 0^{T} & 1\end{bmatrix} \in \mathbb{R}^{4 \times 4} \right \} | R \in SO(3) , t \in \mathbb{R}^{4}SE(3)={T=[R0T​t1​]∈R4×4}∣R∈SO(3),t∈R4

旋转矩阵、变换矩阵对加法是不封闭的,对乘法是封闭的。

R1R2∈SO(3),T1T2∈SE(3)R_{1}R_{2} \in SO(3) , T_{1}T_{2} \in SE(3)R1​R2​∈SO(3),T1​T2​∈SE(3)

对于这种只有一个(良好的)运算的集合,我们称之为群。

3.1. 群

群就是对称性,是一种集合加上一种运算的代数结构。集合记作AAA,运算记作...,则群记作G=(A,.)G=(A,.)G=(A,.)。群要求运算满足以下4个条件:

  • 封闭性:∀a1,a2∈A,a1.a2∈A\forall a_{1},a_{2} \in A,a_{1}.a_{2} \in A∀a1​,a2​∈A,a1​.a2​∈A
  • 结合律:∀a1,a2,a3∈A,(a1.a2).a3=a1.(a2.a3)\forall a_{1},a_{2},a_{3} \in A,(a_{1}.a_{2}).a_{3} = a_{1}.(a_{2}.a_{3})∀a1​,a2​,a3​∈A,(a1​.a2​).a3​=a1​.(a2​.a3​)
  • 幺元:∃∈A,s.t.∀a∈A,a0.a=a.a0=a\exists \in A,s.t. \forall a \in A,a_{0}.a = a.a_{0} = a∃∈A,s.t.∀a∈A,a0​.a=a.a0​=a
  • 逆:∀∈A,∃a−1∈A,s.t.a.a−1=a0\forall \in A, \exists a^{-1} \in A, s.t. a.a^{-1} = a_{0}∀∈A,∃a−1∈A,s.t.a.a−1=a0​

其中,s.t.s.t.s.t.表示约束条件。

矩阵中常见的群有:

  • 一般线性群GL(n)GL(n)GL(n) 指n×nn \times nn×n的可逆矩阵,它们对矩阵乘法成群。
  • 特殊正交群SO(n)SO(n)SO(n) 就是旋转矩阵群,其中SO(2)SO(2)SO(2)和SO(3)SO(3)SO(3)最为常见。
  • 特殊欧式群SE(n)SE(n)SE(n) 就是nnn维欧氏变换,如SE(2)SE(2)SE(2)和SE(3)SE(3)SE(3)。

李群是指具有连续(光滑)性质的群,SO(n)SO(n)SO(n)和SE(n)SE(n)SE(n)在实数空间上是连续的,可以直观想象一个刚体能够连续地在空间中运动。

∀\forall∀表示所有,全部意思,Any的倒写。

3.2. 李代数的引出

我们说,RRR是某个相机的旋转,它会随着时间连续地变换,即为时间的函数:R(t)R(t)R(t)。其旋转矩阵,有:

R(t)R(t)T=IR(t)R(t)^{T} = IR(t)R(t)T=I

我们对时间求导,经过推导,找到一个三维向量ϕ(t)∈R3\phi(t) \in \mathbb{R}^{3}ϕ(t)∈R3,使之有:

R˙(t)R(t)T=ϕ(t)∧\dot{R}(t)R(t)^{T} = \phi(t)^{\wedge}R˙(t)R(t)T=ϕ(t)∧

等式两边同乘R(t)R(t)R(t),由于RRR为正交矩阵。

R˙(t)=ϕ(t)∧R(t)\dot{R}(t) = \phi(t)^{\wedge}R(t)R˙(t)=ϕ(t)∧R(t)

我们根据导数的定义,把R(t)R(t)R(t)在t=0t=0t=0附近进行一阶泰勒展开:

R(t)≈R(t0)+R˙(t0)(t−t0)=I+ϕ(t0)∧(t)R(t) \approx R(t_{0}) + \dot{R}(t_{0})(t-t_{0}) \\ =I + \phi(t_{0})^{\wedge(t)}R(t)≈R(t0​)+R˙(t0​)(t−t0​)=I+ϕ(t0​)∧(t)

我们看到ϕ\phiϕ反映了RRR的导数性质。同时在t0t_{0}t0​附近,设ϕ\phiϕ保持为常数ϕ(t0)=ϕ0\phi(t_{0})=\phi_{0}ϕ(t0​)=ϕ0​。

上式是一个关于RRR微分方程,而且有初始值R(0)=IR(0)=IR(0)=I,解得:

R(t)=exp(ϕ0∧t)R(t) = exp(\phi_{0}^{\wedge}t)R(t)=exp(ϕ0∧​t)

旋转矩阵RRR与另一个反对称矩阵ϕ0∧t\phi_{0}^{\wedge}tϕ0∧​t通过指数关系发生关联:

  • ϕ\phiϕ是对应到SO(3)SO(3)SO(3)上的李代数so(3)so(3)so(3)
  • 李群与李代数间的指数/对数映射。

3.3. 李代数

每个李群都对应一种李代数。每个李群都有李代数,李代数描述了李群的局部性质。

  • 李代数so(3)so(3)so(3)

so(3)={ϕ∈R3,Φ=ϕ∧∈R3}so(3) = \left \{\phi \in \mathbb{R}^{3}, \Phi = \phi^{\wedge} \in \mathbb{R}^{3} \right \}so(3)={ϕ∈R3,Φ=ϕ∧∈R3}

so(3)so(3)so(3)是一个由三维向量组成的集合,每个向量对应一个反对称矩阵,可以用于表达旋转矩阵的导数。

R(t)=exp(ϕ0∧t)R(t) = exp(\phi_{0}^{\wedge}t)R(t)=exp(ϕ0∧​t)

  • 李代数se(3)se(3)se(3)

se(3)={ξ=[ρϕ]∈R6,ρ∈R3,ϕ∈so(3),ξ∧=[ϕ∧ρ0T0]∈R4×4}se(3) = \left\{ \xi = \begin{bmatrix}\rho \\ \phi\end{bmatrix} \in \mathbb{R}^{6},\rho \in \mathbb{R}^{3},\phi \in so(3), \xi^{\wedge} = \begin{bmatrix} \phi^{\wedge}& \rho \\ 0^{T} & 0 \end{bmatrix} \in \mathbb{R}^{4 \times 4} \right\}se(3)={ξ=[ρϕ​]∈R6,ρ∈R3,ϕ∈so(3),ξ∧=[ϕ∧0T​ρ0​]∈R4×4}

简单地把se(3)se(3)se(3)理解成“由一个平移加上一个so(3)元素构成的向量so(3)元素构成的向量so(3)元素构成的向量”。

初识SLAM到认识李群学习笔记相关推荐

  1. 视觉SLAM十四讲学习笔记-第四讲---第五讲学习笔记总结---李群和李代数、相机

    第四讲---第五讲学习笔记如下: 视觉SLAM十四讲学习笔记-第四讲-李群与李代数基础和定义.指数和对数映射_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第四讲-李代数求导与扰动模 ...

  2. 视觉SLAM十四讲学习笔记-第二讲-初识SLAM

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 "定位"和"建图",可以看成感知的"内外之分". ...

  3. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-三角测量和实践

     专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第 ...

  4. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-对极几何和对极约束、本质矩阵、基础矩阵

    专栏系列文章如下:  专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLA ...

  5. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点法和特征提取和匹配实践

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  6. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的实践-高斯牛顿法和曲线拟合

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  7. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  8. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  9. 视觉SLAM十四讲学习笔记-第四讲-Sophus实践、相似变换群与李代数

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

最新文章

  1. Linux国内源介绍
  2. 实现 对象在内存中的引用一致性 之第一步
  3. leetcode算法题--组合总和 Ⅳ★
  4. 学习excel数据分析_为什么Excel是学习数据分析的最佳方法
  5. Codeforces Round #694 Div. 2
  6. QPW 操作日志表(tl_operate_log)
  7. 中国股市暴涨暴跌全记录
  8. 打造运维大脑:翼支付高速发展背后,甜橙金融的云化智能演进
  9. Java解决空引用_在java中检查空引用的乐观方法
  10. linux mysql phpadmin_Linux系统下安装phpmyadmin方法
  11. 设计模式笔记--委派
  12. P1144 最短路计数
  13. [PyTorch] 损失函数
  14. 【C++】继承时构造函数和析构函数
  15. 几种.NET平台数据持久化框架介绍
  16. 开元酒店在中国的签约及在营酒店规模正式超过600家
  17. html 制作人物模型,玩家制作《辐射4》人物模型图 惊艳无比让人叹服
  18. 威联通服务器无限重启,威联通NAS,时不时的读盘,无法休眠的问题
  19. r5 7600x和r7 7700x差距
  20. java文件后缀_关于java文件扩展名认识

热门文章

  1. 将bmp图像转换为ppm格式
  2. Day04 list(列表)
  3. 无限试驾2 服务器,《无限试驾 2》PC版本配置需求公布
  4. 有这么一套,阿里架构师熬夜一周整理的java进阶路线,你看不看?
  5. 《充分利用你的24小时》读后感
  6. linux if then 语法错误,Linux Shell 之 if-then 的高级特性
  7. 700万人预约,十年人气IP上线却屡遭外挂侵扰
  8. Hdu 2512 一卡通大冒险 (贝尔数)
  9. LeetCode算法解析之“贪心”解决反转矩阵最大得分问题
  10. 模块化(module.exports、包、)