SLAM公式引出、推导和理解 1-1


0 数学表达式

由于相机是在某些时刻采集数据的,所以我们只关心这一段时间机器人的位置和所处地图,将该段时间由连续变为离散, t = 1 , ⋯   , K t = 1,\cdots,K t=1,,K。各个时刻的位置为 x k = 1 : K x_{k=1:K} xk=1:K,构成了机器人的轨迹。地图是由路标(Landmark)构成的,对应的每一离散时刻,传感器会采集到 N N N 个路标点 y 1 , ⋯   , y N y_1,\cdots,y_N y1,,yN
运动方程:从 k − 1 k-1 k1 时刻到 k k k 时刻,机器人的位置变化
观测方程:在 k k k 时刻于 x k x_k xk 出检测到了某一路标 y j y_j yj
{ x k = f ( x k − 1 , u k ) + w k , k = 1 , ⋯   , K z k , j = h ( x k , y j ) + v k , j , ( k , j ) ∈ O (0.1) \begin{cases} x_{k}=f(x_{k-1},u_k)+w_k, &k=1,\cdots,K \\ z_{k,j}=h(x_k,y_j)+v_{k,j}, &(k,j)\in \mathcal{O} \end{cases} \tag{0.1} {xk=f(xk1,uk)+wk,zk,j=h(xk,yj)+vk,j,k=1,,K(k,j)O(0.1)其中 u k u_k uk w k w_k wk v k v_k vk 分别表示传感器的输入、运动和观测时的噪声。 O \mathcal{O} O 是一个集合,记录着在哪个时刻观察到了哪个路标, z k , j z_{k,j} zk,j 表示在 k k k 时刻观察到的 j j j 路标的像素坐标(图片), x k x_k xk 表示为用外参 R , t R,t R,t 描述相机的旋转、平移, y j y_j yj 表示路标点在世界坐标系下的坐标 P w P_w Pw h ( x k , y j ) h(x_k,y_j) h(xk,yj) 表示在 x k x_k xk 处观察到 y j y_j yj
当知道运动测量的读数 u u u 以及传感器的读数 z z z 时,如何求解定位问题(估计 x x x)和建图问题(估计 y y y),即为状态估计(State Estimation)问题。


1 位姿表达—运动方程

1.1 基础知识


空间的一组 ( e 1 , e 2 , e 3 ) (e_1,e_2,e_3) (e1,e2,e3) ,任意向量 a a a 在这组基下的坐标为 a = [ e 1 , e 2 , e 3 ] [ a 1 a 2 a 3 ] = a 1 e 1 + a 2 e 2 + a 3 e 3 (1.1.1) a=[e_1,e_2,e_3]\left[\begin{array}{c}a_1 \\a_2\\a_3\end{array}\right]=a_1e_1+a_2e_2+a_3e_3\tag{1.1.1} a=[e1,e2,e3] a1a2a3 =a1e1+a2e2+a3e3(1.1.1) ( a 1 , a 2 , a 3 ) T (a_1,a_2,a_3)^T (a1,a2,a3)T 称为 a a a 在此基下的坐标。

内积
对于 a , b ∈ R 3 a,b\in \mathbb{R}^3 a,bR3内积写为 a ⋅ b = a T b = ∑ i = 1 3 a i b i = ∣ a ∣ ∣ b ∣ cos ⁡ ⟨ a , b ⟩ (1.1.2) a\cdot b=a^Tb=\sum_{i=1}^{3}a_ib_i=|a||b|\cos\langle a,b\rangle\tag{1.1.2} ab=aTb=i=13aibi=a∣∣bcosa,b(1.1.2) 其中 ⟨ a , b ⟩ \langle a,b\rangle a,b 指向量 a , b a,b a,b 的夹角。
另外,当 a a a 为单位向量时, ∣ a ∣ ∣ b ∣ cos ⁡ ⟨ a , b ⟩ = ∣ b ∣ cos ⁡ ⟨ a , b ⟩ |a||b|\cos\langle a,b\rangle=|b|\cos\langle a,b\rangle a∣∣bcosa,b=bcosa,b 表示为 b b b a a a 上的投影。

外积
外积
a × b = ∥ e 1 e 2 e 3 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 2 a 1 b 2 − a 2 b 1 ] = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ]  ⁣ b = d e f a ∧ b (1.1.3) a \times b=\left\|\begin{matrix} e_1 &e_2&e_3\\a_1 &a_2&a_3\\b_1 &b_2&b_3\end{matrix}\right\|=\left[\begin{matrix}a_2b_3-a_3b_2\\a_3b_1-a_1b_2\\a_1b_2-a_2b_1\end{matrix}\right]=\left[\begin{matrix} 0&-a_3&a_2\\a_3&0&-a_1\\-a_2&a_1&0\end{matrix}\right]\!b\overset{def}{=}a^\wedge b\tag{1.1.3} a×b= e1a1b1e2a2b2e3a3b3 = a2b3a3b2a3b1a1b2a1b2a2b1 = 0a3a2a30a1a2a10 b=defab(1.1.3)
外积得到的结果是向量,向量方向由右手定则确定,大小为 ∣ a ∣ ∣ b ∣ sin ⁡ ⟨ a , b ⟩ |a||b|\sin\langle a,b\rangle a∣∣bsina,b,几何意义以向量为临边的平行四边形的面积,物理意义是两个向量所在面的法向量。对于外积运算可知, a ∧ a^\wedge a 为反对称矩阵,反对称矩阵的秩为偶数。
外积的性质
a a a 为单位向量( ∥ a ∥ = 1 \|a\|=1 a=1)时
( a ∧ ) 2 = a a T − I ( a ∧ ) 3 = a ∧ ( a a T − I ) = − a ∧ ( a ∧ ) 4 = a ∧ ( − a ∧ ) = − ( a ∧ ) 2 (1.1.4) \begin{aligned}&(a^\wedge)^2=aa^T-I\\&(a^\wedge)^3=a^\wedge(aa^T-I)=-a^\wedge\\&(a^\wedge)^4=a^\wedge(-a^\wedge)=-(a^\wedge)^2\end{aligned}\tag{1.1.4} (a)2=aaTI(a)3=a(aaTI)=a(a)4=a(a)=(a)2(1.1.4)

