视觉SLAM基本原理(1)—— 欧氏变换与旋转向量

本人才疏学浅,内容难免有疏漏与不足,敬请您谅解与指正.

向量空间

1、概念

    对于向量空间\(\mathbb{V}\)一组向量\({\boldsymbol \alpha}_{1}, {\boldsymbol \alpha}_{2}…{\boldsymbol \alpha}_{r}\):
  1. 取自\(\mathbb{V}\);
  2. 线性无关;
  3. \(\mathbb{V}\)内任意向量a均可由其线性表出.
    则\({\boldsymbol \alpha}_{1}, {\boldsymbol \alpha}_{2}…{\boldsymbol \alpha}_{r}\)就是\(\mathbb{V}\)的一组基(实际上\({\boldsymbol \alpha}_{1}, {\boldsymbol \alpha}_{2}…{\boldsymbol \alpha}_{r}\)就是\(\mathbb{V}\)内的一组极大无关组).    且\({\boldsymbol \alpha}=k_{1}{\boldsymbol \alpha}_{1}+k_{2}{\boldsymbol \alpha}_{2}+…+k_{r}{\boldsymbol \alpha}_{r}\)叫做\({\boldsymbol \alpha}\)在这组基下的坐标(唯一解).

2、过渡矩阵

    \({\boldsymbol \alpha}_{1}, {\boldsymbol \alpha}_{2}…{\boldsymbol \alpha}_{n}\), \({\boldsymbol \beta}_{1}, {\boldsymbol \beta}_{2}…{\boldsymbol \beta}_{n}\)分别为\(\mathbb{R}^n\)的两组基,且 \([{\boldsymbol \alpha}_{1}, {\boldsymbol \alpha}_{2}…{\boldsymbol \alpha}_{n}]\) \({\boldsymbol C}\) = \([{\boldsymbol \beta}_{1}, {\boldsymbol \beta}_{2}…{\boldsymbol \beta}_{n}]\).    则 \({\boldsymbol C}\)(可逆)为 \([{\boldsymbol \alpha}_{1}, {\boldsymbol \alpha}_{2}…{\boldsymbol \alpha}_{n}]\)到\([{\boldsymbol \beta}_{1}, {\boldsymbol \beta}_{2}…{\boldsymbol \beta}_{n}]\)过渡矩阵.    需要注意的是,这里面存在一个默认的坐标系(可以是A,B之一)来表示\({\boldsymbol \alpha}_{1}, {\boldsymbol \alpha}_{2}…{\boldsymbol \alpha}_{n}\), \({\boldsymbol \beta}_{1}, {\boldsymbol \beta}_{2}…{\boldsymbol \beta}_{n}\).   
例子: \({\boldsymbol \alpha}_{1}=\)\(\begin{bmatrix}1\\0\\1\\\end{bmatrix}\), \({\boldsymbol \alpha}_{2}=\)\(\begin{bmatrix}1\\1\\-1\\\end{bmatrix}\), \({\boldsymbol \alpha}_{3}=\)\(\begin{bmatrix}1\\-1\\1\\\end{bmatrix}\), \({\boldsymbol \beta}_{1}=\)\(\begin{bmatrix}3\\0\\1\\\end{bmatrix}\), \({\boldsymbol \beta}_{2}=\)\(\begin{bmatrix}2\\0\\0\\\end{bmatrix}\), \({\boldsymbol \beta}_{3}=\)\(\begin{bmatrix}0\\2\\-2\\\end{bmatrix}\)是\(\mathbb{R}^3\)的两个基.   
问:已知 \({\boldsymbol \xi}\)在\({\boldsymbol \beta}_{1}, {\boldsymbol \beta}_{2},{\boldsymbol \beta}_{3}\)下的坐标为\((1,2,0)\),求 \({\boldsymbol \xi}\)在\({\boldsymbol \alpha}_{1}, {\boldsymbol \alpha}_{2},{\boldsymbol \alpha}_{3}\)下的坐标.   
解:设 \({\boldsymbol \xi}=y_{1}{\boldsymbol \alpha}_{1}+y_{2}{\boldsymbol \alpha}_{2}+y_{3}{\boldsymbol \alpha}_{3}=1{\boldsymbol \beta}_{1}+2{\boldsymbol \beta}_{2}+0{\boldsymbol \beta}_{3}\)               $$[{\boldsymbol \alpha}_{1}\;{\boldsymbol \alpha}_{2}\;{\boldsymbol \alpha}_{3}]\begin{bmatrix}y_{1}\\y_{2}\\y_{3}\\\end{bmatrix}=[{\boldsymbol \beta}_{1}\;{\boldsymbol \beta}_{2}\;{\boldsymbol \beta}_{3}]\begin{bmatrix}1\\2\\0\\\end{bmatrix}$$            $$\begin{bmatrix}y_{1}\\y_{2}\\y_{3}\\\end{bmatrix}=[{\boldsymbol \alpha}_{1}\;{\boldsymbol \alpha}_{2}\;{\boldsymbol \alpha}_{3}]^{-1}[{\boldsymbol \beta}_{1}\;{\boldsymbol \beta}_{2}\;{\boldsymbol \beta}_{3}]\begin{bmatrix}1\\2\\0\\\end{bmatrix}=\begin{bmatrix}1\\3\\3\\\end{bmatrix}$$

