• 四元数、罗德里格斯公式、欧拉角、旋转矩阵推导和资料


    写在前面

    1、本文内容
    四元数、罗德里格斯公式、欧拉角、旋转矩阵推导和资料
    2、转载请注明出处:
    https://blog.csdn.net/qq_41102371/article/details/126002167

    资料

    四元数
    Understanding Quaternions 中文翻译《理解四元数》 https://www.qiujiawei.com/understanding-quaternions/
    http://mars.cs.umn.edu/tr/reports/Trawny05b.pdf
    几种三维空间旋转的表达方式转换
    三维旋转:欧拉角、四元数、旋转矩阵、轴角之间的转换 https://zhuanlan.zhihu.com/p/45404840
    彻底搞懂“旋转矩阵/欧拉角/四元数”,让你体会三维旋转之美 https://blog.csdn.net/weixin_45590473/article/details/122884112
    展示欧拉角与四元数动态变换关系的网站
    https://quaternions.online/

    罗德里格斯公式

    https://en.wikipedia.org/wiki/Rodrigues’_rotation_formula
    罗德里格斯公式(Rodrigues Formula) https://blog.csdn.net/weixin_40215443/article/details/123950141
    二维xy坐标旋转 https://blog.csdn.net/qq_41102371/article/details/116245483#t4

    推导

    先放这,有空来推一遍

    几种表达方式

    K K K k k k的叉乘矩阵,即 K = k ∧ \mathbf{K}=\mathbf{k}^{\land} K=k,( k \mathbf{k} k的叉乘矩阵也可表示为 k × \mathbf{k}_{\times} k×)
    1、
    R = I + ( 1 − cos ⁡ θ ) K 2 + ( sin ⁡ θ ) K = I + ( 1 − cos ⁡ θ ) [ k ∧ ] 2 + ( sin ⁡ θ ) k ∧

    R=I+(1cosθ)K2+(sinθ)K=I+(1cosθ)[k]2+(sinθ)k" role="presentation" style="position: relative;">R=I+(1cosθ)K2+(sinθ)K=I+(1cosθ)[k]2+(sinθ)k
    R=I+(1cosθ)K2+(sinθ)K=I+(1cosθ)[k]2+(sinθ)k
    2、
    K 2 = k ∧ k ∧ = k k T − I \mathbf{K}^2=\mathbf{k}^{\land}\mathbf{k}^{\land}=\mathbf{k}\mathbf{k}^T-\mathbf{I} K2=kk=kkTI
    可得
    R = I + ( 1 − cos ⁡ θ ) ( k k T − I ) + ( sin ⁡ θ ) k ∧ = cos ⁡ θ I + ( 1 − cos ⁡ θ ) k k T + ( sin ⁡ θ ) k ∧
    R=I+(1cosθ)(kkTI)+(sinθ)k=cosθI+(1cosθ)kkT+(sinθ)k" role="presentation" style="position: relative;">R=I+(1cosθ)(kkTI)+(sinθ)k=cosθI+(1cosθ)kkT+(sinθ)k
    R=I+(1cosθ)(kkTI)+(sinθ)k=cosθI+(1cosθ)kkT+(sinθ)k

    3、
    高博的14讲中推导了指数映射
    在这里插入图片描述
    R = e x p ( θ k ∧ ) = cos ⁡ θ I + ( 1 − cos ⁡ θ ) k k T + ( sin ⁡ θ ) k ∧ \mathbf{R}=exp(\theta \mathbf{k}^{\land})=\cos\theta\mathbf{I}+(1-\cos\theta)\mathbf{k}\mathbf{k}^T+(\sin\theta)\mathbf{k}^{\land} R=exp(θk)=cosθI+(1cosθ)kkT+(sinθ)k

    四元数转旋转矩阵

    根据http://mars.cs.umn.edu/tr/reports/Trawny05b.pdf,四元数转旋转矩阵为:
    在这里插入图片描述
    在这里插入图片描述

    G L C ( q ˉ ) = ( 2 q 4 2 − 1 ) I 3 × 3 − 2 q 4 [ q × ] + 2 q q T = ( 2 q 4 2 − 1 ) I 3 × 3 − 2 q 4 [ q × ] + 2 [ q × ] 2 + 2 ∣ q ∣ 2 ⋅ I 3 × 3 = ( 2 q 4 2 + 2 ∣ q ∣ 2 − 1 ) I 3 × 3 − 2 q 4 [ q × ] + 2 [ q × ] 2 = ( 2 q 4 2 + 2 ( q 1 2 + q 2 2 + q 3 2 ) − 1 ) I 3 × 3 − 2 q 4 [ q × ] + 2 [ q × ] 2 = ( 2 − 1 ) I 3 × 3 − 2 q 4 [ q × ] + 2 [ q × ] 2 = I 3 × 3 − 2 q 4 [ q × ] + 2 [ q × ] 2

    GLC(q¯)=(2q421)I3×32q4[q×]+2qqT=(2q421)I3×32q4[q×]+2[q×]2+2|q|2I3×3=(2q42+2|q|21)I3×32q4[q×]+2[q×]2=(2q42+2(q12+q22+q32)1)I3×32q4[q×]+2[q×]2=(21)I3×32q4[q×]+2[q×]2=I3×32q4[q×]+2[q×]2" role="presentation" style="position: relative;">GLC(q¯)=(2q421)I3×32q4[q×]+2qqT=(2q421)I3×32q4[q×]+2[q×]2+2|q|2I3×3=(2q42+2|q|21)I3×32q4[q×]+2[q×]2=(2q42+2(q12+q22+q32)1)I3×32q4[q×]+2[q×]2=(21)I3×32q4[q×]+2[q×]2=I3×32q4[q×]+2[q×]2
    GLC(qˉ)=(2q421)I3×32q4[q×]+2qqT=(2q421)I3×32q4[q×]+2[q×]2+2∣q2I3×3=(2q42+2∣q21)I3×32q4[q×]+2[q×]2=(2q42+2(q12+q22+q32)1)I3×32q4[q×]+2[q×]2=(21)I3×32q4[q×]+2[q×]2=I3×32q4[q×]+2[q×]2
    其中 q ˉ = [ q q 4 ] = [ q 1 , q 2 , q 3 , q 4 ] T \bar{q}=
    [qq4]" role="presentation" style="position: relative;">[qq4]
    =[q_1,q_2,q_3,q_4]^T
    qˉ=[qq4]=[q1,q2,q3,q4]T
    q = [ q 1 , q 2 , q 3 ] T \mathbf{q}=[q_1,q_2,q_3]^T q=[q1,q2,q3]T q 1 2 + q 2 2 + q 3 2 + q 4 2 = 1 q_1^2+q_2^2+q_3^2+q_4^2=1 q12+q22+q32+q42=1

    G L  ⁣ R = [ 1 − 2 q 2 2 − 2 q 3 2 2 ( q 1 q 2 + q 3 q 4 ) 2 ( q 1 q 3 − q 2 q 4 ) 2 ( q 1 q 2 − q 3 q 4 ) 1 − 2 q 1 2 − 2 q 3 2 2 ( q 2 q 3 + q 1 q 4 ) 2 ( q 1 q 3 + q 2 q 4 ) 2 ( q 2 q 3 − q 1 q 4 ) 1 − 2 q 1 2 − 2 q 2 2 ] {}_G^L\!R=
    [12q222q322(q1q2+q3q4)2(q1q3q2q4)2(q1q2q3q4)12q122q322(q2q3+q1q4)2(q1q3+q2q4)2(q2q3q1q4)12q122q22]" role="presentation" style="position: relative;">[12q222q322(q1q2+q3q4)2(q1q3q2q4)2(q1q2q3q4)12q122q322(q2q3+q1q4)2(q1q3+q2q4)2(q2q3q1q4)12q122q22]
    GLR= 12q222q322(q1q2q3q4)2(q1q3+q2q4)2(q1q2+q3q4)12q122q322(q2q3q1q4)2(q1q3q2q4)2(q2q3+q1q4)12q122q22

    即将世界坐标系下的点 P G P^G PG旋转到局部坐标系下的点 P L P^L PL
    P L = G L  ⁣ R P G P^L={}_G^L\!R P^G PL=GLRPG

    三维旋转:欧拉角、四元数、旋转矩阵、轴角之间的转换 https://zhuanlan.zhihu.com/p/45404840中是将局部坐标系下的点 P L P^L PL转换到世界坐标系下的 P G P^G PG
    L G  ⁣ R = [ 1 − 2 q 2 2 − 2 q 3 2 2 ( q 1 q 2 − q 3 q 4 ) 2 ( q 1 q 3 + q 2 q 4 ) 2 ( q 1 q 2 + q 3 q 4 ) 1 − 2 q 1 2 − 2 q 3 2 2 ( q 2 q 3 − q 1 q 4 ) 2 ( q 1 q 3 − q 2 q 4 ) 2 ( q 2 q 3 + q 1 q 4 ) 1 − 2 q 1 2 − 2 q 2 2 ] {}_L^G\!R=
    [12q222q322(q1q2q3q4)2(q1q3+q2q4)2(q1q2+q3q4)12q122q322(q2q3q1q4)2(q1q3q2q4)2(q2q3+q1q4)12q122q22]" role="presentation" style="position: relative;">[12q222q322(q1q2q3q4)2(q1q3+q2q4)2(q1q2+q3q4)12q122q322(q2q3q1q4)2(q1q3q2q4)2(q2q3+q1q4)12q122q22]
    LGR= 12q222q322(q1q2+q3q4)2(q1q3q2q4)2(q1q2q3q4)12q122q322(q2q3+q1q4)2(q1q3+q2q4)2(q2q3q1q4)12q122q22

    P G = L G  ⁣ R P L P^G={}_L^G\!R P^L PG=LGRPL
    这正好满足:
    G L  ⁣ R = L G  ⁣ R T ( G L  ⁣ R = L G  ⁣ R − 1 ) {}_G^L\!R ={{}_L^G\!R}^T({}_G^L\!R ={{}_L^G\!R}^{-1}) GLR=LGRT(GLR=LGR1)

    近似

    根据http://mars.cs.umn.edu/tr/reports/Trawny05b.pdf原文当 δ q ˉ \delta\bar{q} δqˉ非常小时
    在这里插入图片描述
    以下为个人理解的推导
    G L C ( q ˉ ) = ( 2 q 4 2 − 1 ) I 3 × 3 − 2 q 4 [ q × ] + 2 q q T ≈ ( 2 × 1 2 − 1 ) I 3 × 3 − 2 × 1 [ 1 2 δ θ × ] + 2 × 0 3 × 3 = I 3 × 3 − [ δ θ × ]

    GLC(q¯)=(2q421)I3×32q4[q×]+2qqT(2×121)I3×32×1[12δθ×]+2×03×3=I3×3[δθ×]" role="presentation" style="position: relative;">GLC(q¯)=(2q421)I3×32q4[q×]+2qqT(2×121)I3×32×1[12δθ×]+2×03×3=I3×3[δθ×]
    GLC(qˉ)=(2q421)I3×32q4[q×]+2qqT(2×121)I3×32×1[21δθ×]+2×03×3=I3×3[δθ×]
    其中 q q T ≈ 0 3 × 3 qq^T\approx0_{3\times3} qqT03×3

    四元数与轴角

    还是参考http://mars.cs.umn.edu/tr/reports/Trawny05b.pdf

    q ˉ = [ q q 4 ] = [ q 1 q 2 q 3 q 4 ] = [ k x sin ⁡ ( θ / 2 ) k y sin ⁡ ( θ / 2 ) k z sin ⁡ ( θ / 2 ) cos ⁡ ( θ / 2 ) ] = [ k ^ sin ⁡ ( θ / 2 ) cos ⁡ ( θ / 2 ) ] , k ^ = [ k x , k y , k z ] T , q 4 = cos ⁡ ( θ / 2 ) \bar{q}=

    [qq4]" role="presentation" style="position: relative;">[qq4]
    =
    [q1q2q3q4]" role="presentation" style="position: relative;">[q1q2q3q4]
    =
    [kxsin(θ/2)kysin(θ/2)kzsin(θ/2)cos(θ/2)]" role="presentation" style="position: relative;">[kxsin(θ/2)kysin(θ/2)kzsin(θ/2)cos(θ/2)]
    =
    [k^sin(θ/2)cos(θ/2)]" role="presentation" style="position: relative;">[k^sin(θ/2)cos(θ/2)]
    ,\hat{\mathbf{k}}=[k_x,k_y,k_z]^T,q_4=\cos(\theta/2) qˉ=[qq4]= q1q2q3q4 = kxsin(θ/2)kysin(θ/2)kzsin(θ/2)cos(θ/2) =[k^sin(θ/2)cos(θ/2)],k^=[kx,ky,kz]T,q4=cos(θ/2)

    参考

    文中已列出

    如有错漏,敬请指正
    --------------------------------------------------------------------------------------------202207

  • 相关阅读:
    [自研开源] MyData 数据集成之数据过滤 v0.7.2
    品牌、服务商和抖音电商:透视新兴的电商“铁三角”
    Memcached vs Redis——Java项目缓存选择
    地推团队怎么接一手app拉新项目?这几个接单平台可以试试看
    SQLAlchemy 连接池
    Linux C 应用编程学习笔记——(3)深入探究文件 I/O
    Shader 中 SubShader Tags Pass的理解
    Android seekbar使用
    代理IP与Socks5代理:跨界电商智能爬虫的引擎与安全壁垒
    CVE-2021-44228 Log4j 远程代码执行漏洞——原理
  • 原文地址:https://blog.csdn.net/qq_41102371/article/details/126002167