Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

罗德里格旋转公式(轴角法) #3

Open
IWSR opened this issue Nov 13, 2022 · 2 comments
Open

罗德里格旋转公式(轴角法) #3

IWSR opened this issue Nov 13, 2022 · 2 comments

Comments

@IWSR
Copy link
Owner

IWSR commented Nov 13, 2022

罗德里格旋转公式(轴角法)

前言

阅读本文需要一些前置知识,需理解向量点积与叉积的基本知识。以下给出大致定义(因为矩阵在这里用不到,就不写矩阵形式了)以帮助理解

  • 向量点积
    • $\vec {v} \cdot \vec {j} = ||\vec {v}|| ||\vec {j}|| \cos \theta$
    • 几何解释为 向量 v 在 向量 j 上投影的模长乘以向量 j 的模长
  • 向量叉积
    • $\vec {v} \times \vec {j} = ||\vec {v}|| ||\vec {j}|| \sin \theta$
    • 叉积只有在三维下才有几何意义,其解释为同时与向量 v 与向量 j 垂直的向量,且该向量模长为向量 v 与向量 j 构成的平行四边形的面积

另外需要注意的是,本文基于右手系分析,旋转方向正负可由右手定则判断。

右手系

右手定则

罗德里格旋转公式

已知旋转轴 $\vec{f}$ ,此时有向量 $\vec{v}$ 绕旋转轴旋转 $\theta$ 角,求旋转后的 $\vec {v^{\prime}}$。如下图

IMG_ECC68942A572-1

因为旋转轴的长度并不影响旋转,为了方便求解,定义 $||\vec {f}|| = 1$。此时分解 $\vec {v}$ 至平面( $\vec {v_\parallel}$ )与旋转轴( $\vec {v_\perp}$ )上。如下图

IMG_D190DB86E9D2-1

由于 $\vec{v_\parallel}$ 可视为 $\vec{v}$$\vec{f}$ 上的投影,显然可以使用点积来表示

$\vec {v_\parallel} = \frac{\vec {v} \cdot \vec {f}}{||\vec {f}||} \frac {\vec {f}}{||\vec {f}||}$

这里解释一下为什么这么写,上面对于点积的介绍已经很明确了即点积的结果表示为向量 v 在 向量 f 上投影的模长乘以向量 f 的模长,也就说我们如果需要单独获得 $|| \vec {v_\parallel} ||$ 时需要将结果除以 $||\vec {f}||$ ,而此时我们得到的是一个值而非向量,且 $\vec {v_\parallel} \parallel \vec {f}$ 也就是两者同向,于是我们可通过将值乘以 $\vec {f}$ 的方向即可得到 $\vec {v_\parallel}$。而又因为 $||\vec {f}||$ 为 1,则可化简为

$$ \vec {v_\parallel} = (\vec {v} \cdot \vec {f})\vec {f} $$

此时也可以得到 $\vec {v_\perp}$

$$ \vec {v_\perp} = \vec {v} - \vec {v_\parallel} = \vec {v} - (\vec {v} \cdot \vec {f})\vec {f} $$

目前已经得到的结果

$$ \begin{cases} \vec {v_\parallel} = (\vec {v} \cdot \vec {f})\vec {f} \\ \vec {v_\perp} = \vec {v} - (\vec {v} \cdot \vec {f})\vec {f} \end{cases} $$

现在我们对 $\vec {v^{\prime}}$ 进行分解,可发现 $\vec {v_\parallel} = \vec {v^{\prime}_\parallel}$ ,唯一的不同在平面上的分解。

IMG_8ADF34270E8C-1

此时我们引入辅助向量 $\vec {w}$ 该向量垂直于 $\vec {v_\perp}$

$$ \because \begin{cases} \vec {w} \perp \vec {f} \\ \vec {w} \perp \vec {v_\perp} \\ || \vec {f} || = 1 \\ || \vec {w} || = || \vec {v_\perp} || \\ \end{cases} $$

$$ \therefore \vec {w} = \vec {f} \times \vec {v_\perp} $$

因为我们最终的目标是通过 $\vec {v一撇垂直}$ 求解 $\vec {v^{\prime}}$ ,那么接下来需要分解 $\vec {v一撇垂直}$$\vec {v_1}$$\vec {v_2}$ ,通过已知的 $\vec {w}$$\vec {v_\perp}$ 来表达(求解思路和上面的 v 平行是一样的)

$$ \vec {v_1} = \frac {\vec {v^{\prime}\perp} \cdot \vec {w}}{||\vec {w}||} \frac {\vec {w}}{||\vec {w}||} = \frac {||\vec {v^{\prime}\perp}|| || \vec {w} || \cos(90° - \theta)}{|| \vec {w} ||} \frac {\vec {w}}{||\vec {w}||} = \vec {w} \sin\theta $$

$$ \vec {v_2} = \frac {\vec {v^{\prime}\perp} \cdot \vec {v\perp}}{||\vec {v_\perp}||} \frac {\vec {v_\perp}}{||\vec {v_\perp}||} = \frac {||\vec {v^{\prime}\perp}|| || \vec {v\perp} || \cos(\theta)}{|| \vec {v_\perp} ||} \frac {\vec {v_\perp}}{||\vec {v_\perp}||} = \vec {v_\perp} \cos\theta $$

$$ \vec {v^{\prime}\perp} = \vec {v_1} + \vec {v_2} = \vec {w} \sin\theta + \vec {v\perp} \cos\theta $$

$$ \because \vec {w} = \vec {f} \times \vec {v_\perp} $$

$$ \therefore \vec {v^{\prime}\perp} = \vec {v\perp} \cos\theta + (\vec {f} \times \vec {v_\perp}) \sin \theta $$

$$ \vec {v^{\prime}} = \vec {v^{\prime}\perp} + \vec {v^{\prime}\parallel} = \vec {v_\perp} \cos\theta + (\vec {f} \times (\vec {v} - \vec {v_\parallel})) \sin \theta + \vec {v_\parallel} $$

$$ \because \vec {f} \parallel \vec {v_\parallel} \therefore \vec {f} \times \vec {v_\parallel} = 0 $$

$$ \vec {v^{\prime}} = \vec {v_\parallel} + \cos \theta \vec {v_\perp} + (\vec {f} \times \vec {v}) \sin \theta $$

$$ \because \begin{cases} \vec {v_\parallel} = (\vec {v} \cdot \vec {f})\vec {f} \\ \vec {v_\perp} = \vec {v} - (\vec {v} \cdot \vec {f})\vec {f} \end{cases} $$

$$ \therefore \vec {v^{\prime}} = (1 - \cos \theta)(\vec {f} \cdot \vec {v}) \vec {f} + \cos \theta \vec {v} + \sin \theta (\vec {f} \times \vec {v})$$

求证结束,此时我们得到了轴角式的旋转公式。

参考资料

《动手学机器人学》(5)(一般形式旋转矩阵公式)或(罗德里格旋转公式)或(轴角法)证明 and 齐次坐标变换

@IWSR IWSR changed the title 罗德里格旋转公式 罗德里格旋转公式(轴角法) Nov 15, 2022
@LHTLiu
Copy link

LHTLiu commented Nov 24, 2022

说明一下出处呗

@IWSR
Copy link
Owner Author

IWSR commented Nov 24, 2022

说明一下出处呗

已添加链接

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants