旋转矩阵

对于物理世界中的某个向量v\bm vv,其在某个坐标系下可以表示为
v=[e1e2e3][xyz]=Ep\bm v=\begin{bmatrix} \bm e_1&\bm e_2&\bm e_3 \end{bmatrix} \begin{bmatrix} x\\y\\ z \end{bmatrix}=\bm E\bm pv=[e1e2e3] xyz =Ep
我们只考虑笛卡尔坐标系,所以坐标系的基是互相正交的,因此EET=I\bm E \bm E^T=\bm IEET=I。如果坐标系旋转后
v=[e1′e2′e3′][x′y′z′]=E′p′\bm v=\begin{bmatrix} \bm e'_1&\bm e'_2&\bm e'_3 \end{bmatrix} \begin{bmatrix} x'\\y'\\ z' \end{bmatrix}=\bm E'\bm p'v=[e1e2e3] xyz =Ep
那么有
p=ETE′p′=[e1Te1′e1Te2′e1Te3′e2Te1′e2Te2′e2Te3′e3Te1′e3Te2′e3Te3′]p′=Rp′\bm p=\bm E^T\bm E' \bm p'=\begin{bmatrix} \bm e_1^T \bm e'_1&\bm e_1^T \bm e'_2&\bm e_1^T \bm e'_3 \\ \bm e_2^T \bm e'_1&\bm e_2^T \bm e'_2&\bm e_2^T \bm e'_3\\ \bm e_3^T \bm e'_1&\bm e_3^T \bm e'_2&\bm e_3^T \bm e'_3 \end{bmatrix}\bm p'=\bm R \bm p'p=ETEp= e1Te1e2Te1e3Te1e1Te2e2Te2e3Te2e1Te3e2Te3e3Te3 p=Rp
由于E\bm EEE′\bm E'E为正交矩阵,所以R\bm RR也满足正交性,在群论中这种矩阵称之为特殊正交群:
SO(n)={R∈Rn×n∣RRT=I,det(R)=1}SO(n)=\{\bm R\isin\reals^{n{\times}n}| \bm R \bm R^T=\bm I,det(\bm R)=1\}SO(n)={RRn×nRRT=I,det(R)=1}
有了旋转之后,我们还需要考虑坐标系原点的平移,我们可以想象一辆车上的相机在世界坐标系下移动,相机相对于世界坐标系的旋转矩阵和平移向量分别记为Rwc\bm R_{wc}Rwctwc\bm t_{wc}twc,对于某个环境中的某个路标点在相机坐标系下和世界坐标系下的坐标分别记为pc\bm p^cpcpw\bm p^wpw,那么有:
pw=Rwcpc+twc\bm p^w=\bm R_{wc} \bm{p^c}+\bm t_{wc}pw=Rwcpc+twc pc=RwcTpw−RwcTtwc\bm p^c=\bm R_{wc}^T \bm{p^w}-\bm R_{wc}^T\bm t_{wc}pc=RwcTpwRwcTtwc
由上述公式可得:Rcw=RwcT,tcw=−RwcTtwc\bm R_{cw}=\bm R^T_{wc},\bm t_{cw}=-\bm R_{wc}^T\bm t_{wc}Rcw=RwcTtcw=RwcTtwc也就是说世界相对于相机的旋转为反向的旋转,但平移并不是取相反数那么简单,其还与旋转有关系。我们也可以把平移和旋转写到一个大的矩阵里面,用齐次的形式表示,这个矩阵一般称为变换矩阵,即:
T=[Rt0T1]\bm T=\begin{bmatrix}\bm R& \bm t\\ \bm 0^T&1\end{bmatrix}T=[R0Tt1]
变换矩阵T\bm TT也有特殊的形式,群论中称之为特殊欧式群:
SE(3)={T∈R4×4∣R∈SO(3),t∈R3}SE(3)=\{\bm T\isin\R^{4{\times}4}|\bm R\isin SO(3),\bm t\isin\R^3\}SE(3)={TR4×4RSO(3),tR3}
有了变换矩阵之后,我们同样可以把路标点由相机坐标系变换到世界坐标系下,即pw=Twcpc\bm p^w=\bm T_{wc} \bm p^cpw=Twcpc,注意此时的pc\bm p^cpcpw\bm p^wpw都为齐次坐标(添加1作为第四个元素)。旋转只有3个自由度,但旋转矩阵却用了9维来表示,因此其表示是冗余的。另外,旋转的正交且行列式为1的约束,使得当我们想用图优化等方式来估计旋转矩阵变的困难。因此还是有必要探究其他表示旋转的方式,但不论是哪种旋转表⽰⽅式,都只有三个⾃由度。那些多于三个参数的表⽰形式,必定有某种约束条件使得⾃由度保持在三个。对于只有三个参数的表⽰形式,则必然存在奇异点。

