罗德里格斯旋转方程推导

戏子无情 提交于 2020-03-08 01:49:41

罗德里格斯旋转方程是从角度和向量计算出相应的旋转矩阵,这个旋转方程在很多方面有重要的应用,这里简要概述一下方程的推导过程。

主要参考资料是维基百科,其实基本上就是翻译一下,自己走一遍这个推导过程,这里把链接贴出来。

维基百科-罗德里格斯方程

 

推导过程:

 

 

 

整个推导过程都是围绕上面的图片开展的,进行向量推导。

首先,定义向量k是旋转轴的单位矢量,向量v是绕向量k旋转角度θ的任意向量(旋转方向遵循右手定则,图中逆时针)。

使用点乘和叉乘,向量v可以分解成与轴k平行和垂直的分量,

       $\mathbf{v}=\mathbf{v}_{\parallel}+\mathbf{v}_{\bot}$                          (1-1)

与k平行的分量是

       $\mathbf{v}_{\parallel}=\left( \mathbf{v}\cdot \mathbf{k} \right) \mathbf{k}$                                   (1-2)

向量v在k上的向量投影,垂直于k的分量为

$\mathbf{v}_{\bot}=\mathbf{v}-\mathbf{v}_{\parallel}=\mathbf{v}-\left( \mathbf{k}\cdot \mathbf{v} \right) \mathbf{k}=-\mathbf{k}\times \left( \mathbf{k}\times \mathbf{v} \right) $                 (1-3)

矢量$\mathbf{k}\times \mathbf{v}$可以看作是$\mathbf{v}_{\bot}$绕k逆时针旋转90°的副本,所以它们的大小相等,但是方向是垂直的。同样,向量 $\mathbf{k}\times \left( \mathbf{k}\times \mathbf{v} \right) $是$\mathbf{v}_{\bot}$绕k逆时针旋转180°的副本,使得$\mathbf{k}\times \left( \mathbf{k}\times \mathbf{v} \right) $和$\mathbf{v}_{\bot}$的大小相等,但方向相反(因此符号相反)。

 

 

 

平行于轴的分量在旋转时不会改变幅度和方向:

$\mathbf{v}_{\parallel rot}=\mathbf{v}_{\parallel}$                                                   (1-4)

根据以上分析,垂直分量在旋转时会改变方向,但保持其大小:

$\left| \left. \mathbf{v}_{\bot \text{rot}} \right| \right. =\left| \left. \mathbf{v}_{\bot} \right| \right. $                                      (1-5)

并且由于k和$\mathbf{v}_{\parallel}$是平行的,所以它们的叉积是零  k×$\mathbf{v}_{\parallel}$ = 0,因此

   $\mathbf{k}\times \mathbf{v}_{\bot}=\mathbf{k}\times \left( \mathbf{v}-\mathbf{v}_{\parallel} \right) =\mathbf{k}\times \mathbf{v}-\mathbf{k}\times \mathbf{v}_{\parallel}=\mathbf{k}\times \mathbf{v}\\\mathbf{v}_{\parallel \text{rot}}=\mathbf{v}_{\parallel}$                  (1-6)

因此

$\mathbf{v}_{\bot \text{rot}}=\cos \theta \,\,\mathbf{v}_{\bot}+\sin \theta \,\,\mathbf{k}\times \mathbf{v}_{\bot}$                    (1-7)

这种旋转是正确的,因为矢量$\mathbf{v}_{\bot}$和k×v具有相同的长度,并且k×v是$\mathbf{v}_{\bot}$围绕k逆时针旋转90°。使用三角函数正弦和余弦对v⊥和k×v进行适当乘积可以得到旋转的垂直分量。旋转分量的形式类似于笛卡尔基的2D平面极坐标(r,θ)中的径向向量

$\mathbf{r}=r\cos \theta \boldsymbol{e}_x+r\sin \theta \boldsymbol{e}_y$                                (1-8)

其中$\boldsymbol{e}_x$,$\boldsymbol{e}_y$是它们指示方向上的单位向量。

 

现在完整的旋转矢量

                                                    (1-9)

用上述结果中的和的定义代替  

                        (1-10)

 

矩阵表示上式,将v和k×v表示为列矩阵,叉积可以表示为矩阵乘积。

已知,对于两个向量,a, b有:

$\boldsymbol{a}=\left( x_1,y_1,z_1 \right) \\\boldsymbol{b}=\left( x_2,y_2,z_2 \right) \\\boldsymbol{a}\times \boldsymbol{b}=\left| \begin{matrix}   \boldsymbol{i}&       \boldsymbol{j}&      \boldsymbol{k}\\  x_1&       y_1&       z_1\\    x_2&       y_2&       z_2\\\end{matrix} \right|=\left( y_1z_2-y_2z_1 \right) \boldsymbol{i}+\left( x_1z_2-x_2z_1 \right) \boldsymbol{j}+\left( x_1y_2-x_2y_1 \right) \boldsymbol{k}$

则的(1-10)可以用矩阵表示为:

