视觉SLAM-02 三维空间刚体运动

参考书籍: 视觉SLAM十四讲

点与向量

点A: A = [ a 1 , a 2 , a 3 ]   . A = [a_{1},a_{2},a_{3}]\,. A=[a1,a2,a3].

相关运算

a ⋅ b = a T b = ∑ i = 1 3 a i b i = ∣ a ∣ ∣ b ∣ cos ⁡ < a , b > a\cdot b = a^{T}b = \sum_{i=1}^{3} a_ib_i=|a||b| \cos <a,b> ab=aTb=i=13aibi=abcos<a,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 = a ^ b a×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 = \widehat{a} b a×b=e1a1b1e2a2b2e3a3b3=a2b3a3b2a3b1a1b3a1b2a2b1==0a3a2a30a1a2a10b=a b
其中我们定义
a ^ = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] \widehat{a}=\begin{bmatrix} 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \end{bmatrix} a =0a3a2a30a1a2a10

变换矩阵 (transform matrix)

T = [ R t 0 T 1 ] T = \begin{bmatrix} R & t \\ 0^T & 1 \end{bmatrix} T=[R0Tt1]
其中

  1. T是变换矩阵,属于特殊欧式群(Special Euclidean Group) SE(3)
    S E ( 3 ) = { T = [ R t 0 T 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 } SE(3)= \begin{Bmatrix} T= \begin{bmatrix} R & t \\ 0^T & 1 \end{bmatrix}\isin \R^{4×4}| R \isin SO(3), t\isin\R^3 \end{Bmatrix} SE(3)={T=[R0Tt1]R4×4RSO(3),tR3}
  2. R是旋转矩阵,属于特殊正交群(Special Orthogonal )SO(n)
    S O ( n ) = { R ∈ R n × n ∣ R R T = I , d e t ( R ) = 1 } SO(n) = \begin{Bmatrix} R\isin \R^{n×n}|RR^T=I,det(R)=1 \end{Bmatrix} SO(n)={RRn×nRRT=I,det(R)=1} R ∈ S O ( 3 ) R \isin SO(3) RSO(3)
  3. t是平移向量

齐次坐标

  • 与变换矩阵相对应的就是齐次坐标
    简单理解就是 T ∈ R 4 T\isin \R^{4} TR4 不能与 A = [ a 1 , a 2 , a 3 ]   A = [a_{1},a_{2},a_{3}]\, A=[a1,a2,a3]直接相乘
    所以我们需要引入齐次坐标 A ~ = [ a 1 , a 2 , a 3 , 1 ]   \widetilde{A}=[a_{1},a_{2},a_{3},1]\, A =[a1,a2,a3,1]
    这样就可以进行矩阵运算了
    矩阵计算后得到的齐次坐标的第四个参数应该一直为1

矩阵表示的缺点:

  1. R ∈ R 3 × 3 R\isin \R^{3×3} RR3×3包含9个元素,但对于一次旋转只有三个自由度,所以旋转矩阵是冗余表达方式,同理,变换矩阵 T ∈ R 4 × 4 T\isin \R^{4×4} TR4×4用16个元素表示六个自由度的变换,也是冗余的。
  2. 旋转矩阵 R ∈ S O ( 3 ) R\isin SO(3) RSO(3)自身是一个正交矩阵,且 d e t ( R ) = 1 det(R)=1 det(R)=1,所以在计算中,这个约束会使得求解变得困难
    综上我们需要找到一个紧凑得方式描述旋转和平移。

旋转向量

我们知道旋转具有3自由度,变换具有6个自由度。所以很容易的想到用一个三维向量描述旋转,六维向量描述变换。

旋转是由旋转轴和旋转角描述的。
所以旋转向量

  1. 方向等于旋转轴
  2. 长度等于旋转角

考虑一个向量 n n n,方向为旋转轴,长度为单位向量,旋转角为 θ \theta θ,那么向量 θ n \theta n θn 就可以描述这个旋转,
那么旋转矩阵和其关系为:
R = cos ⁡ θ I + ( 1 − cos ⁡ θ ) n n T + sin ⁡ θ n ^ R = \cos \theta \Iota + (1 - \cos \theta)nn^T + \sin \theta \widehat{n} R=cosθI+(1cosθ)nnT+sinθn
n ^ \widehat{n} n 应该写为n^不过latex有点小问题。
^是向量到反对称矩阵的转换符。
对上式两端取trace
我们可以得到
θ = arccos ⁡ ( t r ( R ) − 1 ) 2 \theta =\frac{\arccos (tr(R)-1)}{2} θ=2arccos(tr(R)1)

关于转轴 n n n,旋转操作并不会改变旋转轴:
R n = n Rn=n Rn=n

欧拉角

使用三个分离的转角,把一个旋转分解成3次绕不同轴的旋转

偏航-俯仰-滚转(yaw-pitch-roll)表示方法

  1. 绕物体的Z轴旋转,得到偏航角 yaw
  2. 绕旋转之后的Y轴旋转,得到俯仰角pitch
  3. 绕旋转之后的X轴旋转,得到滚转角roll

[ r , p , y ] T [r,p,y]^T [r,p,y]T 这样一个三维向量就可以描述任意旋转,十分直观易于理解

万向锁问题(Gimbal lock)

在俯仰角为 ± 9 0 ∘ \pm90^\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

  1. 紧凑且无奇异性
  2. 不够直观,运算复杂

i , j , k i,j,k i,j,k作为四元数的三个虚部,满足:
{ 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 \begin{cases} i^2 = j^2 = k^2 = -1 \\ ij=k, ji = -k \\ jk=i, kj = -i \\ ki=j,ik=-j \end{cases} i2=j2=k2=1ij=k,ji=kjk=i,kj=iki=j,ik=j
所以我们也可以用一个标量和一个向量来表达四元数:
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 \isin \R, v= [q_1,q_2,q_3]^T \isin \R^3 q=[s,v]T,s=q0R,v=[q1,q2,q3]TR3

四元数的运算

1. 加减法

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

2. 乘法

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 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 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×v_b]^T qaqb=[sasbvaTvb,savb+sbva+va×vb]T
NOTE:由于 v a × v b v_a×v_b va×vb的存在,所以乘法不可交换,除非 v a , v b ∈ R 3 v_a,v_b \isin \R^3 va,vbR3共线即 v a × v b = 0 v_a×v_b=0 va×vb=0

3.模长

∥ q a ∥ = s a 2 + x a 2 + y a 2 + z a 2 \lVert q_a\rVert=\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 ∥ \lVert q_aq_b \rVert =\lVert q_a\rVert \lVert q_b\rVert qaqb=qaqb

4.共轭

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

5.逆

q − 1 = q ∗ / ∥ q ∥ 2 q^{-1} = q^*/ \lVert q \rVert ^2 q1=q/q2
( q a q b ) − 1 = q b − 1 q a − 1 (q_aq_b)^{-1}=q_b^{-1}q_a^{-1} (qaqb)1=qb1qa1

6.数乘

k q = [ k s , k v ] T kq=[ks,kv]^T kq=[ks,kv]T

四元数表示旋转

点A: a = [ x , y , z ] ∈ R 3 a=[x,y,z] \isin \R^3 a=[x,y,z]R3
转换为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 ′ = q p q − 1 p'=qpq^{-1} p=qpq1
p ′ p' p的虚部就是旋转后的 A ’ A’ A,可以发现,这样计算出的结果,实部为0

四元数与其他表示之间的转换

q + = [ s − v T v s I + v ^ ] , q ⨁ = [ s − v T v s I − v ^ ] q^{+} =\begin{bmatrix} s & -v^T \\ v & sI+ \widehat{v} \end{bmatrix}, q^{\bigoplus}=\begin{bmatrix} s & -v^T \\ v & sI- \widehat{v} \end{bmatrix} q+=[svvTsI+v ],q=[svvTsIv ]
q + , q ⨁ ∈ R 4 × 4 q^{+},q^{\bigoplus} \isin \R^{4×4} q+,qR4×4
∴ q 1 q 2 = q 1 + q 2 = q 2 ⨁ q 1 \therefore q_1q_2=q_1^+q2=q_2^{\bigoplus}q_1 q1q2=q1+q2=q2q1
p ′ = q p q − 1 = q + p + q − 1 = q + q − 1 ⨁ p p'=qpq^{-1}=q^+p^+q^{-1}=q^+q^{-1\bigoplus}p p=qpq1=q+p+q1=q+q1p

其他变换

变换名称矩阵形式自由度不变性质
欧式变换 [ R t 0 T 1 ] \begin{bmatrix} R &t \\ 0^T &1 \end{bmatrix} [R0Tt1]6长度、夹角、体积
相似变换 [ s R t 0 T 1 ] \begin{bmatrix} sR &t \\ 0^T &1 \end{bmatrix} [sR0Tt1]7体积比
仿射变换 [ A t 0 T 1 ] \begin{bmatrix} A &t \\ 0^T &1 \end{bmatrix} [A0Tt1]12平行性、体积比
射影变换 [ A t a T v ] \begin{bmatrix} A &t \\ a^T & v \end{bmatrix} [AaTtv]15接触平面的相交和相切
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值