旋转向量

任意旋转可以用一个旋转轴加旋转角刻画,我们用单位向量n\bm nn来表示旋转轴的方向,θ\thetaθ表示旋转的角度,那么旋转向量可以表示为a=θn\bm a=\theta\bm na=θn。旋转向量到旋转矩阵的转换可用罗德里格斯公式表示:
R=cos⁡θI+(1−cos⁡θ)nnT+sin⁡θn∧\boldsymbol{R}=\cos \theta \boldsymbol{I}+(1-\cos \theta) \boldsymbol{n} \boldsymbol{n}^{\mathrm{T}}+\sin \theta \boldsymbol{n}^{\wedge}R=cosθI+(1cosθ)nnT+sinθn
对公式两边求迹(矩阵的迹为对角元素之和)有:
tr⁡(R)=cos⁡θtr⁡(I)+(1−cos⁡θ)tr⁡(nnT)+sin⁡θtr⁡(n∧)=3cos⁡θ+(1−cos⁡θ)=1+2cos⁡θ\begin{aligned} \operatorname{tr}(\boldsymbol{R}) &=\cos \theta \operatorname{tr}(\boldsymbol{I})+(1-\cos \theta) \operatorname{tr}\left(\boldsymbol{n} \boldsymbol{n}^{\mathrm{T}}\right)+\sin \theta \operatorname{tr}\left(\boldsymbol{n}^{\wedge}\right) \\ &=3 \cos \theta+(1-\cos \theta) \\ &=1+2 \cos \theta \end{aligned}tr(R)=cosθtr(I)+(1cosθ)tr(nnT)+sinθtr(n)=3cosθ+(1cosθ)=1+2cosθ
可得旋转向量的大小为:
θ=arccos⁡tr(R)−12\theta=\arccos \frac {tr(\bm R)-1} 2θ=arccos2tr(R)1
由于在旋转向量方向的所有向量都不受旋转的影响,所以有Ra=a\bm R \bm a=\bm aRa=a,可见旋转向量的方向即是旋转矩阵特征值为1对应的特征向量的方向。旋转向量其实就是旋转矩阵构成的李群对应的李代数,在后续的李群与李代数篇章会详细介绍。旋转向量的奇异性发生在旋转角度超过2π2\pi2π而产生周期性时。

欧拉角

