三维空间中刚体运动的描述

三维空间中刚体运动的描述#

刚体运动由旋转与平移组成, 与旋转类似, 可以用矩阵来表示:

$$ T = \begin{pmatrix} R & \mathbf{\rho} \\ & 1 \end{pmatrix} $$

其中 \(R\) 是旋转矩阵, \(\mathbf{v}\) 是表征平移的向量. 刚体运动矩阵作用于三维向量的齐次坐标上.

同样与旋转类似, 所有刚体运动矩阵构成一个群, 称为 特殊欧氏群 \(SE(3)\).

\(SE(3)\) 也是一个 李群, 它的 李代数 \(\mathfrak{se} (3)\) 中的元素为如下形式:

$$\begin{pmatrix} \theta [\hat{\mathbf{\omega}}]_\times & \mathbf{v} \\ & 0 \end{pmatrix}$$

这里 \([\hat{\mathbf{\omega}}]_\times\) 表示单位向量的外积矩阵.

本篇文章的工作是推导 \(SE(3)\), \(\mathfrak{se}(3)\) 与 \(\mathbb{R}^6\) 中元素的互相转换. \(\mathbb{R}^6\) 中的元素也被称为 运动旋量.

引理#

$$\boxed{ \begin{pmatrix} \theta [\hat{\mathbf{\omega}}]_\times & \mathbf{v} \\ & 0 \end{pmatrix}^n = \begin{pmatrix} \theta^n [\hat{\mathbf{\omega}}]_\times^n & \theta^{n-1} [\hat{\mathbf{\omega}}]_\times^{n-1} \mathbf{v} \\ & 0 \end{pmatrix} }$$

直接计算便可得到.

三维空间中旋转的描述

三维空间中旋转的描述#

三维空间中所有正交且行列式为 \(1\) 的矩阵组成一个群, 称为 特殊正交群 \(SO(3)\), 其中的每个元素都代表一种三维空间中的旋转.

另外, \(SO(3)\) 也是一个 李群, 它的 李代数 \(\mathfrak{so}(3)\) 中的元素是轴角向量的外积矩阵.

本篇文章的工作是推导 \(SO(3)\), \(\mathfrak{so}(3)\) 与 \(\mathbb{R}^3\) 中元素的互相转换.

引理#

$$\boxed{ [\mathbf{\omega}]_\times^2 = \mathbf{\omega} \mathbf{\omega}^T - \|\mathbf{\omega}\|^2 I }$$$$\begin{align*} ([\mathbf{\omega}]_\times^2)_{ij} &= \varepsilon_{imk} \omega_m ~ \varepsilon_{knj} \omega_n \\ &= \varepsilon_{kim} \varepsilon_{knj} ~ \omega_m \omega_n \\ &= (\delta_{in} \delta_{mj} - \delta_{ij} \delta_{mn}) \omega_m \omega_n \\ &= \omega_i \omega_j - \delta_{ij} \omega_m \omega_m \\ &= (\mathbf{\omega} \mathbf{\omega}^T - \|\mathbf{\omega}\|^2 I)_{ij} \end{align*}$$
$$\boxed{ [\mathbf{\omega}]_\times^3 = - \|\mathbf{\omega}\|^2 [\mathbf{\omega}]_\times }$$$$\begin{align*} [\mathbf{\omega}]_\times^3 &= (\mathbf{\omega} \mathbf{\omega}^T - \|\mathbf{\omega}\|^2 I) [\mathbf{\omega}]_\times \\ &= \mathbf{\omega} \mathbf{\omega}^T [\mathbf{\omega}]_\times - \|\mathbf{\omega}\|^2 [\mathbf{\omega}]_\times \\ &= \mathbf{\omega} ([\mathbf{\omega}]_\times \mathbf{\omega})^T - \|\mathbf{\omega}\|^2 [\mathbf{\omega}]_\times \\ &= \mathbf{\omega} (\mathbf{\omega} \times \mathbf{\omega})^T - \|\mathbf{\omega}\|^2 [\mathbf{\omega}]_\times \\ &= - \|\mathbf{\omega}\|^2 [\mathbf{\omega}]_\times \end{align*}$$
$$\boxed{ \mathrm{rank} [\mathbf{\omega}]_\times = 2 }$$