欧氏变换

1、坐标系

    SLAM的两个坐标系:世界坐标系,相机坐标系。    世界坐标系的基(单位正交基):\({\boldsymbol e}_1=\begin{bmatrix}1\\0\\0\\\end{bmatrix}, {\boldsymbol e}_2=\begin{bmatrix}0\\1\\0\\\end{bmatrix}, {\boldsymbol e}_3=\begin{bmatrix}0\\0\\1\\\end{bmatrix}\).    相机坐标系的基(单位正交基):\({\boldsymbol e}_1', {\boldsymbol e}_2', {\boldsymbol e}_3'\)(其坐标值为在世界坐标系下的值,为动态量).

2、旋转矩阵

    在世界坐标系中的向量\({\boldsymbol a}\)(世界坐标系下的坐标值),到了相机坐标系中变成了\({\boldsymbol a}'\)(相机坐标系下的坐标值).    在已知\({\boldsymbol a}'\)的情况下    $${\boldsymbol a}=\begin{bmatrix}a_{1}\\a_{2}\\a_{3}\\\end{bmatrix}=[{\boldsymbol e}_{1}\;{\boldsymbol e}_{2}\;{\boldsymbol e}_{3}]^{-1}[{\boldsymbol e}'_{1}\;{\boldsymbol e}'_{2}\;{\boldsymbol e}'_{3}]\begin{bmatrix}a'_{1}\\a'_{2}\\a'_{3}\\\end{bmatrix}={\boldsymbol Ra'}.$$    或$$\left({\boldsymbol a}=\begin{bmatrix}a_{1}\\a_{2}\\a_{3}\\\end{bmatrix}=[{\boldsymbol e}_{1}\;{\boldsymbol e}_{2}\;{\boldsymbol e}_{3}]^{T}[{\boldsymbol e}'_{1}\;{\boldsymbol e}'_{2}\;{\boldsymbol e}'_{3}]\begin{bmatrix}a'_{1}\\a'_{2}\\a'_{3}\\\end{bmatrix}={\boldsymbol Ra'}\right).$$     这里的\(R\)即为旋转矩阵,旋转矩阵为正交矩阵,反之正交矩阵亦为旋转矩阵.它的行列式为1,且每个列向量都是单位向量且相互正交,它的逆等于它的转置,这样我们就能联想到,旋转矩阵描述的是相机的旋转,该旋转矩阵的逆矩阵描述的是相反的旋转.

3、特殊正交群

    特殊正交群是n维空间的旋转矩阵的集合:$$SO(n) = \left \{ {\boldsymbol R} \in {\mathbb R}^{n \times n} | {\boldsymbol R} {\boldsymbol R}^{T} = {\boldsymbol I}, det({\boldsymbol R}) = 1\right \}$$

4、变换矩阵

    变换矩阵与旋转矩阵类似,是坐标旋转与平移的结合:
