三维数学表达
点与坐标
点
点的表示
- 二维:p(x,y)
- 三维:p(x,y,z)
坐标系(参考系)
- 笛卡尔坐标系,三轴:x,y,z。向量的变换可以分为:平移、旋转、放缩
向量
向量表示
- 向量vector表示:a=(x,y)T(e1,e2)
向量运算
- 加减:a+b=(ax+bx,ay+by)
- 内积:a⋅b=aTb=∑i=13aibi=∣a∣∣b∣cos(a,b)
- 外积:a×b=⎣⎡ia1b1ja2b2ka3b3⎦⎤=⎣⎡0a3−a2−a30a1a2−a10⎦⎤b:=a∧b
向量旋转
- 内积(点乘):a⋅b表征了向量的投影
- a⋅b=aTb=∑i=13aibi=∣a∣∣b∣cos(a,b)
- 外积(叉乘):a×b表征了向量的旋转,a到b的旋转,可以使用右手定则,用w来描述。长度为:∣a∣∣b∣sin(a,b)
- a×b=⎣⎡ia1b1ja2b2ka3b3⎦⎤=⎣⎡a2b3−a3b2a3b1−a1b3a1b2−a2b1⎦⎤=⎣⎡0a3−a2−a30a1a2−a10⎦⎤b:=a∧b
- 其中:a∧是一个反对称矩阵,有很多特性
- AT=−A
- a∧b=−b∧a
刚体运动
- 刚体:几何不变的物体
- 刚体运动:三维空间中,刚体做平移T、旋转R的运动
向量旋转和平移
旋转
旋转向量的推导
-
坐标系(e1,e2,e3)中,P的坐标为(a1,a2,a3),P的向量可以表示做:[e1,e2,e3]⎣⎡a1a2a3⎦⎤
-
坐标系(e1,e2,e3)中,同样的P坐标为(a1′,a2′,a3′),P的向量可以表示做:[e1′,e2′,e3′]⎣⎡a1′a2′a3′⎦⎤
-
由于都是表示同一个点P,可以建立下面的等式:
- [e1,e2,e3]⎣⎡a1a2a3⎦⎤=[e1′,e2′,e3′]⎣⎡a1′a2′a3′⎦⎤
-
等式两边同左乘⎣⎡e1Te2Te3T⎦⎤,由于e有性质:
- e1T⋅e1=1
- e1T⋅e2=0
- ⎣⎡e1Te2Te3T⎦⎤[e1,e2,e3]=I
-
可以得到点P在e’坐标系下通过旋转矩阵R,变换到e坐标系的表示:
- ⎣⎡a1a2a3⎦⎤=⎣⎡e1Te1′e2Te1′e3Te1′e1Te2′e2Te2′e3Te2′e1Te3′e2Te3′e3Te3′⎦⎤⎣⎡a1′a2′a3′⎦⎤:=Ra′
-
R即旋转矩阵,必要条件:行列式为1的正交矩阵
-
R的正交性质:1、RRT=I,R−1=RT;2、det(R)=1
特殊正交群SO(n)
- SO(n)是Special Orthogonal Group,特殊正交群R
- SO(n)=[R∈Rn×n∣RRT=I,det(R)=1]
- 一般情况下n=3
旋转矩阵
- 旋转矩阵可以描述相机的运动,因为是正交阵,它的逆即转置,描述了一个相反的旋转
- a′=R−1a=RTa
- 于是,1和2相互旋转的关系为
- a1=R12a2
- a2=R21a1
- 矩阵关系:R21=R12−1=R12T
- R12T就表示一个相反方向的旋转
二维
- 在二维空间中,旋转可以用一个单一的角 定义。作为约定,正角表示逆时针旋转。把笛卡尔坐标的列向量关于原点逆时针旋转的矩阵是:
- M(θ)=[cosθsinθ−sinθcosθ]=cosθ[1001]+sinθ[01−10]=exp(θ[01−10])
三维
- 在三维空间中,旋转矩阵有一个等于单位1的实特征值。旋转矩阵指定关于对应的特征向量的旋转(欧拉旋转定理)。如果旋转角是 θ,则旋转矩阵的另外两个(复数)特征值是 exp(iθ) 和 exp(-iθ)。从而得出 3 维旋转的迹数等于 1 + 2 cos(θ),这可用来快速的计算任何 3 维旋转的旋转角。
- 3 维旋转矩阵的生成元是三维斜对称矩阵。因为只需要三个实数来指定 3 维斜对称矩阵,得出只用三个是实数就可以指定一个 3 维旋转矩阵。
绕x-轴的主动旋转
- Rx(θx)=⎣⎡1000cosθxsinθx0sinθxcosθx⎦⎤=exp(θ⎣⎡00000θx0θx0⎦⎤)
绕y-轴的主动旋转
- Ry(θy)=⎣⎡cosθy0−sinθy010sinθy0cosθy⎦⎤=exp(θ⎣⎡00−θy000θy00⎦⎤)
绕z-轴的主动旋转
- Rz(θz)=⎣⎡cosθzsinθz0−sinθzcosθz0001⎦⎤=exp(θ⎣⎡0θz0−θz00000⎦⎤)
平移
- 向量a经过旋转和平移后,得到完全描述的a’
- a′=Ra+t
欧拉定理(Euler’s rotation theorem):刚体在三维空间里的一般运动,可分解为刚体上方某一点的平移,以及绕经过此点的旋转轴的转动
齐次变换
-
多次进行空间变换时:
- b=R1a+t1
- c=R2b+t2=R2(R1a+t1)+t2
- …
-
当空间变换叠加次数很多时,那么计算会变得非常复杂。构造齐次坐标,将空间变换转为线性关系,就可以对增广矩阵进行叠加操作了
-
[a′1]=[R0Tt1][a1]:=T[a1]
-
定义T为变换矩阵(Transform Matrix),a=[a1],为了简便,使用a代替a
-
变换矩阵T是在旋转矩阵R的基础上,做了齐次变换,放入了平移。
性质
特殊欧式群SE(n)
- SE(n)是Special Euclidean Group,特殊欧式群
- SE(3)=[T=[R0Tt1]∈R4×4∣R∈SO(3),t∈R3]
SO(3)和SE(3)
-
SO(3)和SE(3)对加法不封闭(行列式为1的正交矩阵):R1+R2∈/SO(3),T1+T2∈/SE(3)
-
SO(3)和SE(3)对乘法封闭:R1R2∈SO(3),T1T2∈SE(3)
-
由于对SO(3)加法不封闭,那么求解最优值时,导数中R+△R∈/SO(3),这样无法叠加
旋转向量和欧拉角
- 前面用旋转矩阵表示3自由度的刚体旋转,3x3的矩阵包含9个变量,表示一个曲面,具有冗余的信息。
旋转向量
- 称为角轴/轴角(Angle Axis)或者旋转向量(Rotation Vector)
- 仅使用:方向(旋转轴)θ和长度(转过的角度)n表示的旋转向量
- 使用旋转向量θn更为简洁,但是具有歧义性,会有万向锁的问题。
罗德里格斯公式
- 罗德里格斯公式描(Rodrigues’s Formula)述了旋转向量到旋转矩阵的转换关系,通过罗德里格斯公式可以通过旋转向量θn,得到旋转矩阵R
- 假设一个旋转轴为n,角度为θ的旋转。旋转向量为θn,求R:
- R=cosθI+(1−cosθ)nnT+sinθn∧
- 罗德里格斯公式实际上是一个李代数,罗德里格斯的证明
- 证明
旋转矩阵求解旋转向量
- 通过旋转矩阵求旋转向量
- tr(R)=cosθtr(I)+(1−cosθ)tr(nnT)+sinθtr(n∧)=1+2cosθ
- 角度:θ=arccos(2tr(R)−1)
- 轴:Rn=n,轴在旋转时是不动的,通过求取λ=1的特征向量,就可以得到旋转轴n
欧拉角