混合积
标量三重积(Scalar triple product)
a ⋅ ( b × c ) = b ⋅ ( c × a ) = c ⋅ ( a × b ) a\cdot (b \times c) = b\cdot (c \times a) =c\cdot (a \times b) a(b×c)=b(c×a)=c(a×b)
几何意义为三个向量为临边的平行六面体的体积

( a ⋅ ( b × c ) ) a = ( a × b ) × ( a × c ) (a\cdot(b \times c)) a = (a\times b)\times (a\times c) (a(b×c))a=(a×b)×(a×c)

向量三重积
a × ( b × c ) = b ( a ⋅ c ) − c ( a ⋅ b ) a\times(b \times c)=b(a\cdot c)-c(a\cdot b) a×(b×c)=b(ac)c(ab)
( a × b ) × c = b ( a ⋅ c ) − a ( b ⋅ c ) (a\times b) \times c=b(a\cdot c)-a(b\cdot c) (a×b)×c=b(ac)a(bc)

记法:因为等号左边叉乘结果是向量,所以等号右边也是向量。只需记忆等号左边哪两个向量先叉乘和第三个向量的位置关系即可。如 b , c b,c b,c 先叉乘且 a a a 在其左边,则等号右边表明的向量关系为 b − c b-c bc,点乘是标量,向量顺序( a ⋅ c a\cdot c ac c ⋅ a c\cdot a ca一样)无所谓;再如 a , b a,b a,b 先叉乘且 c c c 在其右边,则等号右边表明的向量关系为 b − a b-a ba。等号右边再将其余向量补全。以第二个向量( b b b)为基准,第二个向量( b b b)减括号里的另一个向量。

