旋转矩阵求导出现角速度的理解

文章目录
  1. 1. 文章来源
  • 第一种视角
  • 第二种视角
  • 空间角速度和物体角速度
  • 其他证明的思考
  • 参考
  • 文章来源

    Author: [小林up] Link: [https://zhuanlan.zhihu.com/p/602088458]

    在谷歌查资料的时候看到一个很好的帖子,讨论旋转矩阵求导为什么会出现角速度[1]

    how and why the angular velocity vector is related to the derivative of a rotation matrix

    觉得打开了新的视角,记录一下,欢迎大家一起讨论学习。

    所以为什么有有下面这个公式呢?

    \(\begin{align}\frac{\mathrm{d}}{\mathrm{d} t} \mathbf{R} & = {\omega} \times \mathbf{R}\end{align}\\\)

    第一种视角

    要证上式就是考虑旋转矩阵按列分块

    \(\begin{align}\mathbf{R} & = \left[\begin{array}{l|l|l}\hat{\mathbf{i} } & \hat{\mathbf{j} } & \hat{\mathbf{k} }\end{array}\right]\end{align}\\\)

    即证明:

    \(\begin{align}\frac{\mathrm{d}}{\mathrm{d} t} \hat{\mathbf{i} } & = {\omega} \times \hat{\mathbf{i} } \\\frac{\mathrm{d}}{\mathrm{d} t} \hat{\mathbf{j} } & = {\omega} \times \hat{\mathbf{j} } \\\frac{\mathrm{d}}{\mathrm{d} t} \hat{\mathbf{k} } & = {\omega} \times \hat{\mathbf{k} }\end{align}\\\)

    我们知道旋转矩阵的每一列都有这样的性质:

    \(\begin{align}\|\hat{\mathbf{u}}\| & = 1\end{align}\\\)

    这是因为旋转矩阵是正交矩阵:

    \(\begin{align}\mathbf{R}^{T} \mathbf{R} & = \mathbf{I}\end{align}\\\)

    于是我们有:

    \(\begin{align}\frac{\mathrm{d}}{\mathrm{d} t} {\hat{\mathbf{u}}^T \hat{\mathbf{u}}} & = 0\end{align}\\\)

    继而得到:

    \(\begin{align}\hat{\mathbf{u}} \cdot \frac{\mathrm{d}}{\mathrm{d} t} \hat{\mathbf{u}} & = 0\end{align}\\\)

    这不就说明每一列的\(\hat{u}\)和其微分垂直吗?其微分可以表示为叉乘的形式(保证垂直):

    \(\begin{align}\hat{\mathbf{u}} \cdot({\omega} \times \hat{\mathbf{u}}) & = 0\end{align}\\\)

    也即我们有:

    \(\begin{align}\frac{\mathrm{d}}{\mathrm{d} t} \hat{\mathbf{u}} & = {\omega} \times \hat{\mathbf{u}}\end{align}\\\)

    于是上式得到了证明。

    \(\begin{align}\frac{\mathrm{d}}{\mathrm{d} t} \mathbf{R} & = {\omega} \times \mathbf{R}&=[{\omega} ]_\times \mathbf{R}\end{align}\\\)

    式中:

    \(\begin{align}[{\omega}]_\times & = \left[\begin{array}{ccc}0 & -\omega_{z} & \omega_{y} \\\omega_{z} & 0 & -\omega_{x} \\-\omega_{y} & \omega_{x} & 0\end{array}\right]\end{align}\\\)

    \([{\omega}]_\times\)的定义下同。

    第二种视角

    考虑全局坐标系下旋转角标为\(S\),连体坐标系旋转角标为\(B\),空间中一个矢量为\(\mathbf{u}\),我们有下面的关系:

    \(\begin{align}\mathbf{u}_{S} & = \mathbf{R}\mathbf{u}_{B}\end{align}\\\)

    求导我们可以得到:

    \(\begin{align}\mathbf{v}_{S} & = \left(\frac{\mathrm{d}}{\mathrm{d} t} \mathbf{R}\right)\mathbf{u}_{B}\end{align}\\\)

    上式中\(\mathbf{v}_{S}\)是全局坐标系下的速度,等式右边没有\(\mathbf{u}_{B}\)的导数是因为连体坐标系内观察坐标始终没有变化,导数为0。

    于是我们有:

    \(\begin{align}\mathbf{v}_{S} & =\omega \times\mathbf{u}_{S} \\& =\omega \times \mathbf{R}\mathbf{u}_{B} \\\end{align}\\\)

    对比我们可以知道:

    \(\begin{align}\frac{\mathrm{d}}{\mathrm{d} t} \mathbf{R} & = {\omega} \times \mathbf{R}\\&=[{\omega} ]_\times \mathbf{R}\end{align}\\\)

    空间角速度和物体角速度

    我们经常在论文里看到反过来写的旋转矩阵的导数,这又是为什么呢?

    \(\begin{align}\frac{\mathrm{d}}{\mathrm{d} t} \mathbf{R}&= \mathbf{R}[{\omega} ]_\times\end{align}\\\)

    准确地说,上述\([{\omega} ]_\times\)应该指的是物体角速度\([{\omega}^B ]_\times\)

    \(\begin{align}\frac{\mathrm{d}}{\mathrm{d} t} \mathbf{R}&= \mathbf{R}[{\omega}^B ]_\times\end{align}\\\)

    我们需要搞清楚的是前面所推导和论证的公式准确地说应该描述的是惯性坐标系的空间角速度\([{\omega}^S ]_\times\)

    \(\begin{align}\frac{\mathrm{d}}{\mathrm{d} t} \mathbf{R}&=[{\omega}^S ]_\times \mathbf{R}\end{align}\\\)

    为了方便我们把旋转矩阵的微分写作:

    \(\begin{align}\dot{\mathbf{R}}=\frac{\mathrm{d}}{\mathrm{d} t} \mathbf{R}\end{align}\\\)

    于是我们便得到:

    \(\begin{align}[{\omega}^S ]_\times=\dot{\mathbf{R}}\mathbf{R}^{-1}\end{align}\\\)

    \(\begin{align}[{\omega}^B ]_\times=\mathbf{R}^{-1}\dot{\mathbf{R}}\end{align}\\\)

    空间角速度在前面(第二种视角)我们已经推导过了,下面我们推导一下物体角速度,根据坐标变换关系我们有:

    \(\begin{align}\mathbf{v} _{S} & = \mathbf{R} \mathbf{v} _{B}\end{align}\\\)

    \(\begin{align}\mathbf{\omega} _{S} & = \mathbf{R} \mathbf{\omega} _{B}\end{align}\\\)

    根据前面的:

    \(\begin{align}\mathbf{v}_{S} & = \dot{\mathbf{R}}\mathbf{u}_{B}\end{align}\\\)

    则有:

    \(\begin{align}\mathbf{R}^{-1}\mathbf{v}_{S} & = \mathbf{R}^{-1}\dot{\mathbf{R}}\mathbf{u}_{B}\end{align}\\\)

    也即:

    \(\begin{align}\mathbf{v}_{B} & = \mathbf{R}^{-1}\dot{\mathbf{R}}\mathbf{u}_{B}=[{\omega}^B ]_\times\mathbf{u}_{B}\end{align}\\\)

    于是我们便得到:

    \(\begin{align}[{\omega}^B ]_\times=\mathbf{R}^{-1}\dot{\mathbf{R}}\end{align}\\\)

    也即证明了:

    \(\begin{align}\frac{\mathrm{d}}{\mathrm{d} t} \mathbf{R}&= \mathbf{R}[{\omega} ]_\times\end{align}\\\)

    其他证明的思考

    在李群李代数的一些书里,为了说明旋转矩阵的李代数是反对称矩阵,一般有这样的证明:

    \(\begin{align}\mathbf{R}^{T} \mathbf{R} & = \mathbf{I}\end{align}\\\)

    对左右两边对时间求导数:

    \(\begin{align}\mathbf{R}^{T} \dot{\mathbf{R}}+\dot{\mathbf{R}}^{T} \mathbf{R} & = \mathbf{0}\end{align}\\\)

    \(\begin{align}[{\omega} ]_\times & = \mathbf{R}^{T} \dot{\mathbf{R}} \quad \text { and } \quad {[{\omega} ]_\times}+[{\omega} ]_\times^{T} = \mathbf{0}\end{align}\\\)

    \(\begin{align}\dot{\mathbf{R}} & = \mathbf{R} [{\omega} ]_\times\end{align}\\\)

    事实上,我也可以对下面的式子做同样的操作。

    \(\begin{align}\mathbf{R} \mathbf{R}^{T} & = \mathbf{I}\end{align}\\\)

    对左右两边对时间求导数:

    \(\begin{align}\dot{\mathbf{R}} {\mathbf{R}}^{T} +{\mathbf{R}} \dot{\mathbf{R}}^{T}& = \mathbf{0}\end{align}\\\)

    \(\begin{align}[{\omega} ]_\times & = \dot{\mathbf{R}}\mathbf{R}^{T} \quad \text { and } \quad {[{\omega} ]_\times}+[{\omega} ]_\times^{T} = \mathbf{0}\end{align}\\\)

    \(\begin{align}\dot{\mathbf{R}} & = [{\omega} ]_\times\mathbf{R} \end{align}\\\)

    以上两个都证明可以从数学的定义说明旋转矩阵群\(SO(3)\)的李代数是反对称矩阵。然而这样的证明并没有反映究竟是物体角速度还是空间角速度,实际应用中可能会让读者产生困惑,关于物体角速度和空间角速度和旋转矩阵的关系还是要用前面的推导说明。

    本文使用 Zhihu On VSCode 创作并发布

    参考

    1. [^](#ref_1_0)Derivative of rotation matrix produces angular velocity vector https://physics.stackexchange.com/questions/637857/derivative-of-rotation-matrix-produces-angular-velocity-vector