Rodrigues:旋转矩阵的向量表达

目的:最近看论文,遇到Rodrigues公式,一直没有怎么推导。因此自己推导一遍。

在理解Rodrigues公式,之前需要理解旋转向量的表达方式。
旋转矩阵的向量表达是基于欧拉定理推导的,它有三个参数。而它可以转化为旋转矩阵。这种转化为旋转矩阵的方式被称为Rodrigues公式。

Rotation Vectors
普通认知中,旋转矩阵是 3 × 3 3\times3 3×3的矩阵。这类矩阵有众多约束,具体哪些约束可以查阅资料(后续自己补上)。它只有三个自由度。只要知道那三个参数,剩下的6个参数能够计算,它的表达容易。在一般优化中,使用 Rotation matrix不方便,矩阵的计算复杂且耗时。

定义的来源
在几何旋转中,任意一个旋转都可以表达为绕着一根轴旋转一定的角度。因此表达方式可以表示为:一根旋转的向量 u → \overrightarrow{u} u ,和其旋转的角度 θ \theta θ。因此它可以用4个参数来决定。
假设向量 r → \overrightarrow{r} r 为主轴向量,它的旋转的向量从向量 p → \overrightarrow{p} p ,旋转角度为 θ \theta θ。如下图:

Rodrigues:旋转矩阵的向量表达_第1张图片
因为 o → \overrightarrow{o} o 为原点。简化表达 o p → = p → \overrightarrow{op}=\overrightarrow{p} op =p ,其它也使用类似的表达。

从图上可以看到,向量 p → \overrightarrow{p} p 绕着轴 u → \overrightarrow{u} u 旋转的时候,只和垂直于向量 u → \overrightarrow{u} u 有关。因此按照向量 u → \overrightarrow{u} u 把它拆分为 a → \overrightarrow{a} a , b → \overrightarrow{b} b ,它们分别平面于向量 u → \overrightarrow{u} u 和垂直于向量 u → \overrightarrow{u} u 。拆分了两个向量,需要计算两个向量。假设 u → \overrightarrow{u} u p → \overrightarrow{p} p 的夹角为 σ \sigma σ,因此可以得到
c o s σ = u → ⋅ p → ∣ u → ∣ ∣ p → ∣      ( 1 ) cos\sigma=\cfrac{\overrightarrow{u} \cdot \overrightarrow{p}}{|\overrightarrow{u}||\overrightarrow{p}|} \space \space\space\space (1) cosσ=u ∣∣p u p     (1)
因为 u → \overrightarrow{u} u 为单位向量。因此可以得到
a → = u → ∣ p → ∣ c o s σ = u → ⋅ p → ∣ u → ∣ ∣ p → ∣ ∣ p → ∣ u → = ( u → ⋅ p → ) u → = u → ( u → ⋅ p → )      ( 2 ) \overrightarrow{a}=\overrightarrow{u}|\overrightarrow{p}|cos\sigma=\cfrac{\overrightarrow{u} \cdot \overrightarrow{p}}{|\overrightarrow{u}||\overrightarrow{p}|}|\overrightarrow{p}|\overrightarrow{u}=(\overrightarrow{u} \cdot \overrightarrow{p})\overrightarrow{u} =\overrightarrow{u}(\overrightarrow{u} \cdot \overrightarrow{p}) \space \space\space\space(2) a =u p cosσ=u ∣∣p u p p u =(u p )u =u (u p )    (2)
通过拆开和合并 ( 2 ) (2) (2)写成向量的形式可以得到:
a → = u → ( u → ⋅ p → ) = u → u → T p →      ( 3 ) \overrightarrow{a}=\overrightarrow{u}(\overrightarrow{u} \cdot \overrightarrow{p})=\overrightarrow{u}\overrightarrow{u}^T\overrightarrow{p} \space \space\space\space(3) a =u (u p )=u u Tp     (3)

对于垂直于向量 u → \overrightarrow{u} u 的分量 b → \overrightarrow{b} b
b → = p → − a → = ( 1 − u → u → T ) p →      ( 4 ) \overrightarrow{b}=\overrightarrow{p}-\overrightarrow{a}=(1-\overrightarrow{u}\overrightarrow{u}^T)\overrightarrow{p} \space \space\space\space(4) b =p a =(1u u T)p     (4)