旋转向量和旋转矩阵都不够直观,人们难以理解是怎样旋转的。而欧拉角把旋转分解为了3次绕不同坐标轴的旋转,其分解方法有很多种,以常使用的YPR为例:
先绕Z轴旋转θy\theta_yθy,这个角度称之为偏航角(yaw),那么此时的旋转矩阵为:
RZ(θy)=[cos⁡θysin⁡θy0−sin⁡θycos⁡θy0001]\bm R_{Z}(\theta_y)=\left[\begin{array}{ccc} \cos \theta_{y} & \sin \theta_{y} & 0 \\ -\sin \theta_{y} & \cos \theta_{y} & 0 \\ 0 & 0 & 1 \end{array}\right]RZ(θy)= cosθysinθy0sinθycosθy0001
再绕旋转之后的Y轴旋转θp\theta_pθp,这个角度称之为俯仰角(pitch),那么此时的旋转矩阵为:
RY(θp)=[cos⁡θp0−sin⁡θp010sin⁡θp0cos⁡θp]\bm R_{Y}(\theta_p)=\left[\begin{array}{ccc} \cos \theta_{p} & 0 & -\sin \theta_{p}\\ 0 & 1 & 0\\ \sin \theta_{p}& 0 & \cos \theta_{p} \end{array}\right]RY(θp)= cosθp0sinθp010sinθp0cosθp
最后再绕旋转之后的X轴旋转θr\theta_rθr,这个角度称之为滚转角(roll),那么此时的旋转矩阵为:
RX(θr)=[1000cos⁡θrsin⁡θr0−sin⁡θrcos⁡θr]\bm R_{X}(\theta_r)=\left[\begin{array}{ccc} 1 & 0 & 0\\0& \cos \theta_{r} & \sin \theta_{r} \\ 0 & -\sin \theta_{r} & \cos \theta_{r} \end{array}\right]RX(θr)= 1000cosθrsinθr0sinθrcosθr
我们就可以用向量θ=[θr,θp,θy]T\bm \theta=[\theta_r,\theta_p,\theta_y]^Tθ=[θr,θp,θy]T来表示任意的旋转。并且有:
R=RXRYRZ=[cos⁡θpcos⁡θrcos⁡θysin⁡θr+sin⁡θysin⁡θpcos⁡θrsin⁡θysin⁡θr−cos⁡θysin⁡θpcos⁡θr−cos⁡θpsin⁡θrcos⁡θycos⁡θr−sin⁡θysin⁡θpsin⁡θrsin⁡θycos⁡θr+cos⁡θysin⁡θpsin⁡θrsin⁡θp−sin⁡θycos⁡θpcos⁡θycos⁡θp]\bm R=\bm R_X\bm R_Y\bm R_Z=\begin{bmatrix} \cos{\theta_p} \cos{\theta_r} & \cos{\theta_y} \sin{\theta_r}+\sin{\theta_y} \sin{\theta_p} \cos{\theta_r} & \sin{\theta_y} \sin{\theta_r}-\cos{\theta_y} \sin{\theta_p} \cos{\theta_r} \\ -\cos{\theta_p} \sin{\theta_r} & \cos{\theta_y} \cos{\theta_r}-\sin{\theta_y} \sin{\theta_p} \sin{\theta_r} & \sin{\theta_y} \cos{\theta_r}+\cos{\theta_y} \sin{\theta_p} \sin{\theta_r} \\ \sin{\theta_p} & -\sin{\theta_y} \cos{\theta_p} & \cos{\theta_y} \cos{\theta_p} \end{bmatrix}R=RXRYRZ= cosθpcosθrcosθpsinθrsinθpcosθysinθr+sinθysinθpcosθrcosθycosθrsinθysinθpsinθrsinθycosθpsinθysinθrcosθysinθpcosθrsinθycosθr+cosθysinθpsinθrcosθycosθp
θp=π2\theta_p=\frac \pi 2θp=2π时,旋转矩阵可以简化为:
R=[0cos⁡θysin⁡θr+sin⁡θycos⁡θrsin⁡θysin⁡θr−cos⁡θycos⁡θr0cos⁡θycos⁡θr−sin⁡θysin⁡θrsin⁡θycos⁡θr+cos⁡θysin⁡θr100]=[0sin(θy+θr)−cos⁡(θy+θr)0cos⁡(θy+θr)sin(θy+θr)100]\bm R=\begin{bmatrix} 0 & \cos{\theta_y} \sin{\theta_r}+\sin{\theta_y} \cos{\theta_r} & \sin{\theta_y} \sin{\theta_r}-\cos{\theta_y} \cos{\theta_r} \\ 0& \cos{\theta_y} \cos{\theta_r}-\sin{\theta_y} \sin{\theta_r} & \sin{\theta_y} \cos{\theta_r}+\cos{\theta_y} \sin{\theta_r} \\ 1 & 0 & 0 \end{bmatrix}=\begin{bmatrix} 0 & sin(\theta_y+\theta_r)&-\cos{(\theta_y+\theta_r)} \\ 0& \cos{(\theta_y+\theta_r)}& sin(\theta_y+\theta_r)\\ 1 & 0 & 0 \end{bmatrix}R= 001cosθysinθr+sinθycosθrcosθycosθrsinθysinθr0sinθysinθrcosθycosθrsinθycosθr+cosθysinθr0 = 001sin(θy+θr)cos(θy+θr)0cos(θy+θr)sin(θy+θr)0
从公式中可以看出,此时θy\theta_yθyθr\theta_rθr是等价的,我们无法从这样一个旋转矩阵中确定出唯一的θy\theta_yθyθr\theta_rθr,这正是欧拉角的奇异性导致的,也就是著名的万向锁问题。我们考虑足无穷小的旋转,根据麦克劳林公式有cos⁡θ≈1\cos \theta\approx1cosθ1sin⁡θ≈θ\sin\theta\approx\thetasinθθ,并且忽略极小角度的乘积,那么此时:
R≈[1θr−θp−θr1θyθp−θy1]≈I+θ∧\bm R\approx\begin{bmatrix}1&\theta_r&-\theta_p\\-\theta_r&1&\theta_y\\\theta_p&-\theta_y&1 \end{bmatrix}\approx\bm I+\bm {\theta}^{\wedge}R 1θrθpθr1θyθpθy1 I+θ
而由罗德里格斯公式同样可以得R≈I+a∧\bm R\approx\bm I+\bm a^{\wedge}RI+a,由此可见当旋转无穷小时,欧拉角近似为旋转向量。