万向锁
- 旋转向量仅有三个实数表达旋转,不可避免的具有奇异性,是由于θ大于2π,相当于没有旋转,解决方法就是定义θ的范围
- 而欧拉角的奇异性问题,在特定值时,旋转自由度减1,和旋转顺序、角度有关,不太容易避免。欧拉角不适合插值或者迭代,通常用于人机交互中,比较直观

四元数
- 2维情况下,可以用单位复数表达旋转:
- z=x+iy=ρeiθ
- 极坐标表示,模长乘极坐标的角度
- 乘i即旋转90°,乘-i旋转-90°
- zi=ρeiθi=ρei(θ+2π)
- 四元数是一种三维情况下,扩充的复数表示旋转
- 四元数用四个实数表示旋转,既节省空间,同时避免了奇异性的问题
定义
- 四元数(Quaternion)q,拥有一个实部和三个虚部
- q=q0+q1i+q2j+q3k
- 可以用一个标量和一个向量表达四元数:q=[s,v],s=q0∈R,v=[q1,q2,q3]T∈R3
虚部
- i2=j2=k2=−1
- ij=k,ji=−k
- jk=i,kj=−i
- ki=j,ik=−j
运算
- qa=[sa,va],qb=[sb,vb]
- 加减法:
- qa±qb=[sa±sb,va±vb]
- 乘法:
- qaqb=sasb−xaxb−yayb−zazb+(saxb+xasb+yazb−zayb)i+(sayb−xazb+yasb+zaxb)j+(sazb+xayb−yaxa+zasb)k
- =[sasb−vaTvb,savb+sbva+va×vb]
- ijk是有方向的,所以四元数乘法是不符合交换律的
- 共轭:
- qa∗=sa−xai−yaj−zak=[sa,−va]
- 与共轭相乘:
- qaqa∗=qa∗qa=[sa2,vaTva]
- 模长:
- ∣∣qa∣∣=sa2+xa2+ya2+za2
- ∣∣qaqb∣∣=∣∣qbqa∣∣
- 逆运算:
- q−1=∣∣q∣∣2q∗
- qq−1=q−1q=1
- (qaqb)−1=qb−1qa−1
- 点积:
- qa⋅qb=sasb+xaxbi+yaybj+zazbk
四元数对空间点旋转
- 三维点的旋转可以表示为p′=Rp
- 四元数p进行一次以四元数q表示的三维旋转,得到p’的表示:
- 首先p的坐标用四元数表示(虚四元数):p=[0,x,y,z]=[0,v]
- 旋转的表示:q=[cos2θ,nsin2θ]T
- 经过旋转后的关系为:p′=qpq−1=[0,x′,y′,z′]=[0,v′]
四元数和欧拉角
旋转和四元数
![/images/pasted-381.png]
-
角轴到四元数
- 三维空间的单位向量n=[nx,ny,nz]T,某个旋转是绕单位向量n进行了角度为θ的旋转,则该旋转四元数的表达形式为:
- q=[cos2θ,ωsin2θ]T
- q=[cos2θ,nxsin2θ,nysin2θ,nzsin2θ]T=[cos2θ,nsin2θ]T
-
已知四元数q,反推夹角和旋转轴
- θ=2arccosq0
- [nx,ny,nz]T=sin2θ[q1,q2,q3]T
旋转矩阵和四元数
-
假设:q=q0+q1i+q2j+q3k,R=[mij],i,j∈[0,1,2]
-
四元数到旋转矩阵
- R=⎣⎡1−2q22−2q322q1q2−2q0q32q1q3+2q0q22q1q2+2q0q31−2q12−2q322q2q3−2q0q12q1q3−2q0q22q2q3+2q0q11−2q122−2q22⎦⎤
-
旋转矩阵到四元数
- q0=2tr(R)+1,q1=4q0m23−m32,q2=4q0m31−m13,q3=4q0m12−m21
-
四元数通过旋转矩阵表示比较复杂,在实际应用中,q0比较小时其他三项会比较大,造成计算的不稳定
李群和李代数
- 由于SO和SE对加法不封闭,而求导操作需要加法运算,引入李代数的目的就是为了旋转矩阵的求导
- 李代数求导可以直接推出公式,但是要计算雅克比矩阵,另一种方式是左乘扰动模型,进行求解。
群
- 前面遇到了SO(3)和SE(3),都属于群。
- SO(3)=[R∈R3×3∣RRT=I,det(R)=1]
- SE(3)=[T=[R0Tt1]∈R4×4∣R∈SO(3),t∈R3]
定义
- 群(G)是一种代数结构:集合(A)+运算(·),即:G=(A,·)
群的特点
- 封闭性:
- ∀a1,a2∈A,a1⋅a2∈A
- 结合律:
- ∀a1,a2,a3∈A,(a1⋅a2)⋅a3=a1⋅(a2⋅a3)
- 幺元(单位元):
- ∃a0∈A,s.t.∀a∈A,a0⋅a=a⋅a0=a
- 逆:
- ∀a∈A,∃a−1∈A,s.t.a⋅a−1=a0
群的种类
-
一般线性群GL(n):指n×n的可逆矩阵,它们对矩阵乘法成群
-
特殊正交群SO(n):旋转矩阵和矩阵乘法,构成群,幺元是单位阵
-
特殊欧式群SE(n):变换矩阵和矩阵乘法,构成群
-
SO(n)和SE(n)加法不满足封闭性,旋转矩阵相加不满足约束,结构没有意义。
李群
- 李群(Lie Group)的特性
- 具有连续(光滑)性质的群
- 李群既是群,也是流形(光滑运动)
- SO(3)和SE(3)只有定义良好的乘法,没有加法,所以难以进行极限求导操作。
- SO(n):光滑的旋转,SE(n):光滑的旋转和移动
李群到李代数
-
SO(3)和SE(3)在李群无法求导,原因是无法做加法,在曲空间做加法可能会掉到曲空间外面。而在切空间满足加法,可以利用李代数求得切空间,再映射到李群中去。
-
例如,一个特殊正交群,满足:SO(3)=[R∈R3×3∣RRT=I,det(R)=1],其中R是相机的旋转,随时间t连续变化,可以描述为时间的函数:R(t)
-
R(t)R(t)T=I,连续运动就可以两边对t求导:
- R˙(t)RT(t)+R(t)R˙T(t)=0
- R˙(t)RT(t)=−(R˙(t)RT(t))T,其中R˙(t)RT(t)是反对称矩阵,设为A
- AT=−A,A=R˙(t)RT(t)
- A是反对称矩阵,反对称矩阵的形式:A=⎣⎡0a3−a2−a30a1a2−a10⎦⎤
- 设一个向量a表示为:a=[a1,a2,a3]T
- 向量a可转为反对称矩阵A:a∧=A,同样矩阵A也可转为向量aA∨=a
-
设ϕ(t)∈R3为三维向量,ϕ(t)∧为对应的反对称矩阵
-
则:R˙(t)RT(t)=ϕ(t)∧
-
两边同乘R(t),因为R为正交阵,可得
- R˙(t)RT(t)R(t)=R˙(t)
- =ϕ(t)∧R(t)=⎣⎡0ϕ3−ϕ2−ϕ30ϕ1ϕ2−ϕ10⎦⎤R(t)
- 此时,可以得到R˙(t)导数形式了,而没有用到加法运算,而是乘了一个矩阵
-
考虑在单位元附近,令t0=0,且R(0)=I,将R(0)在t0处一阶泰勒展开:
- R(t)≈R(t0)+R˙(t+0)(t−t0)=I+ϕ(t0)∧t
- ϕ反映了一阶导数的性质,正切空间(tangent space)上,是位于单位元处的正切平面
-
根据上面得出的式子:
- R˙(t)=ϕ(t)∧R(t)
- R(t)=I+ϕ(t0)∧t,一阶泰勒展开
- ϕ(t0)=ϕ0,假设在t0附近ϕ不变
- R(0)=I
-
假设在t0附近ϕ不变,在t=0附近时,就可以推出类似微分方程的式子:R˙(t)=ϕ(t0)∧R(t)=ϕ0∧R(t)
-
一个函数导数等于其本身乘以一个矩阵,其与指数函数:eax导数形式一致,故可以写成如下形式:R(t)=exp(ϕ0∧t)
-
在李代数ϕ任意一点,都可以通过指数映射exp(ϕ∧)可以得到李群R,现在的目标就是求得向量ϕ,矩阵的指数如何求exp(ϕ∧)
李代数
- 李代数,与李群对应的一种结构,位于向量空间,是李群单位元处的正切空间,也就是导数形式
- 任意李群都对应一个李代数:SO(3)–>so(3),SE(3)–>se(3)
- 李代数描述了李群单位元附近的正切空间性质,只是导数形式,李群转为李代数后就可以进行求导操作了。
定义
-
李代数有一个集合V,一个数域F和一个二元运算[,]组成
-
如果这三者满足下面的性质,称(V;F;[,])为一个李代数,记作g
- 封闭性:∀X,Y∈V,[X,Y]∈V
- 双线性:∀X,Y,Z∈V,a,b∈F,有:[aX+bY,Z]=a[X,Z]+b[Y,Z],[Z,aX+bY]=a[Z,X]+b[Z,Y]
- 自反性:∀X∈V,[X,X]=0,李括号运算表示了两个元素的差异,度量X和X之间的差异
- 雅克比等价:∀X,Y,Z∈V,[X,[Y,Z]]+[Z,[X,Y]]+[Y,[Z,X]]=0
-
其中二元运算也叫做李括号(Lie Bracket),表示两个元素的差异。
-
旋转矩阵李代数so(3)
- so(3)=[ϕ∈R3,Φ=ϕ∈R3×3],Φ=ϕ∧=⎣⎡0ϕ3−ϕ2−ϕ30ϕ1ϕ2−ϕ10⎦⎤∈R3×3
- so(3)的李括号:[ϕ1,ϕ2]=(Φ1Φ2−Φ2Φ1)∨
-
变换矩阵李代数se(3)
- se(3)=[ξ=[ρϕ]∈R6,ρ∈R3,ϕ∈so(3),ξ∧=[ϕ∧0Tρ0]∈R4×4],李代数是6维的,前三维是平移,后三维是,Φ=ϕ∧=⎣⎡0ϕ3−ϕ2−ϕ30ϕ1ϕ2−ϕ10⎦⎤∈R3×3
- se(3)的李括号:[ξ1,ξ2]=(ξ1∧ξ2∧−ξ2∧ξ1∧)∨
- 这里∧是将6维向量ξ=[ρϕ]转为4维矩阵ξ∧,与稍有so(3)的不同:ξ∧=[ϕ∧0Tρ0]
指数和对数映射
so(3)–>SO(3) 指数映射
-
旋转矩阵可以表示为指数形式:李代数到李群=指数形式
- R=exp(ϕ∧)
-
对于指数的泰勒展开为:
- exp(A)=∑n=0∞n!1(A)n
-
so(3)的泰勒展开:exp(ϕ∧)=∑n=0∞n!1(ϕ∧)n
-
由于ϕ是向量,定义其方向a和模长θ:ϕ=θa
- a的性质:
- 长度为1的单位向量,∣∣a∣∣=1;
- a∧a∧=aaT−I;
- a∧a∧a∧=−a∧;
-
a的性质,可以方便的对exp(ϕ∧)泰勒展开式进行化简:
- exp(ϕ∧)=∑n=0∞n!1(θa∧)n
- =I+θa∧+2!1θ2a∧a∧+…
- =aaT+(θ−3!1θ3+5!1θ5+…)a∧−(1−2!1θ2+4!1θ4+…)a∧a∧
- =cosθI+(1−cosθ)aaT+sinθa∧
-
最后指数映射的公式形式和罗德里格斯公式形式一致,所以说明李代数实际的物理意义就是旋转向量,李群实际的物理意义就是旋转矩阵。
-
罗德里格斯公式作用是由旋转向量转为旋转矩阵。
SO(3)–>so(3) 对数映射
- 如果反过来,也可以求得SO(3)到so(3)的元素,李群到李代数
- 求对数运算:
- ϕ=lnR∨=(∑n=0∞n+1(−1)n(R−I)n+1)∨
- 用对数形式可以求解李代数,但是计算量太大。可以通过旋转矩阵直接求旋转向量的公式:θ=arccos(2tr(R)−1)
se(3)–>SE(3)
- exp(ξ∧)=[∑n=0∞n!1(ϕ∧)n0T∑n=0∞(n+1)!1(ϕ∧)nρ1]:=[RoTJρ1]=T
- J是雅克比矩阵:J=θsinθ+(1−θsinθ)aaT+θ1−cosθa∧