其中 \(\mathbf{\omega} \in \mathbb{R}^3 \backslash \{0\}\).

使用泰勒展开的运动预测

使用泰勒展开的运动预测#

在 \(n\) 维空间运动的物体, 其运动方程总可以写成 \(n\) 个关于时间 \(t\) 的参数方程.

进一步地, 将关于 \(t\) 的参数方程泰勒展开为关于 \(t\) 的多项式函数, 可以显式得到其表达式, 并且可以计算出超过当前时刻, 也就是未来时刻的位置. 当超出当前时刻的时间不长, 运动轨迹是平滑的且分辨率足够高时, 可以认为此级数收敛于实际的位置.

泰勒展开所需的各阶导数可以通过数值计算获得.

参数获取#

假如我们已经获得位置关于时间的一系列数据 \(\{r_n\}\), 其中 \(r_n\) 是当前时刻的数据. 它也可以被记作 \(r_n^{(0)}\). 对应的时刻记为 \(t_n\), 或 \(t_n^{(0)}\).

根据函数导数的公式, 自然地我们想到当前时刻位置的一阶导数为 \(r_n^{(1)} = \frac{r_n - r_{n-1}}{\Delta t_n}\), 其中 \(\Delta t_n := t_n - t_{n-1}\), 以及过去时刻的导数同理.

于是, 我们获得了 \(n-1\) 个一阶导数组成的序列 \(\{r_n^{(1)}\}\). 进一步可以计算二阶乃至 \(n-1\) 阶导数:

$$r_n^{(m)} = \frac{r_n^{(m-1)} - r_{n-1}^{(m-1)}}{\Delta t_n^{(m-1)}}$$$$\Delta t_n^{(m)} = \frac{\Delta t_n^{(m-1)} + \Delta t_{n-1}^{(m-1)}}{2}$$

另外 \(\Delta t_n^{(0)} := \Delta t_n\).

抛体运动弹道解算

抛体运动弹道解算#

模型#

本文考虑使用 线性阻力 模型. 事实上, 在空气中运动的阻力应该由 二次阻力 描述, 关于二者的对比将在 后文 给出.

之所以使用线性阻力, 是因为如此一来物体的运动微分方程

$$m \dot{\mathbf{v}} = -k \mathbf{v} - m g \hat{\mathbf{j}}$$

有封闭解. 进一步令 \(\mu := \frac{k}{m}\), 上式化为

$$\dot{\mathbf{v}} = -\mu \mathbf{v} - g \hat{\mathbf{j}}$$

容易解得

$$\mathbf{v} = \mathrm{e}^{-\mu t} \mathbf{v}_0 - \mu^{-1} (1-\mathrm{e}^{-\mu t}) g \hat{\mathbf{j}}$$

积分得

$$ \mathbf{r} = \mathbf{r}_0 - \mu^{-1} (1-\mathrm{e}^{-\mu t}) \mathbf{v}_0 - \mu^{-2} (\mu t + \mathrm{e}^{-\mu t} - 1) g \, \hat{\mathbf{j}} $$

这就是线性阻力情况下的运动方程. 它也可以很轻松地分解为两个方向来运算.

与二次阻力的对比#

当速度较大 (\(\sim 20 ~ \mathrm{m/s}\)) 时, 弹丸在空气中运动的 雷诺数 很大, 并不适用于线性阻力. 但是在上升过程中, 速度逐渐下降, 雷诺数也逐渐变小, 于是在上升阶段用线性阻力模型的误差也不是很大.