四元数

对于物理世界中的某个二维向量v\bm vv,在复平面CCC中的坐标可以表示为p=[x,y]T\bm p=[x,y]^Tp=[x,y]T,对应的复数为z=x+yiz=x+yiz=x+yi,如果另个一复平面C′C'C相对于此复平面旋转了θ\thetaθ,那么此复数在新的复平面下为:
z′=(x+yi)(cos⁡θ+isin⁡θ)=xcos⁡θ−ysin⁡θ+(xsin⁡θ+ycos⁡θ)iz'=(x+yi)(\cos\theta+i\sin\theta)=x\cos\theta-y\sin\theta+(x\sin\theta+y\cos\theta)iz=(x+yi)(cosθ+isinθ)=xcosθysinθ+(xsinθ+ycosθ)i
复数z′z'z对应的坐标p′=[x′,y′]T\bm p'=[x',y']^Tp=[x,y]T为:
p′=[cos⁡θ−sin⁡θsin⁡θcos⁡θ][xy]=Rp\bm p'=\begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}=\bm R\bm pp=[cosθsinθsinθcosθ][xy]=Rp
由此可见,我们用单位复数cosθ+isinθcos\theta+isin\thetacosθ+isinθ表示二维的旋转,类比可用单位四元数表示三维旋转。
四元数定义为q=q0+q1i+q2j+q3k=[s,v]T\bm q= q_0+q_1i+q_2j+q_3k=[s,\bm v]^Tq=q0+q1i+q2j+q3k=[s,v]T。其中i,j,ki,j,ki,j,k为虚部,满足如下关系:
{i2=j2=k2=−1ij=k,ji=−kjk=i,kj=−iki=j,ik=−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
两个四元数q1\bm q_1q1q2\bm q_2q2的乘积为:q1q2=[s1s2−v1Tv2,s1v2+s2v1+v1×v2]T\boldsymbol{q}_{1} \boldsymbol{q}_{2}=\left[s_{1} s_{2}-\boldsymbol{v}_{1}^{\mathrm{T}} \boldsymbol{v}_{2}, s_{1} \boldsymbol{v}_{2}+s_{2} \boldsymbol{v}_{1}+\boldsymbol{v}_{1} \times \boldsymbol{v}_{2}\right]^{\mathrm{T}}q1q2=[s1s2v1Tv2,s1v2+s2v1+v1×v2]T
我们定义如下两个矩阵:
q+=[s−vTvsI+v∧],q⊕=[s−vTvsI−v∧]\boldsymbol{q}^{+}=\left[\begin{array}{cc} s & -\boldsymbol{v}^{\mathrm{T}} \\ \boldsymbol{v} & s \boldsymbol{I}+\boldsymbol{v}^{\wedge} \end{array}\right], \quad \boldsymbol{q}^{\oplus}=\left[\begin{array}{cc} s & -\boldsymbol{v}^{\mathrm{T}} \\ \boldsymbol{v} & s \boldsymbol{I}-\boldsymbol{v}^{\wedge} \end{array}\right]q+=[svvTsI+v],q=[svvTsIv]
那么四元数的乘积也可以写成矩阵乘以向量的形式,即:
q1q2=q1+q2=q2⊕q1\bm q_1 \bm q_2=\boldsymbol{q}^{+}_1 \bm q_2=\boldsymbol{q}^{\oplus}_2\bm q_1q1q2=q1+q2=q2q1
四元数的模定义为:∥q∥=s2+vTv\|\bm q\|=\sqrt{ s^2+\bm v^T \bm v}q=s2+vTv 那么两个四元数乘积的模即为模的乘积,即∣∣q1q2∣∣=∥q1∥∥q2∥||\bm q_1 \bm q_2||=\|\bm q_1\|\|\bm q_2\|∣∣q1q2∣∣=q1∥∥q2,所以两个单位四元数的乘积仍为单位四元数。
四元数的共轭四元数为虚部取反,即q∗=[s,−v]T\bm q^*=[s,-\bm v]^Tq=[s,v]T,由乘积公式可得qq∗=q∗q=[∥q∥,0]T\bm q \bm q^*=\bm q^* \bm q=[\|\bm q\|,\bm 0]^Tqq=qq=[q,0]T
四元数的逆定义为:q−1=q∗∥q∥\bm q^{-1}=\frac {\bm q^*} {\|\bm q\|}q1=qq 因此qq−1=q−1q=[1,0]T\bm q \bm q^{-1}=\bm q^{-1} \bm q=[1,\bm 0]^Tqq1=q1q=[1,0]T,由于单位四元数的模长为1,所以单位四元数的逆与共轭是相同的。另外,四元数乘积的逆等于交换位置后逆的乘积,这个与矩阵的性质类似,即(q1q2)−1=q2−1q1−1\left(\boldsymbol{q}_{1} \boldsymbol{q}_{2}\right)^{-1}=\boldsymbol{q}_{2}^{-1} \boldsymbol{q}_{1}^{-1}(q1q2)1=q21q11
我们把三维空间的某个向量v\bm vv在某个坐标系下的坐标构造成一个纯虚四元数(即实部为0,虚部对应的向量为空间坐标)p\bm pp,单位四元数q\bm qq指定了坐标系的旋转,我们令p′=qpq−1\bm p'=\bm q \bm p\bm q^{-1}p=qpq1,那么新的四元数p′\bm p'p的虚部即表示此向量在旋转后新坐标系下的坐标,且此时p′\bm p'p仍为纯虚四元数。我们用四元数的矩阵乘法表示如下:
p′=qpq−1=q+p+q−1=q+(q−1)⊕p=[s−vTvsI+v∧][svT−vsI+v∧]p=[100TvvT+s2I+2sv∧+(v∧)2]p\begin{aligned} \boldsymbol{p}^{\prime} &=\boldsymbol{q} \boldsymbol{p} \boldsymbol{q}^{-1}=\boldsymbol{q}^{+} \boldsymbol{p}^{+} \boldsymbol{q}^{-1} =\boldsymbol{q}^{+}\left(\boldsymbol{q}^{-1}\right)^{\oplus}\bm p\\&=\left[\begin{array}{cc} s & -\boldsymbol{v}^{\mathrm{T}} \\ \boldsymbol{v} & s \boldsymbol{I}+\boldsymbol{v}^{\wedge} \end{array}\right]\left[\begin{array}{cc} s & \boldsymbol{v}^{\mathrm{T}} \\ -\boldsymbol{v} & s \boldsymbol{I}+\boldsymbol{v}^{\wedge} \end{array}\right]\bm p\\&=\left[\begin{array}{cc} 1 &\bm 0 \\ \mathbf{0}^{\mathrm{T}} & \boldsymbol{v} \boldsymbol{v}^{\mathrm{T}}+s^{2} \boldsymbol{I}+2 s \boldsymbol{v}^{\wedge}+\left(\boldsymbol{v}^{\wedge}\right)^{2} \end{array}\right] \bm p \end{aligned}p=qpq1=q+p+q1=q+(q1)p=[svvTsI+v][svvTsI+v]p=[10T0vvT+s2I+2sv+(v)2]p
由此可得旋转矩阵为:
R=vvT+s2I+2sv∧+(v∧)2\boldsymbol{R}=\boldsymbol{v} \boldsymbol{v}^{\mathrm{T}}+s^{2} \boldsymbol{I}+2 s \boldsymbol{v}^{\wedge}+\left(\boldsymbol{v}^{\wedge}\right)^{2}R=vvT+s2I+2sv+(v)2
对等式两边取迹可得:
tr(R)=4s2−1tr(\bm R)=4s^2-1tr(R)=4s21
结合旋转向量与旋转矩阵转换公式可得,旋转向量大小和四元数实部之间的关系为:
θ=arccos⁡(2s2−1)  ⟹  s=cos⁡θ2\theta=\arccos(2s^2-1)\implies s=\cos \frac \theta 2θ=arccos(2s21)s=cos2θ
如果令p=[0,v]T\bm p=[0,\bm v]^Tp=[0,v]T,那么p\bm pp在旋转后仍然不变,可见旋转向量的方向为单位四元数的虚部v\bm vv,即:
n=v∥v∥=v1−s2\bm n=\frac {\bm v} {\|v\|}=\frac {\bm v}{ \sqrt {1-s^2}}n=vv=1s2 v

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