视觉SLAM14讲第三章学习笔记

刚体运动

一个物体,运动过后除位置与姿态外的自身条件不会变,变换后与变换前相差一个旋转和平移。

旋转矩阵

向量的内积: a ⋅ b = a T b = ∑ 1 3 a i b i = ∣ a ∣ ∣ b ∣ c o s ⟨ a , b ⟩ {a} \cdot b=a^Tb=\sum_{1}^{3} a_ib_i=|a||b|cos\langle a,b \rangle ab=aTb=13aibi=abcosa,b
内积可以描述向量间的投影。

向量的外积: 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 3 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 a\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_2b_3-a_3b_2\\a_3b_1-a_1b_3\\a_1b_2-a_2b_1\end{bmatrix}=\begin{bmatrix}0& -a_3 &a_2 \\a_3&0 &-a_1 \\-a_2&a_1 &0\end{bmatrix}b \overset{def}{=}a^\wedge b a×b=e1a1b1e2a2b2e3a3b3=a2b3a3b2a3b1a1b3a1b2a2b1=0a3a2a30a1a2a10b=defab

外积描述实际上就是 ∣ a ∣ ∣ b ∣ s i n ⟨ a , b ⟩ |a||b|sin\lang a,b \rang absina,b,是两个向量张开的四边形的面积。
a ∧ a^\wedge a表示 a a a反对称矩阵
a ∧ = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] a^\wedge=\begin{bmatrix}0& -a_3 &a_2 \\a_3&0 &-a_1 \\-a_2&a_1 &0\end{bmatrix} a=0a3a2a30a1a2a10

任意向量 a a a都有唯一一个反对称矩阵,且 a ∧ + a ∧ T = 0 a^\wedge+a^{\wedge T}=0 a+aT=0

设有一单位正交基 ( e 1 , e 2 , e 3 ) (e_1,e_2,e_3) (e1,e2,e3)内有一向量坐标为 [ a 1 , a 2 , a 3 ] T [a_1,a_2,a_3]^T [a1,a2,a3]T
另一单位正交基下 ( e 1 ′ , e 2 ′ , e 3 ′ ) (e_1{'},e_2{'},e_3') (e1,e2,e3)下,该向量坐标为 [ a 1 ′ , a 2 ′ , a 3 ′ ] T [a_1',a_2',a_3']^T [a1,a2,a3]T

由于向量还是那一个,只是在不同坐标系下的表示不一样,所以有
[ e 1 e 2 e 3 ] [ a 1 a 2 a 3 ] = [ e 1 ′ e 2 ′ e 3 ′ ] [ a 1 ′ a 2 ′ a 3 ′ ] \begin{bmatrix} e_1&e_2 &e_3\end{bmatrix}\begin{bmatrix}a_1 \\a_2\\a_3\end{bmatrix}=\begin{bmatrix} e_1'&e_2' &e_3'\end{bmatrix}\begin{bmatrix}a_1 '\\a_2'\\a_3'\end{bmatrix} [e1e2e3]a1a2a3=[e1e2e3]a1a2a3