a × ( b × c ) + b × ( c × a ) + c × ( a × b ) = 0 a\times (b\times c)+b\times (c\times a)+c\times (a\times b)=0 a×(b×c)+b×(c×a)+c×(a×b)=0


1.2 旋转矩阵

习惯上将向量写在变量右侧,即使用的是列向量而非行向量。
对于同一个向量 a a a,在不同基底下的坐标
a = [ e 1 , e 2 , e 3 ] [ a 1 a 2 a 3 ] = [ e 1 ′ , e 2 ′ , e 3 ′ ] [ a 1 ′ a 2 ′ a 3 ′ ] [ a 1 a 2 a 3 ] = [ 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 ′ ] [ a 1 ′ a 2 ′ a 3 ′ ] = d e f R a ′ (1.2.1) \begin{aligned}a=[e_1,e_2,e_3]\left[\begin{matrix}a_1 \\a_2\\a_3\end{matrix}\right]&=[e_1^\prime,e_2^\prime,e_3^\prime]\left[\begin{matrix}a_1^\prime \\a_2^\prime\\a_3^\prime\end{matrix}\right]\\ \left[\begin{matrix}a_1\\a_2\\a_3\end{matrix}\right]&=\left[\begin{matrix}e_1^Te_1^\prime &e_1^Te_2^\prime &e_1^Te_3^\prime \\e_2^Te_1^\prime &e_2^Te_2^\prime &e_2^Te_3^\prime \\e_3^Te_1^\prime &e_3^Te_2^\prime &e_3^Te_3^\prime\end{matrix}\right]\left[\begin{matrix} a_1^\prime \\a_2^\prime\\a_3^\prime\end{matrix}\right]\overset{def}{=}Ra^\prime\end{aligned}\tag{1.2.1} a=[e1,e2,e3] a1a2a3 a1a2a3 =[e1,e2,e3] a1a2a3 = e1Te1e2Te1e3Te1e1Te2e2Te2e3Te2e1Te3e2Te3e3Te3 a1a2a3 =defRa(1.2.1)
旋转矩阵 R R R (Rotation Matrix)描述了旋转本身(一个基通过旋转矩阵旋转到另一个基)。同时,矩阵各分量为两个基的内积,由于基为单位向量,所以实际上是各基向量夹角的余弦值,也成为方向余弦矩阵(Direction Cosine Matrix)。
n n n 维旋转矩阵的集合定义为:
S O ( n ) = { R ∈ R n × n ∣ R R T = I , d e t ( R ) = 1 } (1.2.2) SO(n)=\{R\in \mathbb{R}^{n\times n}|RR^T=I,det(R)=1\}\tag{1.2.2} SO(n)={RRn×nRRT=I,det(R)=1}(1.2.2)
S O ( n ) SO(n) SO(n)特殊正交群(Special Orthogonal Group)。 R R R 为正交矩阵,且行列式为 1 1 1(旋转矩阵的约束条件)。


1.3 变换矩阵

