罗德里格斯公式附图推导,理解

本文详细解析了罗德里格斯公式的推导过程,从旋转矩阵、旋转向量到向量叉积的基础概念入手,逐步推导出公式并解释其含义。同时,介绍了公式在小角度旋转下的线性近似表达,以及通过指数映射的极限方式简洁推导公式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

罗德里格斯公式,将3D旋转表达成了 ( n ∧ , θ ) (n^{\wedge}, \theta) (n,θ)的形式,一般记作 ω = θ ∗ n = ( ω x , ω y , ω z ) T \omega = \theta * n = \left(\omega_{x}, \omega_{y}, \omega_{z}\right)^{T} ω=θn=(ωx,ωy,ωz)T
两种表达:
R = [ I + ( 1 − cos ⁡ ( θ ) ) ∗ N 2 + sin ⁡ ( θ ) ∗ N ] R = [I+(1-\cos (\theta)) * N^{2}+\sin (\theta) * N] R=[I+(1cos(θ))N2+sin(θ)N]

R = cos ⁡ ( θ ) ∗ I + ( 1 − cos ⁡ ( θ ) ) ∗ n ∗ n T + sin ⁡ ( θ ) ∗ n R = \cos (\theta) * I+(1-\cos (\theta)) * n * n^{T}+\sin (\theta) * n R=cos(θ)I+(1cos(θ))nnT+sin(θ)n

一,基础准备

1. 旋转矩阵

R = [ r x x r x y r x z r y x r y y r y z r z x r z y r z z ] R=\left[\begin{array}{lll}{r_{x x}} & {r_{x y}} & {r_{x z}} \\ {r_{y x}} & {r_{y y}} & {r_{y z}} \\ {r_{z x}} & {r_{z y}} & {r_{z z}}\end{array}\right] R= rxxryxrzxrxyryyrzyrxzryzrzz
R矩阵是标准正交矩阵,用于基向量之间的刚性变换。满足

  • R T R = R − 1 R = E R^{T} R=R^{-1} R=E RTR=R1R=E
  • ∣ R ∣ = 1 |R|=1 R=1

2. 旋转向量

用一个单位向量n和旋转角度 θ \theta θ来表示旋转的过程。默认向量是列向量

n = [ n 1 n 2 n 3 ] n=\left[\begin{array}{l}{n_{1}} \\ {n_{2}} \\ {n_{3}}\end{array}\right] n= n1n2n3

  • n 1 2 + n 2 2 + n 3 2 = 1 n_{1}^{2}+n_{2}^{2}+n_{3}^{2}=1 n12+n22+n32=1

3. 向量叉积

在这里插入图片描述
图片来源:https://www.mathsisfun.com/algebra/vectors-cross-product.html
两个向量的叉积可以写成一个反对称矩阵与一个向量的点积
a = [ a 1 a 2 a 3 ] a=\left[\begin{array}{l}{a_{1}} \\ {a_{2}} \\ {a_{3}}\end{array}\right] a= a1a2a3

a ∧ = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] = A a^{\wedge}=\left[\begin{array}{ccc}{0} & {-a_{3}} & {a_{2}} \\ {a_{3}} & {0} & {-a_{1}} \\ {-a_{2}} & {a_{1}} & {0}\end{array}\right]=A a= 0a3a2a30a1a2a10 =A

a × b = [ a 2 b 3 − a 3 b 2 − a 1 b 3 + a 3 b 1 a 1 b 2 − a 2 b 1 ] = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] ∗ [ b 1 b 2 b 3 ] = A ∗ b a \times b=\left[\begin{array}{c}{a_{2} b_{3}-a_{3} b_{2}} \\ {-a_{1} b_{3}+a_{3} b_{1}} \\ {a_{1} b_{2}-a_{2} b_{1}}\end{array}\right]=\left[\begin{array}{ccc}{0} & {-a_{3}} & {a_{2}} \\ {a_{3}} & {0} & {-a_{1}} \\ {-a_{2}} & {a_{1}} & {0}\end{array}\right] *\left[\begin{array}{l}{b_{1}} \\ {b_{2}} \\ {b_{3}}\end{array}\right]=A * b a×b= a2b3a3b2a1b3+a3b1a1b2a2b1 = 0a3a2a30a1a2a10 b1b2b3 =Ab
所以两个向量叉积可以写成一个反对称矩阵与向量的点积 乘积
a × b = a ∧ ∗ b a \times b=a^{\wedge} * b a×b=ab

二,公式推导

1.符号说明与图例

