位姿变换与李群、李代数

  本博客是在学习高翔《视觉SLAM十四讲》过程中对位姿变换与李群李代数相关知识点做的总结,不涉及公式的证明与推导。

一、位姿变换

1、旋转矩阵与变换矩阵

旋转矩阵是描述刚体旋转最常见的一种形式,而变换矩阵通常是指旋转矩阵与平移向量组成的齐次变换矩阵。对于三维空间的位姿变换,有旋转矩阵

R=[r1r2r3]=[r11r12r13r21r22r23r31r32r33]

平移向量:

t=[t1t2t3]T

则旋转矩阵R 与平移向量t 组成的齐次变换矩阵为:

T=[Rt0T1]=[r11r12r13t1r21r22r23t2r31r32r33t30001]

旋转矩阵R 是一种单位正交阵,它具有单位正交阵所有的性质:

{r1Tr2=r1Tr3=r2Tr3=0r1=r2=r3=det(R)=1

重要的是,旋转矩阵的逆等于旋转矩阵的转置,即R1=RT ,从而有RR1=RRT=I 。齐次变换矩阵T 的逆为:

T1=[R1R1t0T1]=[RTRTt0T1]

假设我们由座标系A经过变换矩阵TBAT=[Rt0T1] 得到了座标系B,那么座标系B下的点PBP 可在座标系A中表示为:

PAP=TBATPBP=[Rt0T1][PBP1]=RPBP+t

同样,座标系A下的点PAP 可在座标系B中表示为:

PBP=TABTPAP=TBAT1PAP=[RTRTt0T1][PAP1]=RTPAPRTt=RT(PAPt)

2、欧拉角与旋转矩阵

欧拉角是描述刚体旋转最直观的一种形式,它往往只用于可视化的人机交互,而无法直接参与运算。

这里写图片描述

对于三维空间座标系,我们通常这样规定:

{绕 X 轴旋转的角度称为横滚角,Roll绕 Y 轴旋转的角度称为俯仰角,Pitch绕 Z 轴旋转的角度称为偏航角,Yaw

所有的旋转,沿着旋转轴方向顺时针旋转的角度为正,逆时针旋转的角度为负。对于平移,沿着该轴正方向平移的距离为正,负方向平移的距离为负。

设刚体绕着Z 轴旋转γ 角度,那么刚体上所有点的z 座标值不变,xy 的座标值分别变为:

x=ρcos(θ+γ)=ρ(cosθcosγsinθsinγ)=xcosγysinγy=ρsin(θ+γ)=ρ(cosθsinγ+sinθcosγ)=xsinγ+ycosγ

写成矩阵的形式:

[xyz]=[cosγsinγ0sinγcosγ0001][xyz]=RZ(γ)[xyz]

从而,我们总结出欧拉角与旋转矩阵的关系:

{Roll:RX(α)=rotx(α)=[1000cosαsinα0sinαcosα]Pitch:RY(β)=roty(β)=[cosβ0sinβ010sinβ0cosβ]Yaw:RZ(γ)=rotz(γ)=[cosγsinγ0sinγcosγ0001]

有了欧拉角与旋转矩阵之间的转换关系,下面举一个简单的例子验证一下:

如上图所示,有位于立方体顶点上的三个座标系O1O2O3 ,以及位于立方体中心的点P ,立方体的边长分别为6、8、10。下面先进行三个座标系之间的变换:

  • O1O2

    相对变换O1 先沿着座标轴O1X1 的正方向平移10个单位到达O2 ,然后绕着当前位置的O1Z1 轴顺时针旋转90°,此时新得到的O1O2 座标系完全重合,即完成了O1O2 的座标系变换。以上过程可以在MATLAB中用变换矩阵表述为:

    T21T=transl(10,0,0)*trotz(pi/2)=[10010010000100001][0100100000100001]=[01010100000100001]

    绝对变换O1 先绕着座标轴O1Z1 顺时针旋转90°,然后沿着原来O1X1 轴的正方向平移10个单位到达O2 ,此时新得到的O1O2 座标系完全重合,即完成了O1O2 的座标系变换。以上过程可以在MATLAB中用变换矩阵表述为:

    T21T=transl(10,0,0)*trotz(pi/2)=[10010010000100001][0100100000100001]=[01010100000100001]=T21T

    你可能会问,两次不同的操作为什么表达式是一样的?原因是这里牵涉到相对变换与绝对变换的区别

    {相对变换:每一步都以新得的座标系为参考,每一步得到的变换矩阵依次右乘;绝对变换:始终以最初的座标系为参考,通常是先旋转再平移,每一步得到的变换矩阵依次左乘;相对变换与绝对变换不可同时使用!

    当然,O1O2 的相对变换还可以有很多种操作顺序,比如:

    T21T=trotz(pi/2)*transl(0,-10,0)=[0100100000100001][10000101000100001]=[01010100000100001]=T21T

    等等,这里不再一一列举。

  • O2O1

    相对变换

    T12T=transl(0,10,0)*trotz(-pi/2)=[10000101000100001][0100100000100001]=trotz(-pi/2)*transl(-10,0,0)=[0100100000100001][10010010000100001]=[01001001000100001]

    绝对变换

    T12T=transl(0,10,0)*trotz(-pi/2)=[10000101000100001][0100100000100001]=[01001001000100001]=T12T

    相信这些表达式的意义都很容易理解,接下来验证一下T21TT12T 是不是互逆:

    T21TT12T=[01010100000100001][01001001000100001]=[1000010000100001]=I

    显然,O1O2O2O1 互为逆变换,T21TT12T 互逆。其实,由O1O2 的变换矩阵就是对座标系O2 在座标系O1 中位姿的一种描述,即T21T 描述了O2O1 中的位置和姿态。同理,T12T 描述了O1O2 中的位置和姿态。那么,我们已经知道了点PO1 座标系下的座标为P1P=(5,4,3)T ,座标系O1 在座标系O2 下的位姿为T12T ,顺理成章地,我们就可以求得点PO2 座标系下的座标为:

    P2P=T12TP1P=[01001001000100001][5431]=[4531]

    很显然,结果跟事实是一致的。

  • O2O3

    T32T=transl(8,0,6)*troty(pi)=troty(pi)*transl(-8,0,-6)=[1008010000160001]T23T=transl(8,0,6)*troty(pi)=troty(pi)*transl(-8,0,-6)=[1008010000160001]T32TT23T=[1008010000160001]2=[1000010000100001]=IP3P=T23TP2P=[1008010000160001][4531]=[4531]
  • O1O3

    T31T=transl(10,8,6)*trotz(pi/2)*troty(pi)=trotz(-pi/2)*trotx(pi)*transl(-8,-10,-6)=T21TT32T=[01010100800160001]P3P=T13TP1P=T31T1P1P=[01081001000160001][5431]=[4531]

3、旋转向量与旋转矩阵

旋转向量(或称轴角,Axis-Angle),是一种定义在R3 上的三维向量(对于三维空间的旋转来说),它可以描述刚体在三维空间中绕任意旋转轴发生的旋转。旋转向量的方向代表旋转轴的方向,它的模代表旋转的角度。对于一个旋转轴为nn=1 ),转角为θ 的旋转向量θnθ 单位为弧度),它与旋转矩阵R 的关系为:

  • 旋转向量到旋转矩阵

    (罗德里格斯公式)R=I+sinθn+(1cosθ)n2=cosθI+sinθn+(1cosθ)nnT

    这里的nn=[nxnynz]T 所对应的反对称矩阵:

    n=[0nznynz0nxnynx0]

    n2=nn=nnTIn3=n

  • 旋转矩阵到旋转向量

    {θ=arccos(tr(R)12)Rn=n

    其中,tr(R) 表示旋转矩阵R 的迹。旋转轴n 其实就是矩阵R 特征值1所对应的特征向量。

4、四元数与旋转向量

不得不指出的是,旋转矩阵具有冗余性,而欧拉角和旋转向量都具有奇异性,只有四元数(Quaternions)可以完美地描述一个刚体在三维空间的旋转。

通常,我们用单位四元数q=qw+qxi+qyj+qzk 表示三维空间中任意一个旋转,写成向量的形式:

q=[qwqxqyqz]Tq=[qxqyqzqw]T

单位四元数q 与旋转向量θn 的关系

(四元数到旋转向量)θn=θ[nxnynz]T=2arccosqw[qxsinθ2qysinθ2qzsinθ2]T

(旋转向量到四元数)qw=cosθ2qx=nxsinθ2qy=nysinθ2qz=nzsinθ2

单位四元数q 与旋转矩阵R 的关系

(四元数到旋转矩阵)R=[r11r12r13r21r22r23r31r32r33]=[12(qy2+qz2)2(qxqyqwqz)2(qxqz+qwqy)2(qxqy+qwqz)12(qx2+qz2)2(qyqzqwqx)2(qxqzqwqy)2(qyqz+qwqx)12(qx2+qy2)]

(旋转矩阵到四元数)qw=tr(R)+12qx=r23r324qwqy=r31r134qwqz=r12r214qw

二、李群与李代数

1、什么是李群

群(Group)是一种集合加上一种运算的代数结构,李群(Lie Group)是指具有连续(光滑)性质的群。三维空间中的旋转矩阵RSO(3) 和变换矩阵TSE(3) 都属于李群,它们也都有各自的名字:SO(n) 称为特殊正交群(Special Orthogonal Group,或称旋转矩阵群),SE(n) 称为特殊欧式群(Special Euclidean Group,或称欧式变换群),这里的n 不限制为3。

SO(3)={RR3×3|RRT=I,det(R)=1}SE(3)={T=[Rt0T1]R4×4|RSO(3),tR3}

重要的是,李群中的旋转矩阵群与欧式变换群对加法是不封闭的,只对乘法封闭,即:

R1+R2SO(3),T1+T2SE(3)R1R2SO(3),T1T2SE(3)

所以,刚体之间的位姿变换都是用乘法而不是用加法。

2、什么是李代数

简单地说,李代数(Lie Algebra)就是李群的导数,它描述了李群的局部性质,是定义在李群正切空间(Tangent Space)上的一组向量。旋转矩阵群SO(3) 与欧式变换群SE(3) 对应的李代数分别为:

so(3)={ϕR3,Φ=ϕR3×3}se(3)={ξ=[ρϕ]R6,ρR3,ϕso(3),Ξ=ξ=[ϕρ0T1]R4×4}

这里,ϕ=θn 其实就是定义在R3 上的旋转向量,Φ=ϕ 是其所对应的反对称矩阵。

3、李群与李代数之间的转换

SO(3)so(3){SO(3)so(3)ϕ=ln(R)so(3)SO(3)R=exp(ϕ)=eΦ

SE(3)se(3){SE(3)se(3)ξ=ln(T)se(3)SE(3)T=exp(ξ)=eΞ

参考文献
[1] https://blog.csdn.net/csxiaoshui/article/details/65437633
[2] 高翔, 张涛. 视觉SLAM 十四讲[M]. 电子工业出版社, 2017.
[3] https://blog.csdn.net/tms_li/article/details/78599748?locationNum=4&fps=1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章