李代数的求导和扰动模型
- 李代数的求导方案:
- 先利用李代数上加法定义李群元素的导数:R←ϕ+δϕ;
- 再使用指数映射和对数映射完成变换关系:eϕ!∧eδϕ∧=exp(ϕ1+δϕ)∧,需要判断是否相等:
- 式子在标量上明显成立:eaeb=ea+b,但是在矩阵上不成立。
- 可以利用BCH进行线性近似,推导so(3)与se(3)上的导数和扰动模型,通常情况扰动模型更为简洁实用。
BCH公式
- Baker-Campbell-Hausdorff formula解释了两个李群的乘法再对数之后,得到李代数的加法展开的形式,方括号为李括号:
- ln(exp(A)exp(B))=A+B+21[A,B]+121[A,[A,B]]−121[B,[A,B]]+...
- 完成公式形式
- 在SO(3)上,当ϕ1ϕ2其中一个量为小量时,忽略其高阶项,使用BCH简化为一阶线性近似形式:
ln(eϕ1∧eϕ2∧)∨≈{Jl(ϕ2)−1ϕ1+ϕ2Jr(ϕ1)−1ϕ2+ϕ1 if ϕ1issmall if ϕ2issmall
Jl=J=θsinθ+(1−θsinθ)aaT+θ1−cosθa∧
Jl−1=2θcot2θI+(1−2θcot2θ)aaT−2θa∧
Jr(ϕ)=Jl(−ϕ)
- 在李群上左乘小量时,李代数上的加法相差左雅克比的逆
exp(△ϕ∧)exp(ϕ∧)=exp((ϕ+Jl−1(ϕ)△ϕ)∧)
- 李代数上进行小量加法时,相当于李群上左成一个带左雅克比的量,或者在李群上右乘一个带右雅克比的量
exp((ϕ+△ϕ)∧)=exp((Jl△ϕ)∧)exp(ϕ∧)=exp(ϕ∧)exp((Jr△ϕ)∧
exp(△ξ∧)exp(ξ∧)=exp((Jl−1△ξ+ξ)∧)
exp(ξ∧)exp(△ξ∧)=exp((Jr−1△ξ+ξ)∧
扰动模型
- 通过BCG近似,可以定义李代数的导数了
- 假设机器人目前的位姿为T,观察点为p,产生乐意个观测数据z:z=Tp+w
- 误差为:e=z−Tp,对于N个连续观测,那么误差会叠加,估计位姿就是求解:minJ(T)=∑i=1N∣∣zi−Tpi∣∣22
- 求解J需要利用对R的导数,方法有两种:
- 对R对应的李代数加上无限趋于0的δϕ小量,求相对于小量的李群的变化率,称为导数模型
- 对R左乘或者右乘一个无限趋于0的δR小量,求相对于小量的李代数的变化率,称为左扰动和右扰动模型
导数模型
R←ϕ+δϕ
∂ϕ∂(exp(ϕ∧)p)=δϕ→0limδϕe(ϕ+δϕ)∧p−eϕ∧p
=−(Rp)∧Jl
扰动模型
∂φ∂(Rp)=φ→0limφeφ∧eϕ∧p−eϕ∧p
=−(Rp)∧