名称符号
旋转向量 n n n
旋转向量的反对称矩阵形式 n ∧ o r N n^{\wedge} or N norN
旋转角度 θ \theta θ
旋转点P
OP向量 v v v
v旋转 θ \theta θ后的向量 v ′ v^{'} v
v在旋转平面的投影 v ⊥ v_{\perp} v
v在旋转轴的投影 v ∥ v_{\parallel} v
v旋转 θ \theta θ后旋转平面的分量 v ⊥ ′ v_{\perp}^{'} v
v旋转 θ \theta θ后在n的分量 v ∥ ′ v_{\parallel}^{'} v
w向量,垂直与n向量与v向量的平面, w与n向量与v向量都正交
v方向的单位向量$\frac{v}{\leftv\right

在这里插入图片描述

2. 公式推导

空间中的一个点P,构成向量 v = O P → v=\overrightarrow{O P} v=OP ,则分解后有

v = v ⊥ + v ∥ v = v_{\perp} + v_{\parallel} v=v+v
同理旋转后的向量 v ′ = v ⊥ ′ + v ∥ ′ v' = v_{\perp}^{'} + v_{\parallel}^{'} v=v+v
显然 v ∥ = v ∥ ′ v_{\parallel} = v_{\parallel}^{'} v=v
所以 v ′ = v ⊥ ′ + v ∥ v^{'} = v_{\perp}^{'} + v_{\parallel} v=v+v
定义一个向量w
w = n × v w=n \times v w=n×v
根据几何意义,w的模长就是黄色阴影的的面积。即
∣ w ∣ = ∣ n × v ∣ |w|=|n \times v| w=n×v
这部分面积也可以看成平行四边形面积公式底乘以高,因为n向量的模长是1,高就是 ∣ v ⊥ ∣ |v_{\perp}| v
所以 ∣ w ∣ = ∣ n × v ∣ = ∣ v ⊥ ∣ |w|=|n \times v|=|v_{\perp}| w=n×v=v
而由于 n × w n \times w n×w v ⊥ v_{\perp} v方向相反
至此我们可以用n与v向量表示出v的两个投影的分量,即
v ⊥ = − n × w = − n × ( n × v ) v_{\perp}=-n \times w=-n \times(n \times v) v=n×w=n×(n×v)

v ∥ = v − v ⊥ = v + n × ( n × v ) v_{\parallel}=v-v_{\perp}=v+n \times(n \times v) v=vv=v+n×(n×v)
我们现在讲v’表示出来
v ⊥ ′ = ∣ v ⊥ ∣ ∗ [ cos ⁡ ( θ ) ∗ v ⊥ ∣ v ⊥ ∣ + sin ⁡ ( θ ) ∗ w ∣ w ∣ ] = cos ⁡ ( θ ) ∗ v ⊥ + sin ⁡ ( θ ) ∗ ∣ v ⊥ ∣ ∗ w ∣ w ∣ = cos ⁡ ( θ ) ∗ v ⊥ + sin ⁡ ( θ ) ∗ w \begin{aligned} v_{\perp}^{\prime} &=\left|v_{\perp}\right| *\left[\cos (\theta) * \frac{v_{\perp}}{\left|v_{\perp}\right|}+\sin (\theta) * \frac{w}{|w|}\right] \\ &=\cos (\theta) * v_{\perp}+\sin (\theta) *\left|v_{\perp}\right| * \frac{w}{|w|} \\ &=\cos (\theta) * v_{\perp}+\sin (\theta) * w \end{aligned} v=v[cos(θ)vv+sin(θ)ww]=cos(θ)v+sin(θ)vww=cos(θ)v+sin(θ)w

v ⊥ ′ = cos ⁡ ( θ ) ∗ v ⊥ + sin ⁡ ( θ ) ∗ w \begin{aligned} v_{\perp}^{\prime} = \cos (\theta) * v_{\perp}+\sin (\theta) * w \end{aligned} v=cos(θ)v+sin(θ)w
将上式子带入
v ′ = v / / + v ⊥ ′ = ( v − v ⊥ ) + cos ⁡ ( θ ) ∗ v ⊥ + sin ⁡ ( θ ) ∗ w = v + ( cos ⁡ ( θ ) − 1 ) ∗ v ⊥ + sin ⁡ ( θ ) ∗ w = v + ( 1 − cos ⁡ ( θ ) ) ∗ n × ( n × v ) + sin ⁡ ( θ ) ∗ n × v = v + ( 1 − cos ⁡ ( θ ) ) ∗ n ∧ ∗ ( n ∧ ∗ v ) + sin ⁡ ( θ ) ∗ n ∧ ∗ v = v + ( 1 − cos ⁡ ( θ ) ) ∗ N ∗ N ∗ v + sin ⁡ ( θ ) ∗ N ∗ v = v + ( 1 − cos ⁡ ( θ ) ) ∗ N 2 ∗ v + sin ⁡ ( θ ) ∗ N ∗ v = [ I + ( 1 − cos ⁡ ( θ ) ) ∗ N 2 + sin ⁡ ( θ ) ∗ N ] ∗ v \begin{aligned} v^{\prime} &=v_{/ /}+v_{\perp}^{\prime} \\ &=\left(v-v_{\perp}\right)+\cos (\theta) * v_{\perp}+\sin (\theta) * w \\ &=v+(\cos (\theta)-1) * v_{\perp}+\sin (\theta) * w \\ &=v+(1-\cos (\theta)) * n \times(n \times v)+\sin (\theta) * n \times v \\ &=v+(1-\cos (\theta)) * n^{\wedge} * (n^{\wedge} * v)+\sin (\theta) * n^{\wedge} * v \\ &=v+(1-\cos (\theta)) * N * N * v+\sin (\theta) * N * v \\ &=v+(1-\cos (\theta)) * N^{2} * v+\sin (\theta) * N * v \\ &=\left[I+(1-\cos (\theta)) * N^{2}+\sin (\theta) * N\right] * v \end{aligned} v=v//+v=(vv)+cos(θ)v+sin(θ)w=v+(cos(θ)1)v+sin(θ)w=v+(1cos(θ))n×(n×v)+sin(θ)n×v=v+(1cos(θ))n(nv)+sin(θ)nv=v+(1cos(θ))NNv+sin(θ)Nv=v+(1cos(θ))N2v+sin(θ)Nv=[I+(1cos(θ))N2+sin(θ)N]v

至此我们就可以得到:
v ′ = [ I + ( 1 − cos ⁡ ( θ ) ) ∗ N 2 + sin ⁡ ( θ ) ∗ N ] ∗ v v^{'} = [I+(1-\cos (\theta)) * N^{2}+\sin (\theta) * N]* v v=[I+(1cos(θ))N2+sin(θ)N]v
所以 R = [ I + ( 1 − cos ⁡ ( θ ) ) ∗ N 2 + sin ⁡ ( θ ) ∗ N ] R = [I+(1-\cos (\theta)) * N^{2}+\sin (\theta) * N] R=[I+(1cos(θ))N2+sin(θ)N]
有些地方习惯用n来表示,那么继续推导
n ∗ n T = [ n 1 2 n 1 n 2 n 1 n 3 n 1 n 2 n 2 2 n 2 n 3 n 1 n 3 n 2 n 3 n 3 2 ] n * n^{T}=\left[\begin{array}{ccc}{n_{1}^{2}} & {n_{1} n_{2}} & {n_{1} n_{3}} \\ {n_{1} n_{2}} & {n_{2}^{2}} & {n_{2} n_{3}} \\ {n_{1} n_{3}} & {n_{2} n_{3}} & {n_{3}^{2}}\end{array}\right] nnT= n12n1n2n1n3n1n2n22n2n3n1n3n2n3n32

n ∧ = N = [ 0 − n 3 n 2 n 3 0 − n 1 − n 2 n 1 0 ] n^{\wedge}=N=\left[\begin{array}{ccc}{0} & {-n_{3}} & {n_{2}} \\ {n_{3}} & {0} & {-n_{1}} \\ {-n_{2}} & {n_{1}} & {0}\end{array}\right] n=N= 0n3n2n30n1n2n10

N ∗ N = [ − n 2 2 − n 3 2 n 1 n 2 n 1 n 3 n 1 n 2 − n 1 2 − n 3 2 n 2 n 3 n 1 n 3 n 2 n 3 − n 1 2 − n 2 2 ] N * N=\left[\begin{array}{ccc}{-n_{2}^{2}-n_{3}^{2}} & {n_{1} n_{2}} & {n_{1} n_{3}} \\ {n_{1} n_{2}} & {-n_{1}^{2}-n_{3}^{2}} & {n_{2} n_{3}} \\ {n_{1} n_{3}} & {n_{2} n_{3}} & {-n_{1}^{2}-n_{2}^{2}}\end{array}\right] NN= n22n32n1n2n1n3n1n2n12n32n2n3n1n3n2n3n12n22

n ∗ n T = I + N ∗ N n * n^{T}=I+N * N nnT=I+NN

N ∗ N = n ∗ n T − I N * N=n * n^{T}-I NN=nnTI
带入 R = [ I + ( 1 − cos ⁡ ( θ ) ) ∗ N 2 + sin ⁡ ( θ ) ∗ N ] R = [I+(1-\cos (\theta)) * N^{2}+\sin (\theta) * N] R=[I+(1cos(θ))N2+sin(θ)N]可以得到

R = cos ⁡ ( θ ) ∗ I + ( 1 − cos ⁡ ( θ ) ) ∗ n ∗ n T + sin ⁡ ( θ ) ∗ n R = \cos (\theta) * I+(1-\cos (\theta)) * n * n^{T}+\sin (\theta) * n R=cos(θ)I+(1cos(θ))nnT+sin(θ)n

三,公式理解和深入

罗德里格斯公式,将3D旋转表达成了 ( n ∧ , θ ) (n^{\wedge}, \theta) (n,θ)的形式,一般记作 ω = θ ∗ n = ( ω x , ω y , ω z ) T \omega = \theta * n = \left(\omega_{x}, \omega_{y}, \omega_{z}\right)^{T} ω=θn=(ωx,ωy,ωz)T

这是一种非常简洁和简单的表示形式,但是这不是一个奇异的变换。主要原因有两点

  • 旋转 θ \theta θ和旋转 θ + 2 π \theta + 2\pi θ+2π表达了相同的旋转
  • ( n ∧ , θ ) (n^{\wedge}, \theta) (n,θ) ( − n ∧ , − θ ) (-n^{\wedge}, -\theta) (n,θ)也表达了相同的旋转
    但是这样的好处在于,对于非常小的旋转,罗德里格斯公式可以表示成
    R ( ω ) = R ( n ∧ , θ ) ≈ I + s i n ( θ ) ∗ N ≈ I + θ ∗ N = [ 1 − θ ∗ n 3 θ ∗ n 2 θ ∗ n 3 1 − θ ∗ n 1 − θ ∗ n 2 θ ∗ n 1 1 ] = [ 1 − ω z ω y ω z 1 ω x − ω y ω x 1 ] R(\omega) = R(n^{\wedge}, \theta) \approx I + sin(\theta) * N \\ \approx I + \theta * N \\=\left[\begin{array}{ccc}{1} & {-\theta * n_{3}} & {\theta * n_{2}} \\ {\theta *n_{3}} & {1} & {-\theta * n_{1}} \\ {-\theta * n_{2}} & {\theta *n_{1}} & {1}\end{array}\right] \\\\ = \left[\begin{array}{ccc}{1} & {-\omega_{z} } & {\omega_{y}} \\ {\omega_{z} } & {1} & {\omega_{x} } \\ {-\omega_{y} } & {\omega_{x} } & {1}\end{array}\right] R(ω)=R(n,θ)I+sin(θ)NI+θN= 1θn3θn2θn31θn1θn2θn11 = 1ωzωyωz1ωxωyωx1
    这个式子给出了,非常漂亮的的 ω \omega ω与R之间的线性的关系。
    我们也可以写成, R v ≈ v + w × v Rv \approx v + w \times v Rvv+w×v,这样我们只需要简单的求导,就可以得到v
    ∂ R v ∂ ω = − v = [ 0 z − y − z 0 x y − x 0 ] \frac{\partial \boldsymbol{R} \boldsymbol{v}}{\partial \boldsymbol{\omega}}=-{v}=\left[\begin{array}{ccc}{0} & {z} & {-y} \\ {-z} & {0} & {x} \\ {y} & {-x} & {0}\end{array}\right] ωRv=v= 0zyz0xyx0

四,极限的方式简洁推导罗德里格斯公式

叫做exponential twist(Murray, Li, and Sastry 1994), 旋转 θ \theta θ角度,等价于旋转k次 θ / k \theta/k θ/k角度。
R ( n ∧ , θ ) = lim ⁡ k → ∞ ( I + 1 k ( θ ∗ N ) ) k = e θ ∗ N R(n^{\wedge}, \theta) = \lim _{k \rightarrow \infty}\left(\boldsymbol{I}+\frac{1}{k}(\theta *N)\right)^{k} = e^{\theta *N} R(n,θ)=klim(I+k1(θ))k=eθN

e θ ∗ N = I + ( θ ∗ N ) + ( θ ∗ N ) 2 2 + ( θ ∗ N ) 3 3 ! + . . . e^{\theta *N} = I + (\theta *N) + \frac{(\theta *N)^{2}}{2} + \frac{(\theta *N)^{3}}{3!} + ... eθN=I+(θN)+2(θN)2+3!(θN)3+...
因为 N k + 2 = − N k , k > 0 N^{k+2} = -N^{k}, k>0 Nk+2=Nk,k>0
所以
e θ ∗ N = I + ( θ − θ 3 3 ! + . . . ) ∗ N + ( θ 2 2 − θ 3 4 ! + . . . ) ∗ N 2 = I + s i n θ ∗ N + ( 1 − c o s θ ) ∗ N 2 e^{\theta *N} = I + (\theta - \frac{\theta^{3}}{3!}+...)*N + (\frac{\theta^{2}}{2} - \frac{\theta^{3}}{4!}+...)*N^{2} \\ = I+sin{\theta}*N + (1-cos{\theta})*N^{2} eθN=I+(θ3!θ3+...)N+(2θ24!θ3+...)N2=I+sinθN+(1cosθ)N2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值