为了使旋转矩阵和平移向量为线性变换,引入了齐次坐标(Homogeneous Coordinate)和变换矩阵(Transform Matrix)。
数学技巧:在一个三维向量的末尾添加 1 1 1,将其变成四维向量,称为齐次坐标(为了满足矩阵的乘法),意义为向量乘以任意非零常数,仍表示为同一向量。 [ k x k y k z k ] ( = k [ x y z 1 ] ) ⇌ [ x y z 1 ] (1.3.1) \left[\begin{matrix}kx\\ky\\kz\\k\end{matrix}\right]\left(=k\left[\begin{matrix}x\\y\\z\\1\end{matrix}\right]\right)\rightleftharpoons \left[\begin{matrix}x\\y\\z\\1\end{matrix}\right]\tag{1.3.1} kxkykzk =k xyz1 xyz1 (1.3.1)非齐次坐标转换为齐次坐标之后,有
[ a ′ 1 ] = [ R t 0 T 1 ] [ a 1 ] = d e f T [ a 1 ] (1.3.2) \left[\begin{matrix}a^\prime\\1\end{matrix}\right]=\left[\begin{matrix}R&t\\0^T&1\end{matrix}\right]\left[\begin{matrix}a\\1\end{matrix}\right]\overset{def}{=}T\left[\begin{matrix}a\\1\end{matrix}\right]\tag{1.3.2} [a1]=[R0Tt1][a1]=defT[a1](1.3.2)
T T T 的集合定义为 S E ( 3 ) = { T = [ R t 0 T 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 } (1.3.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\}\tag{1.3.3} SE(3)={T=[R0Tt1]R4×4RSO(3),tR3}(1.3.3)
S E ( 3 ) SE(3) SE(3) 称为特殊欧氏群(Special Euclidean Group)。关于变换矩阵 T T T,具有特别的结构:左上角为旋转矩阵,右侧为平移向量,左下角为 0 0 0 向量,右下角为 1 1 1

求逆:
二维矩阵块,“主对调负变号,再除以行列式”。
T − 1 = 1 R [ 1 − t 0 T R ] = [ R − 1 − R − 1 t 0 T 1 ] = [ R T − R T t 0 T 1 ] T^{-1}=\frac{1}{R}\left[\begin{matrix}1&-t\\0^T&R\end{matrix}\right]=\left[\begin{matrix}R^{-1}&-R^{-1}t\\0^T&1\end{matrix}\right]=\left[\begin{matrix}R^T&-R^Tt\\0^T&1\end{matrix}\right] T1=R1[10TtR]=[R10TR1t1]=[RT0TRTt1]
− R − 1 -R^{-1} R1 左乘矩阵,不是右乘是为了使右上块维数对应)

若绕静坐标系(世界坐标系)旋转,则左乘矩阵,即变换矩阵 * 坐标矩阵;若绕动坐标系(自身坐标系)旋转,则右乘矩阵,即坐标矩阵 * 变换矩阵。实际上,对一个图像、点云进行旋转,则均是左乘矩阵实现。
左乘表示物体更改坐标系,改变的是世界坐标系;右乘表示物体旋转,改变的是本体的坐标系
T l r T_{lr} Tlr 理解为 r r r 帧的坐标转换到 l l l 帧的坐标的变换矩阵,也可以读作 l l l 帧坐标在 r r r 帧坐标系下的变换。


1.4 旋转向量

旋转矩阵 R R R (变换矩阵 T T T) 的缺点是 R R R T T T) 有9(16)个量,但旋转(变换)一次只有3(6)个自由度改变,且 R R R 本身自带约束条件 —— 引出旋转向量(Rotation Vector)。
事实上,任意旋转都可以用一个旋转轴和一个旋转角度来刻画。于是,使用一个向量:方向为与旋转轴 n n n (单位向量表示方向)一致,大小为旋转角 θ \theta θ(弧度制),这种向量称为旋转向量,也叫角轴或轴角(Axis Angle)。

