序言
角速度张量这个概念,在理论力学和机器人学概论课上都出现过,但两门课程上用了不同的推导方式,并得到了两个不同的结果,这使我为之困惑了一段时间。因此,我将在此对这个概念的有关内容进行梳理,还原课上的两种推导方式,并解释结果差异的原因,作为对知识的梳理和巩固。
基本假设
假设空间中有一个绕定点转动的刚体,转动中心为 $O$ ,以 $O$ 点为坐标原点建立两个坐标系,一个是固定坐标系(Laboratory Frame):$\left [O;\hat{\mathbf{e}}_1,\hat{\mathbf{e}}_2,\hat{\mathbf{e}}_3 \right ]$ ,另一个是刚体坐标系(Body Frame):$\left [O;\mathbf{e}_1,\mathbf{e}_2,\mathbf{e}_3 \right ]$ 。固定坐标系是惯性系,刚体坐标系固连在刚体上。
假设两个坐标系的基向量之间存在这样的关系式:
$$
\begin{align*}
\begin{bmatrix}
\mathbf{e}_1 &\mathbf{e}_2 &\mathbf{e}_3
\end{bmatrix} &=
\begin{bmatrix}
\hat{\mathbf{e}}_1 &\hat{\mathbf{e}}_2 &\hat{\mathbf{e}}_3
\end{bmatrix} \mathbf{R}(t) \\
\begin{bmatrix}
\hat{\mathbf{e}}_1 &\hat{\mathbf{e}}_2 &\hat{\mathbf{e}}_3
\end{bmatrix} &=
\begin{bmatrix}
\mathbf{e}_1 &\mathbf{e}_2 &\mathbf{e}_3
\end{bmatrix} \mathbf{R}^T(t)
\end{align*}
$$
$\mathbf{R}(t)$ 是与时间有关的正交矩阵,描述两个坐标系的关系,$\det(\mathbf{R}(t)) = 1$ 。
推导方式一
用爱因斯坦求和约定(为方便起见,本文将多次使用该约定),上式可以写作:
$$
\begin{cases}
\mathbf{e} _i = \mathbf{R} _{ji}\hat{\mathbf{e}} _j \\
\hat{\mathbf{e}} _j = \mathbf{R} _{jk}\mathbf{e} _k
\end{cases}
$$
假设刚体上有一点 $P$ ,它的向径为 $\mathbf r$ 。需要注意的是,物理学中的矢量是一个独立于坐标系的、客观存在的量,在不同坐标系下有不同的坐标。
设 $\mathbf r$ 在刚体坐标系中的坐标为 $\begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix}$ ,那么 $\mathbf r = x_i \mathbf{e}_i$ 。
设 $P$ 在固定坐标系中的速度为 $\mathbf{v}_P$ ,则有
$$
\begin{align*}
\mathbf{v} _P &= \frac{\mathrm{d} \mathbf{r}}{\mathrm{d} t} \\
&= x_i \frac{\mathrm{d} \mathbf{e} _i}{\mathrm{d} t} \\
&= x_i \frac{\mathrm{d} \mathbf{R} _{ji}}{\mathrm{d} t} \hat{\mathbf{e}} _j \\
&= x_i \frac{\mathrm{d} \mathbf{R} _{ji}}{\mathrm{d} t} \mathbf{R} _{jk} \mathbf{e} _k \\
&= x_i(\dot{\mathbf{R}}^T \mathbf{R}) _{ik} \mathbf{e} _k \\
&= x_i (\mathbf{R}^T\dot{\mathbf{R}}) _{ki} \mathbf{e} _k
\end{align*}
$$
事实上,$\mathbf{R}^T \dot{\mathbf{R}}$ 是一个反对称矩阵。
证明过程
$$
\begin{align*}
\mathbf{R}^T\mathbf{R} &= \mathbf{I} \\
\frac{\mathrm{d}}{\mathrm{d}t} (\mathbf{R}^T\mathbf{R}) &= \mathbf{0} \\
\dot{\mathbf{R}}^T\mathbf{R} + \mathbf{R}^T\dot{\mathbf{R}} &= \mathbf{0} \\
(\mathbf{R}^T\dot{\mathbf{R}})^T + \mathbf{R}^T\dot{\mathbf{R}} &= \mathbf 0
\end{align*}
$$
定义 $\mathbf S = \mathbf{R}^T\dot{\mathbf{R}} = \begin{bmatrix} 0 &-\Omega_3 &\Omega_2 \\ \Omega_3 &0 &-\Omega_1 \\ -\Omega_2 &\Omega_1 &0 \end{bmatrix}$ ,张量 $\overset{\rightrightarrows}{\mathbf S} = \mathbf{S}_{ij}\mathbf{e}_i\mathbf{e}_j$
张量的运算法则
$$
\begin{align*}
\overset{\rightrightarrows}{\mathbf S} \cdot \mathbf{r} &= \mathbf{S}_{ij}\mathbf{e}_i\mathbf{e}_j \cdot (x_k \mathbf{e} _k) \\
&= \mathbf{S} _{ij}x_k\mathbf{e}_i(\mathbf{e} _j \cdot \mathbf{e} _k) \\
&= \mathbf{S} _{ij}x_k \delta _{jk} \mathbf{e} _i \\
&= \mathbf{S} _{ij}x_j\mathbf{e}_i
\end{align*}
$$
其中 $\delta$ 是克罗内克(Kronecker)函数
则 $\mathbf{v} _P = \mathbf{S} _{ki} x_i \mathbf{e}_k = \overset{\rightrightarrows}{\mathbf S} \cdot \mathbf{r}$
若用Levi-Civita符号表示,$S_{ij} = - \epsilon _{ijk}\Omega _k$ ,$\mathbf{v} _P = -\epsilon _{kij} \Omega _j x_i \mathbf{e} _k = \begin{bmatrix} \Omega _1 \\ \Omega _2 \\ \Omega _3 \end{bmatrix} \times \mathbf{r}$
也就是说,我们得到了刚体的角速度张量 $\overset{\rightrightarrows}{\mathbf S}$ ,它在刚体坐标系中的表达为 $\mathbf S = \mathbf{R}^T\dot{\mathbf{R}} = \begin{bmatrix} 0 &-\Omega_3 &\Omega_2 \\ \Omega_3 &0 &-\Omega_1 \\ -\Omega_2 &\Omega_1 &0 \end{bmatrix}$ ,而 $\begin{bmatrix} \Omega _1 \\ \Omega _2 \\ \Omega _3 \end{bmatrix}$ 是其对应的角速度矢量在刚体坐标系中的坐标。
推导方式二
如果直接对 $\mathbf R$ 求导,根据导数的定义,有
$$
\dot{\mathbf{R}} = \lim _{\Delta t \to 0} \frac{\mathbf{R}(t+\Delta t) - \mathbf{R}(t)}{\Delta t}
$$
假设 $t$ 时刻刚体的瞬时转轴为 $K$ ,$\Delta t$时间内转过的角度为 $\Delta \theta$ ,记 $\mathbf{R} _K (\Delta \theta)$ 是固定坐标系中绕 $K$ 轴旋转 $\Delta \theta$ 对应的旋转矩阵。
于是
$$
\mathbf{R}(t+\Delta t) = \mathbf{R} _K (\Delta \theta) \mathbf{R} (t)
$$
所以
$$
\begin{align*}
\dot{\mathbf{R}} &= \lim _{\Delta t \to 0} \left( \frac{\mathbf{R} _K(\Delta \theta) - \mathbf{I} _3}{\Delta t} \mathbf{R}(t) \right) \\
&= \left( \lim _{\Delta t \to 0}\frac{\mathbf{R} _K(\Delta \theta) - \mathbf{I} _3}{\Delta t} \right) \mathbf{R}(t)
\end{align*}
$$
接下来的推导中,我们要先知道 $\mathbf{R} _K (\theta)$ 的表达式,我在这里不作证明,直接引用:
$$
\mathbf{R} _K(\theta) = \begin{bmatrix}
k_1^2(1-\cos\theta)+\cos\theta &k_1k_2(1-\cos\theta)-k_3\sin\theta &k_1k_3(1-\cos\theta)+k_2\sin\theta \\
k_1k_2(1-\cos\theta)+k_3\sin\theta &k_2^2(1-\cos\theta)+\cos\theta &k_2k_3(1-\cos\theta)-k_1\sin\theta \\
k_1k_3(1-\cos\theta)-k_2\sin\theta &k_2k_3(1-\cos\theta)+k_1\sin\theta &k_3^2(1-\cos\theta)+\cos\theta
\end{bmatrix}
$$
$$
\mathbf{k} = \begin{bmatrix}\hat{\mathbf e} _1 &\hat{\mathbf e} _2 &\hat{\mathbf e} _3 \end{bmatrix} \begin{bmatrix} k_1 \\ k_2 \\ k_3 \end{bmatrix} 是转轴K方向的单位向量
$$
代入 $\theta = \Delta \theta$ ,并保留一阶小量,得
$$
\mathbf{R} _k(\Delta \theta) = \begin{bmatrix}
1 &-k_3\Delta \theta &k_2\Delta \theta \\
k_3\Delta \theta &1 &-k_1\Delta \theta \\
-k_2\Delta \theta &k_1\Delta \theta &1
\end{bmatrix}
$$
于是
$$
\dot{\mathbf{R}} = \lim _{\Delta t \to 0} \frac{\begin{bmatrix}
0 &-k_3\Delta \theta &k_2\Delta \theta \\
k_3\Delta \theta &0 &-k_1\Delta \theta \\
-k_2\Delta \theta &k_1\Delta \theta &0
\end{bmatrix}}{\Delta t} \mathbf{R}(t)
$$
设 $\Omega _i = k _i \lim _{\Delta t \to 0} \frac{\Delta \theta}{\Delta t}$
则
$$
\dot{\mathbf{R}} = \begin{bmatrix}
0 &-\Omega _3 &\Omega _2 \\
\Omega _3 &0 &-\Omega _1 \\
-\Omega _2 &\Omega _1 &0
\end{bmatrix} \mathbf{R}(t)
$$
两边同时右乘 $\mathbf{R}^T(t)$ ,得
$$
\mathbf{S} = \dot{\mathbf{R}}\mathbf{R}^T = \begin{bmatrix}
0 &-\Omega _3 &\Omega _2 \\
\Omega _3 &0 &-\Omega _1 \\
-\Omega _2 &\Omega _1 &0
\end{bmatrix}
$$
问题
至此,我们已经通过两种不同方式得到了角速度的反对称矩阵表达式。但眼尖的我发现,一个是 $\mathbf{S} = \mathbf{R}^T\dot{\mathbf{R}}$ ,另一个是 $\mathbf{S} = \dot{\mathbf{R}}\mathbf{R}^T$ ,两个 $\mathbf{S}$ 居然是不同的!问题究竟出在何处?
解释
你可能已经注意到,我在行文过程中将所有的坐标系都加粗了。没错,问题就出在坐标系的选取上。为了区分,我将前后得到的两个 $\mathbf S$ 标记为 $\mathbf S _1$ 和 $\mathbf S _2$ ,其中 $\mathbf S _1 = \mathbf{R}^T\dot{\mathbf{R}}$ ,$\mathbf S _2 = \dot{\mathbf{R}}\mathbf{R}^T$。
$\mathbf S _1$ 在文中已经强调过,它是角速度张量在刚体坐标系下的表达。在推导 $\mathbf S _2$ 的过程中,我们用到的 $\mathbf k$ 选取的是固定坐标系中的坐标,因此 $\mathbf S _2$ 自然就是同一个角速度张量在固定坐标系下的表达。根据同一个张量在不同坐标系下的矩阵满足相似关系:$\mathbf S _2 = \mathbf R \mathbf S _1 \mathbf R^T$ ,将 $\mathbf S _1 = \mathbf{R}^T\dot{\mathbf{R}}$ 和 $\mathbf S _2 = \dot{\mathbf{R}}\mathbf{R}^T$ 代入,发现等式恰好成立。
因此,这两种推导方式得到的角速度张量其实是一致的,形式上的区别仅仅来源于坐标系的不同,至此问题得以解决。