$\left[ \begin{array}{c} \left( \mathbf{k}\times \mathbf{v} \right) _x\\   \left( \mathbf{k}\times \mathbf{v} \right) _y\\    \left( \mathbf{k}\times \mathbf{v} \right) _z\\\end{array} \right] =\left[ \begin{array}{c}   k_yv_z-k_zv_y\\   k_zv_x-k_xv_z\\    k_xv_y-k_yv_x\\\end{array} \right] =\left[ \begin{matrix}   0&      -k_z&      k_y\\  k_z&       0&     -k_x\\ -k_y&      k_x&       0\\\end{matrix} \right] \left[ \begin{array}{c}  v_x\\  v_y\\    v_z\\\end{array} \right] $           (1-11)

令矩阵K表示单位向量k的“反对称矩阵"(有时被称作为叉积矩阵):

                       $\mathbf{K}=\left[ \begin{matrix} 0&     -k_z&      k_y\\    k_z&       0&     -k_x\\ -k_y&      k_x&       0\\\end{matrix} \right] =\mathbf{k}^{\land}$                          (1-12)

矩阵方程可以表示为

                                         $\mathbf{Kv}=\mathbf{k}\times \mathbf{v}\,\,=\,\,\mathbf{k}^{\land}\mathbf{v}$                                (1-13)

对于任何向量v(实际上,矩阵K是具有特征值0和±i)。

迭代右边的叉乘,相当于乘以左边的反对称矩阵,如下

     $\mathbf{KKv}=\mathbf{K}^2\mathbf{v}=\mathbf{k}\times \left( \mathbf{k}\times \mathbf{v} \right) \,\,=\mathbf{k}^{\land}\mathbf{k}^{\land}\mathbf{v}$                     (1-14)

而且,由于k是单位向量,所以k具有单位2-范数。 因此旋转公式(1-10)可以表示为

      $\mathbf{v}_{\text{rot}}=\mathbf{v}+\sin \theta \,\,\mathbf{Kv}+\left( 1-\cos \theta \right) \mathbf{K}^2\mathbf{v},  \lVert \mathbf{K} \rVert _2=1$                            (1-15)

补充一下推导过程:

矢量三重叉积,链接了平行分量和垂直分量。对于给定任意三个向量a,b,c,参考公式为:

$a×\left( b×c \right) =\left( a·c \right) b-\left( a·b \right) c$

(1-10)到(1-15)都点跨度比较大,其实中间经过了下面一个步骤:

$\mathbf{v}_{\text{rot}}=\cos \theta \mathbf{v}+\left( 1-\cos \theta \right) \left( \mathbf{k}\cdot \mathbf{v} \right) \mathbf{k}+\sin \theta \,\,\mathbf{k}\times \mathbf{v}_{\bot}\\=\mathbf{v}-\left( 1-\cos \theta \right) \left( \mathbf{k}\cdot \mathbf{k} \right) \mathbf{v}+\left( 1-\cos \theta \right) \left( \mathbf{k}\cdot \mathbf{v} \right) \mathbf{k}+\sin \theta \,\,\mathbf{k}\times \mathbf{v}\\=\mathbf{v}+\left( 1-\cos \theta \right) \left( \left( \mathbf{k}\cdot \mathbf{v} \right) \mathbf{k}-\left( \mathbf{k}\cdot \mathbf{k} \right) \mathbf{v} \right) +\sin \theta \,\,\mathbf{K}\times \mathbf{v}$

再根据矢量三重叉积就可以获得(1-15)。

 

将v用紧凑表达式表达

                                             $\mathbf{v}_{\text{rot}}=\mathbf{Rv}$                                                    (1-16)

最后获得罗德里格斯旋转方程:

$\mathbf{R}=\mathbf{I}+\sin \theta \,\,\mathbf{K}\,\,+\left( 1-\cos \theta \right) \,\,\mathbf{K}^2$                 (1-17)

 

 

矩阵R是上SO(3) 旋转群(《视觉SLAM十四讲》中,将其称作为特殊正交群)中的一个元素。K是那个李群上的李代数中的一个元素。

用矩阵的指数表示:

$\mathbf{R}=\exp \left( \theta \mathbf{K} \right) =\exp \left( \theta \mathbf{k}^{\land} \right) $

为了证明最后一个等式成立,我们注意到:

$\mathbf{R}\left( \theta \right) \mathbf{R}\left( \phi \right) =\mathbf{R}\left( \theta +\phi \right) ,  \mathbf{R}\left( 0 \right) =\mathbf{I}$

characteristic of a one-parameter subgroup, i.e. exponential, and that the formulas match for infinitesimal θ.

For an alternative derivation based on this exponential relationship, see exponential map from$\mathfrak{s}\mathfrak{o}\left( 3 \right) $ to SO(3). For the inverse mapping, see log map from SO(3) to $\mathfrak{s}\mathfrak{o}\left( 3 \right) $.

Note that the Hodge dual of the rotation R is just $\mathbf{R}^*=-\sin \left( \theta \right) \mathbf{k}$ which allows the extraction of both the axis of rotation and the sine of the angle of the rotation from the rotation itself, with the usual ambiguity:

$\sin \left( \theta \right) =\sigma |\mathbf{R}^*|\\\mathbf{k}=-\sigma \mathbf{R}^*/|\mathbf{R}^*|$

where . The above simple expression results from the fact that the Hodge dual of$\mathbf{I}$and $\mathbf{K}^2$ are zero, and $\mathbf{K}^*=-\mathbf{k}$.

 

 

参考资料:

罗德里格斯(Rodrigues)旋转方程推导,18.5

维基百科-罗德里格斯方程,  2020.3.7

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!