旋转向量转换为旋转矩阵
由罗德里格斯公式(Rodrigues’s Formula)证得:
R = cos ⁡ θ I + ( 1 − cos ⁡ θ ) n n T + sin ⁡ θ n ∧ (1.4.1) R=\cos\theta I+(1-\cos\theta)nn^T+\sin\theta n^\wedge\tag{1.4.1} R=cosθI+(1cosθ)nnT+sinθn(1.4.1)旋转矩阵转换为旋转向量
对罗德里格斯公式两边取迹。 t r ( R ) = cos ⁡ θ   t r ( I ) + ( 1 − cos ⁡ θ ) t r ( n n T ) + sin ⁡ θ   t r ( n ∧ ) = 3 cos ⁡ θ + ( 1 − cos ⁡ θ ) t r ( n T n ) = 1 + 2 cos ⁡ θ (1.4.2) \begin{aligned}tr(R)&=\cos\theta~tr(I)+(1-\cos\theta)tr(nn^T)+\sin\theta~tr(n^\wedge)\\&=3\cos\theta+(1-\cos\theta)tr(n^Tn)\\&=1+2\cos\theta\end{aligned}\tag{1.4.2} tr(R)=cosθ tr(I)+(1cosθ)tr(nnT)+sinθ tr(n)=3cosθ+(1cosθ)tr(nTn)=1+2cosθ(1.4.2) θ = a r c cos ⁡ t r ( R ) − 1 2 (1.4.3) \theta=arc\cos\frac{tr(R)-1}{2}\tag{1.4.3} θ=arccos2tr(R)1(1.4.3)
关于转轴 n n n,旋转轴上的向量在旋转之后不改变 n = R n (1.4.4) n=Rn\tag{1.4.4} n=Rn(1.4.4)表示转轴 n n n 是矩阵 R R R 特征值为 1 1 1 对应的特征向量。


1.5 欧拉角

旋转矩阵、旋转向量对人类来说表达旋转很不直观。欧拉角用于人机交互。
万向锁使欧拉角具有奇异性。


1.6 四元数

旋转向量带有奇异性( θ \theta θ 角的周期性)。实际上,找不到不带奇异性的三维向量表述方式。
用复数集合 C \mathbb{C} C 表示复平面上的向量,而复数的乘法表示复平面上的旋转:乘上复数 i i i 相当于逆时针把一个复向量旋转 9 0 ∘ 90^\circ 90。类比于此,表示三维空间旋转的复数:四元数(Quaternion),是紧凑的、没有奇异性的代数。
一个四元数有一个实部和三个虚部。 q = q 0 + q 1 i + q 2 j + q 3 k q=q_0+q_1i+q_2j+q_3k q=q0+q1i+q2j+q3k也可以用一个标量和一个向量表示 q = [ s , v ] T , s = q 0 ∈ R , v = [ q 1 , q 2 , q 3 ] T ∈ R 3 q=[s,v]^T,s=q_0\in \mathbb{R},v=[q_1,q_2,q_3]^T\in \mathbb{R}^3 q=[s,v]Ts=q0Rv=[q1,q2,q3]TR3单位四元数表示三维空间任意旋转。

四元数的运算

有两个四元数 q a = s a + x a i + y a j + z a k = [ s a , v a ] T q_a=s_a+x_ai+y_aj+z_ak=[s_a,v_a]^T qa=sa+xai+yaj+zak=[sa,va]T q b = s b + x b i + y b j + z b k = [ s b , v b ] T q_b=s_b+x_bi+y_bj+z_bk=[s_b,v_b]^T qb=sb+xbi+ybj+zbk=[sb,vb]T

加减法
q a ± q b = [ s a ± s b , v a ± v b ] T q_a\pm q_b=[s_a\pm s_b,v_a\pm v_b]^T qa±qb=[sa±sb,va±vb]T
乘法
虚部单位相乘满足右手定则,便于记忆 i j k i j k ijkijk ijkijk 正向正号,反向负号 q a q b = s a s b − x a x b − y a y b − z a z b + ( s a x b + x a s b + y a z b − z a y b ) i + ( s a y b − x a z b + y a s b + z a x b ) j + ( s a z b + x a y b − y a x b + z a s b ) k \begin{aligned}q_aq_b&=s_as_b-x_ax_b-y_ay_b-z_az_b\\&+(s_ax_b+x_as_b+y_az_b-z_ay_b)i\\&+(s_ay_b-x_az_b+y_as_b+z_ax_b)j\\&+(s_az_b+x_ay_b-y_ax_b+z_as_b)k\\\end{aligned} qaqb=sasbxaxbyaybzazb+(saxb+xasb+yazbzayb)i+(saybxazb+yasb+zaxb)j+(sazb+xaybyaxb+zasb)k q a q b = [ s a s b − v a T v b , s a v b + s b v a + v a × v b ] T q_aq_b=[s_as_b-v_a^Tv_b,s_av_b+s_bv_a+v_a\times v_b]^T qaqb=[sasbvaTvb,savb+sbva+va×vb]T
因为忽略复数单位的情况下, i i i i i i相乘为 i × i = − 1 i\times i=-1 i×i=1可视为负点乘 i i i j j j相乘为 i × j = k i\times j=k i×j=k可视为叉乘。因此对于实部来说,是负的 v a T v b v^T_av_b vaTvb,虚部是正的。

