蓝色
紫色
红色
本章简要介绍 三维世界中刚体 运动的描述方式:旋转矩阵、旋转向量、欧拉角、四元数等。
相机:在 某些时刻 采集数据 连续时间的运动 => 离散时刻
对于小萝卜: t = 1 , . . . , K t = 1,...,K t=1,...,K 时刻,小萝卜在各个时刻的位置: x 1 , . . . , x K x_1,...,x_K x1,...,xK => 小萝卜的轨迹
对于地图:设置许多路标 (Landmark),每个时刻,传感器会测量到一部分路标点,得到他们的观测数据。
N 个路标点: y 1 , . . . , y N y_1,...,y_N y1,...,yN
机器人会携带一个 测量自身运动 的传感器(eg.码盘或惯性传感器),这个传感器可以测量有关运动的读数,但不一定直接是 位置之差,还可能是 加速度、角速度 等信息。抽象成数学模型:(运动方程)
u k u_k uk 是运动传感器的读数(输入), w k w_k wk 是噪声。
观测方程: 描述当小萝卜在 x k x_k xk 位置上看到某个路标点 y j y_j yj ,产生了一个观测数据 z k , j z_{k,j} zk,j 。 v k , j v_{k,j} vk,j 是观测里的噪声。
位姿:位置+姿态
如果小萝卜在 平面 中运动,那么它的位姿由 两个位置 和 一个转角 来描述,即 x k = [ x , y , θ ] k T x_k=[x,y,θ]^T_k xk=[x,y,θ]kT 。同时,运动传感器能够测量到小萝卜在每两个时间 间隔位置和转角的变化量 u k = [ Δ x , Δ y , Δ θ ] k T u_k=[Δx,Δy,Δθ]^T_k uk=[Δx,Δy,Δθ]kT,则运动方程可具体化为:
上述是简单的 线性关系 。但并不是所有的传感器都直接能测量出 位移和角度变化 ,所以会有更复杂的运动方程,需要进行动力学分析。
关于观测方程,比方说小萝卜携带着一个 二维激光传感器。我们知道激光传感器观测一个2D 路标点时,能够测到两个量:路标点与小萝卜本体之间的 距离r 和 夹角ϕ 。我们记 路标点 为 y = [ p x , p y ] T y=[p_x,p_y]^T y=[px,py]T(为保持简洁,省略了下标),观测数据 为 z = [ r , ϕ ] T z=[r,ϕ]^T z=[r,ϕ]T ,那么观测方程就具体化为:
视觉SLAM:传感器是 相机。
观测方程就是 “对路标点拍摄后,得到了图像中的像素” 的过程。针对不同的传感器,这两个方程有不同的参数化形式。
如果我们保持通用性,把它们取成通用的抽象形式。则SLAM 过程可总结为两个基本方程:
这两个方程描述了最基本的SLAM 问题:当我们知道运动测量的读数u,以及传感器的读数z 时,如何求解定位问题(估计 位置x )和建图问题(估计 路标y )?
SLAM问题 建模成 状态估计问题 [通过带有噪声的测量数据,估计内部的、隐藏着的 状态变量]
在西电的一篇硕士论文第五章里看到这样的表述:
“非刚性物体的图像配准比刚体物体的复杂,因为非刚性物体图像配准中的变换必须考虑 非线性形变 ,这种形变可能是全局的也可能是局部的,也可能二者都有。”
注意区别 坐标 和 向量
向量只有在指定坐标系之后才可以谈论该向量在 此坐标系下的坐标,即找到 若干个实数 对应这个向量。
当指定一个坐标系,即给定一个线性空间的基 ( e 1 , e 2 , e 3 ) (e_1,e_2,e_3) (e1,e2,e3),向量a 在这组基下的坐标:
描述向量间的投影关系
:可表示向量的旋转
:两个向量张成的四边形的有向面积,大小为 |a||b|sin,方向垂直于这两个向量构成的平面
a 旋转到 b,可以由旋转向量 w 来描述,w 即是 a×b,其大小由 a 和 b 的夹角大小决定。
坐标系之间的变换关系:旋转和平移
惯性坐标系 / 世界坐标系 => 固定不动 x W , y W , z W x_W,y_W,z_W xW,yW,zW
移动坐标系 => 相机或机器人 x C , y C , z C x_C,y_C,z_C xC,yC,zC
欧式变换:同一个向量在各个坐标系下的长度和夹角都不会发生变化 平移和旋转
设某个单位正交基 ( e 1 , e 2 , e 3 ) (e_1 , e_2 , e_3 ) (e1,e2,e3) 经过一次旋转,变成了 ( e 1 ′ , e 2 ′ , e 3 ′ ) (e_1' , e_2' , e_3') (e1′,e2′,e3′) 。那么,对于同一个向量 a(该向量并没有随着坐标系的旋转而发生运动),它在两个坐标系下的坐标为 [ a 1 , a 2 , a 3 ] T [a_1 , a_2 , a_3 ]^T [a1,a2,a3]T 和 [ a 1 ′ , a 2 ′ , a 3 ′ ] T [a_1' , a_2' , a_3' ]^T [a1′,a2′,a3′]T 。
为了描述两个坐标之间的关系,上式左右同时左乘 [ e 1 T e 2 T e 3 T ] \begin{bmatrix} e_1^T\\ e_2^T\\ e_3^T \end{bmatrix} ⎣⎡e1Te2Te3T⎦⎤ :
旋转矩阵 R:描述旋转本身
由两组基之间的 内积 组成,刻画了旋转前后同一个向量的坐标变换关系。只要旋转是一样的,那么这个矩阵也是一样的。
正交矩阵: A T = A − 1 A^T=A^{-1} AT=A−1
定义:设A是一个n 阶方阵,如果有 A A T = I AA^T=I AAT=I ,则A是正交矩阵。
旋转矩阵的集合定义:
S O ( 3 ) SO(3) SO(3) 表示三维空间的旋转。
由于 旋转矩阵R 是正交矩阵,它的 逆 R − 1 R^{-1} R−1 / 转置 R T R^T RT 描述了一个相反的旋转。
考虑世界坐标系中的向量 a,经过一次旋转(用 R 描述)和一次平移 t 后,得到了 a‘ ,那么把旋转和平移合到一起,有:
但是这样的变换关系不是一个 线性关系 ,多次变换之后会过于复杂。
与 S O ( 3 ) SO(3) SO(3) 一样,求解 该矩阵的逆 表示一个反向的变换:
变换矩阵 T T T D o F ( T ) = 6 DoF(T)=6 DoF(T)=6 (1+1)*3
三个维度上的旋转+平移
旋转矩阵 R R R D o F ( R ) = 3 DoF(R)=3 DoF(R)=3 1*3
矩阵表示法的缺点:
冗余
估计或优化一个 R/T 时,求解变得更困难
在前面我们注意到 外积可以表达两个向量的旋转关系,所以可以用一个三维向量表达旋转,六维向量表达变换。
任意旋转都可以用 一个旋转轴和一个旋转角 来刻画。
旋转向量(轴角, Axis-Angle):其方向与旋转轴一致,长度等于旋转角。
对于变换矩阵 T T T,我们使用 一个旋转向量和一个平移向量 即可表达一次变换,这时的维数正好是六维。
罗德里格斯公式(Rodrigues’s Formula ):
符号∧ 是向量到反对称矩阵的转换符。
对于转角θ:
对于转轴 n,旋转轴上的向量旋转后不发生改变: 旋转轴经过旋转之后不变
R n = n \mathbf {Rn=n} Rn=n
转轴 n 是矩阵 R 特征值 1 对应的特征向量。求解此方程,再归一化,就得到了旋转轴。
欧拉角:使用了三个分离的转角,把一个旋转分解成三次绕不同轴的旋转。根据绕轴旋转的先后顺序不同一般分为:XYZ、ZYZ、ZYX等。还需要考虑绕 固定轴 旋转还是 绕旋转之后的轴 旋转。
欧拉角当中比较常用的一种,便是用“偏航-俯仰-滚转”(yaw-pitch-roll)三个角度来描述一个旋转的。 ⇔ ZYX 轴的旋转 rpy角
[ r , p , y ] T [r,p,y]^T [r,p,y]T
在俯仰角为 ± 90 ° ±90° ±90° 时,第一次旋转与第三次旋转将使用同一个轴,使得系统丢失了一个自由度(由三次旋转变成了两次旋转)。
理论上,用三个实数来表达三维旋转时,都会不可避免地碰到奇异性问题,所以欧拉角不适于插值和迭代,且一般不用于表达姿态,也不会在滤波或优化中使用。
三维旋转是一个三维流形,想要无奇异性地表达它,三个量不够。
复数集 C C C 表示复平面上的向量,复数的乘法则 能表示复平面上的旋转。eg. 乘上复数 i 相当于逆时针把一个复向量旋转 90° 。
紧凑且无奇异性
1个实部&3个虚部
一个模长为 1 的复数,可以表示复平面上的纯旋转(没有长度的缩放)⇒ 单位四元数表示三维空间中任意一个旋转
四元数中:
乘以 i i i 应该对应着旋转 180° 这样才能保证 i j = k ij=k ij=k 的性质。
i 2 = − 1 i^2=−1 i2=−1 ,意味着绕 i i i 轴旋转 360° 后,得到了一个相反的东西。旋转 2*360° 才能得到和原来一样的向量。
设某个旋转是绕单位向量 n = [ n x , n y . n z ] T \mathbf n=[n_x,n_y.n_z]^T n=[nx,ny.nz]T 进行了角度为θ的旋转,则该旋转的四元数形式为:
在上式中, θ + 2 π θ+2π θ+2π 得到一个相同的旋转,但此时四元数变成了 − q \mathbf{-q} −q
⇒ 任意的旋转都可以由两个 互为相反数的四元数 表示
θ = 0 θ=0 θ=0 ,则得到一个没有任何旋转的实四元数 q 0 = [ ± 1 , 0 , 0 , 0 ] T \mathbf {q_0}=[±1,0,0,0]^T q0=[±1,0,0,0]T
设空间三维点 p = [ x , y , z ] ∈ R 3 \mathbf p=[x,y,z]∈R^3 p=[x,y,z]∈R3 ,进行一个由轴角 n , θ \mathbf n,θ n,θ 指定的旋转
矩阵形式: p ′ = R p \mathbf{p'=Rp} p′=Rp
四元数形式:
直观方法:四元数q ⇒ 轴角 θ 和 n ⇒ 罗德里格斯公式转换为 R
(缺点:计算 arccos 代价较大)
假设矩阵为 R = { m i j } , i , j ∈ [ 1 , 2 , 3 ] R = \left \{m_{ij} \right \} , i, j ∈ [1, 2, 3] R={mij},i,j∈[1,2,3] ,其对应的四元数 q q q 由下式给出:
事实上一个 R \mathbf R R 对应的四元数表示并不是唯一的, q \mathbf q q 和 − q \mathbf{−q} −q 表示同一个旋转。
从真实世界到相机照片的变换是一个 射影变换 。如果相机的 焦距为无穷远 ,那么这个变换则为 仿射变换 。