因为从向量 b → \overrightarrow{b} b 旋转到向量 b ′ → \overrightarrow{b'} b ,需要另一个向量 c → \overrightarrow{c} c ,它是垂直于向量 u → \overrightarrow{u} u 和向量 p → \overrightarrow{p} p 所在的平面,且它的长度和向量 b → \overrightarrow{b} b 一样。
满足: ∣ b → ∣ = ∣ c → ∣ |\overrightarrow{b}|=|\overrightarrow{c}| b =c
通过三角行垂直公式得到:
∣ b → ∣ = ∣ u → ∣ ∣ p → ∣ s i n σ      ( 5 ) |\overrightarrow{b}|=|\overrightarrow{u}||\overrightarrow{p}|sin\sigma \space \space\space\space(5) b =u ∣∣p sinσ    (5)
通过叉乘,可以设计向量 c → \overrightarrow{c} c :
c → = u → × p → = ( ∣ u → ∣ ∣ p → ∣ s i n σ ) c → ∣ c → ∣ = ( ∣ u → ∣ ∣ p → ∣ s i n σ ) n →      ( 6 ) \overrightarrow{c} = \overrightarrow{u} \times \overrightarrow{p} =(|\overrightarrow{u}|| \overrightarrow{p}|sin\sigma) \cfrac{\overrightarrow{c}}{|\overrightarrow{c}|} = (|\overrightarrow{u}|| \overrightarrow{p}|sin\sigma)\overrightarrow{n} \space \space\space\space(6) c =u ×p =(u ∣∣p sinσ)c c =(u ∣∣p sinσ)n     (6)
其中 n → = c → ∣ c → ∣ \overrightarrow{n}=\cfrac{\overrightarrow{c}}{|\overrightarrow{c}|} n =c c 单位向量。因此 ∣ c → ∣ = ∣ u → ∣ ∣ p → ∣ s i n σ |\overrightarrow{c}| =|\overrightarrow{u}||\overrightarrow{p}|sin\sigma c =u ∣∣p sinσ
通过计算它们的模,发现它们是相等的。
上面的公式 ( 6 ) (6) (6),将在下一篇blog介绍。后面更新它们的链接

因此可以得到 p → \overrightarrow{p} p 旋转后得到的向量 p ′ → \overrightarrow{p'} p 为:
b ′ → = b → c o s θ + c → s i n θ      ( 7 ) \overrightarrow{b'}=\overrightarrow{b}cos\theta+\overrightarrow{c}sin\theta \space \space\space\space(7) b =b cosθ+c sinθ    (7)
然后通过向量加法
p ′ → = a → + b ′ → = a → + b → c o s θ + c → s i n θ = u → u → T p → + ( 1 − u → u → T ) p → c o s θ + ( u → × p → ) s i n θ = [ I c o s θ + ( 1 − c o s θ ) u → u → T + u → × s i n θ ] p →      ( 8 ) \overrightarrow{p'}=\overrightarrow{a} + \overrightarrow{b'}= \overrightarrow{a} + \overrightarrow{b}cos\theta+\overrightarrow{c}sin\theta \\ = \overrightarrow{u}\overrightarrow{u}^T\overrightarrow{p}+(1-\overrightarrow{u}\overrightarrow{u}^T)\overrightarrow{p}cos\theta+(\overrightarrow{u} \times \overrightarrow{p})sin\theta \\ = [Icos\theta+(1-cos\theta)\overrightarrow{u}\overrightarrow{u}^T+\overrightarrow{u} \times sin\theta]\overrightarrow{p} \space \space\space\space(8) p =a +b =a +b cosθ+c sinθ=u u Tp +(1u u T)p cosθ+(u ×p )sinθ=[Icosθ+(1cosθ)u u T+u ×sinθ]p     (8)

通过公式 ( 8 ) (8) (8)可以得到一个向量 p → \overrightarrow{p} p 围绕向量 u → \overrightarrow{u} u 得到旋转 θ \theta θ新的向量 p ′ → \overrightarrow{p'} p 的公式,其中 R = I c o s θ + ( 1 − c o s θ ) u → u → T + u → × s i n θ R=Icos\theta+(1-cos\theta)\overrightarrow{u}\overrightarrow{u}^T+\overrightarrow{u} \times sin\theta R=Icosθ+(1cosθ)u u T+u ×sinθ。它也是Rodrigues公式。
还有一种特殊情况,如果 u → = [ 0 , 0 , 0 ] T \overrightarrow{u}=[0,0,0]^T u =[0,0,0]T,得到的旋转矩阵为 I I I

上面的公式也可以反推(因为它不太常用),后面再补上。

参考资料为:
Vector Representation of rotations的论文。

你可能感兴趣的:(矩阵,线性代数,机器学习)