模长 ∥ q a ∥ = s a 2 + x a 2 + y a 2 + z a 2 \|q_a\|=\sqrt{s_a^2+x_a^2+y_a^2+z_a^2} qa=sa2+xa2+ya2+za2 性质 ∥ q a q b ∥ = ∥ q a ∥ ∥ q b ∥ \|q_aq_b\|=\|q_a\|\|q_b\| qaqb=qa∥∥qb共轭 q a ∗ = s a − x a i − y a j − z a k = [ s a , − v a ] T q_a^*=s_a-x_ai-y_aj-z_ak=[s_a,-v_a]^T qa=saxaiyajzak=[sa,va]T共轭与本身相乘,得到实四元数,实部为模长的平方: q ∗ q = q q ∗ = [ s a 2 + v T v , 0 ] T q^*q=qq^*=[s_a^2+v^Tv,0]^T qq=qq=[sa2+vTv,0]T q − 1 = q ∗ / ∥ q ∥ 2 q^{-1}=q^*/\|q\|^2 q1=q/∥q2以此定义得 q q − 1 = q − 1 q = 1 qq^{-1}=q^{-1}q=1 qq1=q1q=1如果 q q q 为单位四元数,其逆和共轭就是同一个量。同时,乘积的逆具有和矩阵相似得性质: ( q a q b ) − 1 = q b − 1 q a − 1 . (q_aq_b)^{-1}=q_b^{-1}q_a^{-1}. (qaqb)1=qb1qa1.
四元数表示旋转
空间点 p = [ x , y , z ] ∈ R 3 p=[x,y,z]\in\mathbb{R}^3 p=[x,y,z]R3,旋转用单位四元数 q q q 表示。旋转步骤:首先将 p p p 转换为与四元数同一形式。由于四元数虚部为向量,故点 p p p 的四元数形式为(虚四元数) p = [ 0 , x , y , z ] T = [ 0 , v ] T p=[0,x,y,z]^T=[0,v]^T p=[0,x,y,z]T=[0,v]T旋转之后的点 p ′ p^\prime p 可表示为(类似于矩阵对角化) p ′ = q p q − 1 = q p q ∗ (1.6.1) p^\prime=qpq^{-1}=qpq^*\tag{1.6.1} p=qpq1=qpq(1.6.1)求得点 p ′ p^\prime p 为四元数(虚四元数)形式,最终三维坐标形式为 p ′ p^\prime p 的虚部1

四元数到其他旋转的转换
对于式子(1.6.1)来说,要将四元数表示的旋转转换为通常形式(左乘旋转矩阵) p ′ = X p p^\prime=Xp p=Xp 的形式,先引入如下定义:
q = [ s , v ] T q=[s,v]^T q=[s,v]T ,定义符号 + {}^+ + ⊕ {}^\oplus 为(分别是左右乘算子): q + = [ s − v T v s I + v ∧ ]        q ⊕ = [ s − v T v s I − v ∧ ] q^+=\left[\begin{matrix}s &-v^T\\v&sI+v^{\wedge}\end{matrix}\right]~~~~~~q^\oplus=\left[\begin{matrix}s&-v^T\\v&sI-v^\wedge\end{matrix}\right] q+=[svvTsI+v]      q=[svvTsIv]