两边同时左乘 [ e 1 T e 2 T e 3 T ] \begin{bmatrix}e_1 ^T\\e_2^T\\e_3^T\end{bmatrix} e1Te2Te3T,左侧变为单位矩阵
[ 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 ′ \begin{bmatrix}a_1 \\a_2\\a_3\end{bmatrix}=\begin{bmatrix}e_1 ^Te_1'&e_1^Te_2'&e_1^Te_3'\\e_2^Te_1'&e_2^Te_2'&e_2^Te_3'\\e_3^Te_1'&e_3^Te_2'&e_3^Te_3'\end{bmatrix}\begin{bmatrix}a_1 '\\a_2'\\a_3'\end{bmatrix}\overset{def}{=}Ra' a1a2a3=e1Te1e2Te1e3Te1e1Te2e2Te2e3Te2e1Te3e2Te3e3Te3a1a2a3=defRa

其中 R R R称为旋转矩阵,可以看出 R R R是两组基之间的内积

旋转矩阵性质

  • 正交阵 R R T = I RR^T=I RRT=I R T = R − 1 R^T=R^{-1} RT=R1
  • 行列式为1,反之行列式为1的正交阵叫旋转矩阵
  • R R R 为从 A A A 坐标系到 B B B坐标系的旋转矩阵,则 R − 1 R^{-1} R1 表示从 B B B 坐标系到 A A A 坐标系的旋转矩阵。

变换矩阵

欧式变换中,除了旋转还有平移,表示为:
a 1 = R 12 a 2 + t 12 a_1=R_{12}a_2+t_{12} a1=R12a2+t12
其中 R 12 R_{12} R12 表示从2到1坐标系的旋转矩阵, t 12 t_{12} t12 所对应的是坐标系1原点指向坐标系2原点的向量并且是在坐标系1下取的坐标

反过来 R 21 R_{21} R21 表示从1到2坐标系的旋转矩阵, t 21 t_{21} t21 对应的是坐标系2原点指向坐标系1原点的向量并且是在坐标系2下取的坐标

b = R 1 a + t 1 c = R 2 b + t 2 b=R_1a+t_1\\ c=R_2b+t_2 b=R1a+t1c=R2b+t2
所以a到c可以写成
c = R 2 ( R 1 a + t 1 ) + t 2 c=R_2(R_1a+t_1)+t_2 c=R2(R1a+t1)+t2

该写法若是跨越多个坐标系进行变换写法会很麻烦,所以对 a ′ = R a + t a'=Ra+t a=Ra+t 改写为
[ a ′ 1 ] = [ R t 0 T 1 ] [ a 1 ] = d e f T [ a 1 ] \begin{bmatrix}a' \\1\end{bmatrix}=\begin{bmatrix}R&t\\0^T&1\end{bmatrix}\begin{bmatrix}a\\1\end{bmatrix}\overset{def}{=}T\begin{bmatrix}a \\1\end{bmatrix} [a1]=[R0Tt1][a1]=defT[a1]
a ~ \tilde{a} a~表示 a a a的齐次坐标,则
b ~ = T 1 a ~ , c ~ = T 2 b ~ c ~ = T 2 T 1 a ~ \tilde{b}=T_1\tilde{a},\tilde{c}=T_2\tilde{b}\\\tilde{c}=T_2T_1\tilde{a} b~=T1a~,c~=T2b~c~=T2T1a~

一个变换矩阵左上为旋转矩阵,右上为平移向量,左下为0向量,右下为1;它的逆表示一个相反的变换。
T = [ R t 0 T 1 ] T − 1 = [ R T − R T t 0 T 1 ] T=\begin{bmatrix}R&t \\0^T&1\end{bmatrix}\\T^{-1}=\begin{bmatrix}R^T&-R^Tt \\0^T&1\end{bmatrix} T=[R0Tt1]T1=[RT0TRTt1]

旋转向量

任意旋转都可用一个旋转轴和一个旋转角来表示,令一个向量方向等于旋转轴,长度等于旋转角,这种向量称为旋转向量。

已知一个旋转的旋转轴向量 n n n和角度 θ \theta θ,可以通过罗德里格斯公式表换到旋转矩阵。
R = cos ⁡ θ I + ( 1 − cos ⁡ θ ) n n T + sin ⁡ θ t r ( n ∧ ) R=\cos\theta I+(1-\cos \theta)nn^T+\sin \theta tr(n^\wedge) R=cosθI+(1cosθ)nnT+sinθtr(n)

反过来,已知旋转矩阵求旋转角和轴
θ = arccos ⁡ t r ( R ) − 1 2 \theta =\arccos \frac{tr(R)-1}{2} θ=arccos2tr(R)1
因为有 R n = n Rn=n Rn=n,表示旋转轴上的向量绕轴旋转后不变,则转轴 n n n是矩阵 R R R特征值1所对应的特征向量归一化后的结果。

欧拉角

任何的旋转都可分解成分别绕三个轴旋转后的结果,定义“偏航-俯仰-滚转(yaw-pitch-roll)”分别对应 Z Y X ZYX ZYX轴的旋转。

Z Z Z轴旋转,得到偏航角yaw
旋转之后 Y Y Y轴旋转,得到俯仰角pitch
旋转之后 X X X轴旋转,得到滚转角roll

可以用 [ r , p , y ] T [r,p,y]^T [r,p,y]T三为向量描述任意旋转;当俯仰角为 ± 90 ° \pm90° ±90°时会丢失一个自由度——万向锁问题。

二维用的多,因为比较直观,三维的话用的不多,但是可以转换成欧拉角拍错用。

四元数

用三个量表示一个三维旋转注定会有奇异性问题,类似于万向锁。引入四元数,即可以比旋转矩阵紧凑,又可消除奇异性,就是比较抽象,运算复杂。
一个四元数长这样:
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 q=[s,v]^T q=[s,v]T; s s s是实部, v v v是虚部
前头是实部,后面跟着三个虚部
三个轴之间满足:
{ i 2 = j 2 = k 2 = − 1 i j = k , j i = − k j k = i , k j = − i k i = j , i k = − 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
图长这样

如何表示旋转

空间内有一点 p p p 和一个由单位四元数 q q q 指定的旋转, p p p 经过 q q q 的旋转变成 p ′ p' p

  1. 将三维空间点用一个虚四元数表示,其中虚部就是 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
  2. 将四元数三个虚部与空间中的三个轴对应
  3. 旋转后的结果可表示为:
    p ′ = q p q − 1 p'=qpq^{-1} p=qpq1
  4. p ′ p' p 的虚部取出,得到旋转后的坐标
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值