$${\boldsymbol a} = {\boldsymbol R} {\boldsymbol a'} + {\boldsymbol t}$$
    上式对乘法不封闭,变为齐次坐标(升维):
$$\begin{bmatrix}      {\boldsymbol a} \\1\\\end{bmatrix} =\begin{bmatrix}     {\boldsymbol R}  &  {\boldsymbol t}  \\0^{T}&1\\\end{bmatrix} \begin{bmatrix}     {\boldsymbol a'} \\1\\\end{bmatrix} = {\boldsymbol T} \begin{bmatrix}       {\boldsymbol a'}  \\1\\ \end{bmatrix}$$
    式中\( {\boldsymbol T} \)即为变换矩阵.
    直观说明:
    蓝色坐标系(B)为相机坐标系,青色坐标系为相机坐标系旋转之后的坐标系,红色坐标系为世界坐标系,被观察点为\(P\).\({\boldsymbol R} {\boldsymbol a'} \)里面\({\boldsymbol a'} \)是\(\vec {O_{1}P}\)在蓝色坐标系中的坐标向量,\({\boldsymbol t}\)是\(\vec {O_{1}O_{2}}\)在红色坐标系中的坐标,\({\boldsymbol R} {\boldsymbol a'} \)是\(\vec {O_{1}P}\)在青色坐标系中的坐标向量,从而有$${\boldsymbol a} (\vec {O_{2}P})= {\boldsymbol R} {\boldsymbol a'} + {\boldsymbol t}.$$

    实际上这里面的\(R\)就是\([{\boldsymbol e}'_{1}\;{\boldsymbol e}'_{2}]\),因为\([{\boldsymbol e}_{1}\;{\boldsymbol e}_{2}]^T\)是单位阵.

5、特殊欧氏群

    $$SE(3) = \left \{  {\boldsymbol T} =\begin{bmatrix}{\boldsymbol R}  &  {\boldsymbol t}  \\0^{T}&1\\\end{bmatrix}\in {\mathbb R}^{4 \times 4} | {\boldsymbol R} \in SO(3), {\boldsymbol t} \in {\mathbb R}^{3} \right \}.$$

旋转向量与欧拉角

1、旋转向量

$${\boldsymbol w} = \theta \; {\boldsymbol n}$$   
    其中,\(\theta\)为旋转向量的长度,代表旋转的角度,\({\boldsymbol n}\)为旋转向量的方向向量(单位向量)代表旋转轴的方向.

2、罗德里格斯公式

    旋转向量转换为旋转矩阵:
$${\boldsymbol R} = cos\theta \cdot {\boldsymbol I} + (1 - cos\theta) {\boldsymbol n} {\boldsymbol n}^{T} + sin\theta \cdot {\boldsymbol n}^{\land}$$
    \({\boldsymbol a}^{\land}\)定义为向量 \({\boldsymbol a}\) 的反对称矩阵:
$${\boldsymbol a} \times {\boldsymbol b} = \begin{vmatrix}{\boldsymbol i} & {\boldsymbol j} & {\boldsymbol k} \\                                                                        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} {\boldsymbol b}= {\boldsymbol a}^{\land} {\boldsymbol b}$$
    旋转矩阵转换为旋转向量:
$${\rm tr} ({\boldsymbol R}) = cos\theta \cdot {\rm tr}({\boldsymbol I}) + (1 - cos\theta) {\rm tr} ({\boldsymbol n} {\boldsymbol n}^{T}) + sin\theta \cdot {\rm tr} ({\boldsymbol n}^{\land})= 1 + 2cos\theta$$
    进而:
$$\theta = arccos\left(\frac{ {\rm tr}({\boldsymbol R}) - 1 } { 2 }\right)$$
    \({\boldsymbol R}\)作用于\({\boldsymbol n}\),\({\boldsymbol n}\)不变:
$${\boldsymbol R} {\boldsymbol n} = 1 \cdot {\boldsymbol n}$$
    转轴\({\boldsymbol n}\)是矩阵\({\boldsymbol R}\)特征值 1 对应的特征向量,求解此方程,再归一化,即可得到旋转轴.

3、欧拉角

    欧拉角就是将旋转分解为三个方向上的分量,该方式对人友好,适用于人机交互场景,SLAM坐标变换一般不采用.

猜你喜欢

转载自blog.csdn.net/weixin_38275649/article/details/80148088