故有 p 1 p_1 p1 p 2 p_2 p2 的乘积
p 1 + p 2 = p 2 ⊕ p 1      p 1 + p 2 ⊕ = p 2 ⊕ p 1 + p_1^+p_2=p_2^\oplus p_1 ~~~~p_1^+p_2^\oplus=p_2^\oplus p_1^+ p1+p2=p2p1    p1+p2=p2p1+
u   v   w u~v~ w u v w分别为四元数
( u + ) T = ( u + ) − 1 = ( u − 1 ) +      ( u ⊕ ) T = ( u ⊕ ) − 1 = ( u − 1 ) ⊕ ( u + v ) − 1 = v − 1 + u − 1      ( u ⊕ v ) − 1 = v − 1 ⊕ u − 1 ( u + v ) + w = u + ( v + w ) = u + v + w      ( u ⊕ v ) ⊕ w = u ⊕ ( v ⊕ w ) = u ⊕ v ⊕ w α u + + β v + = ( α u + β v ) +      α u ⊕ + β v ⊕ = ( α u + β v ) ⊕ \begin{aligned} (u^+)^T=(u^+)^{-1}=(u^{-1})^+ & ~~~~ (u^\oplus)^T=(u^\oplus)^{-1}=(u^{-1})^\oplus\\ (u^+v)^{-1}=v^{-1+}u^{-1} &~~~~ (u^\oplus v)^{-1}=v^{-1\oplus}u^{-1}\\ (u^+v)^+w=u^+(v^+w)=u^+v^+w &~~~~ (u^\oplus v)^\oplus w=u^\oplus (v^\oplus w)=u^\oplus v^\oplus w\\ \alpha u^+ +\beta v^+=(\alpha u +\beta v)^+ &~~~~ \alpha u^\oplus +\beta v^\oplus=(\alpha u +\beta v)^\oplus \end{aligned} (u+)T=(u+)1=(u1)+(u+v)1=v1+u1(u+v)+w=u+(v+w)=u+v+wαu++βv+=(αu+βv)+    (u)T=(u)1=(u1)    (uv)1=v1u1    (uv)w=u(vw)=uvw    αu+βv=(αu+βv)
其中 α \alpha α β \beta β 为标量。


p ′ = X p = q p q − 1 = q ( q − 1 ) ⊕ p = q + ( q − 1 ) ⊕ p (1.6.2) \begin{aligned} p^\prime&=Xp\\&=qpq^{-1}=q(q^{-1})^\oplus p\\&=q^+(q^{-1})^\oplus p \end{aligned}\tag{1.6.2} p=Xp=qpq1=q(q1)p=q+(q1)p(1.6.2)
(最后一步是因为倒数第二步 q q q 维数 2 × 1 2\times1 2×1,而 ( q − 1 ) ⊕ (q^{-1})^\oplus (q1) 维数为 2 × 2 2\times2 2×2 不满足矩阵乘法)
q + ( q − 1 ) ⊕ = [ 1 0 0 T v v T + s 2 I + 2 s v ∧ + ( v ∧ ) 2 ] q^+(q^{-1})^\oplus=\left[\begin{matrix}1&0\\0^T&vv^T+s^2I+2sv^\wedge+(v^\wedge)^2\end{matrix}\right] q+(q1)=[10T0vvT+s2I+2sv+(v)2] R = v v T + s 2 I + 2 s v ∧ + ( v ∧ ) 2 (1.6.3) R=vv^T+s^2I+2sv^\wedge+(v^\wedge)^2\tag{1.6.3} R=vvT+s2I+2sv+(v)2(1.6.3)因为 p ′ p^\prime p p p p 为虚四元数,有 p ′ = q + ( q − 1 ) ⊕ p [ 0 v ′ ] = [ 1 0 0 T R ] [ 0 v ] v ′ = R v (1.6.4) \begin{aligned}p^\prime&=q^+(q^{-1})^\oplus p\\\left[\begin{matrix}0\\v^\prime\end{matrix}\right]&=\left[\begin{matrix}1&0\\0^T&R\end{matrix}\right]\left[\begin{matrix}0\\v\end{matrix}\right]\\v^\prime&=Rv \end{aligned}\tag{1.6.4} p[0v]v=q+(q1)p=[10T0R][0v]=Rv(1.6.4)则,右下角的分块矩阵给出了四元数到旋转矩阵的关系。
对式子(1.6.3)求迹,得 t r ( R ) = t r ( v v T ) + 3 s 2 + t r ( ( v ∧ ) 2 ) = v 1 2 + v 2 2 + v 3 2 + 3 s 2 − 2 ( v 1 2 + v 2 2 + v 3 2 ) = 4 s 2 − 1 (1.6.5) \begin{aligned}tr(R)&=tr(vv^T)+3s^2+tr((v^\wedge)^2)\\&=v_1^2+v_2^2+v_3^2+3s^2-2(v_1^2+v_2^2+v_3^2)\\&=4s^2-1\end{aligned}\tag{1.6.5} tr(R)=tr(vvT)+3s2+tr((v)2)=v12+v22+v32+3s22(v12+v22+v32)=4s21(1.6.5) s s s (四元数)到 R R R (旋转矩阵)的关系)
四元数到旋转向量的关系为四元数到旋转矩阵加上旋转矩阵到旋转向量的关系,所以由式子(1.4.3)得 θ = a r c cos ⁡   t r ( R ) − 1 2 = a r c cos ⁡   ( 2 s 2 − 1 ) \begin{aligned}\theta&=arc\cos~\frac{tr(R)-1}{2}\\&=arc\cos~(2s^2-1)\end{aligned} θ=arccos 2tr(R)1=arccos (2s21)有二倍角公式 cos ⁡ 2 θ = 2 cos ⁡ 2 θ − 1 \cos2\theta=2\cos^2\theta-1 cos2θ=2cos2θ1
cos ⁡ θ = 2 s 2 − 1 = 2 cos ⁡ 2 θ 2 − 1 \cos\theta=2s^2-1=2\cos^2\frac{\theta}{2}-1 cosθ=2s21=2cos22θ1所以 θ = 2   a r c cos ⁡   s (1.6.6) \theta=2~arc\cos~s\tag{1.6.6} θ=2 arccos s(1.6.6)
s s s 为由单位四元数 q q q 的实部,由于旋转向量在旋转前后是不变的,所以旋转向量的方向可由 q q q 的虚部 v v v 表示 [ n x , n y , n z ] T = [ v 1 , v 2 , v 3 ] T / sin ⁡ θ 2 [n_x,n_y,n_z]^T=[v_1,v_2,v_3]^T/\sin\frac{\theta}{2} [nx,ny,nz]T=[v1,v2,v3]T/sin2θ
(因为 n n n 为单位向量 ,所以用单位四元数 q q q 的虚部表示时需要将虚部单位化,又由式子(1.6.6)可得 s = cos ⁡ θ 2 s=\cos\frac{\theta}{2} s=cos2θ,所以 v v v 的模长为 sin ⁡ θ 2 \sin\frac{\theta}{2} sin2θ
{ θ = 2   a r c cos ⁡ s [ n x , n y , n z ] T = [ v 1 , v 2 , v 3 ] T / sin ⁡ θ 2 (1.6.7) \begin{cases}\theta=2~arc\cos s\\ [n_x,n_y,n_z]^T=[v_1,v_2,v_3]^T/\sin\frac{\theta}{2}\end{cases}\tag{1.6.7} {θ=2 arccoss[nx,ny,nz]T=[v1,v2,v3]T/sin2θ(1.6.7)


A → \to B旋转矩阵(B)旋转向量(B)四元数(B)
旋转矩阵(A)N/A(1.4.3)(1.4.4)很繁琐
旋转向量(A)(1.4.1)N/A(1.6.7)
四元数(A)(1.6.3)(1.6.7)N/A

vslam
  1. 参考四元数和旋转(Quaternion & rotation) 3.4 ↩︎

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值