前言

之前看了高博的《视觉SLAM十四讲》,里面有一段关于罗德里格斯公式,但是高博没有给出具体推导。然后我查了很多博主,都没有给出怎么推到
R = cos ⁡ θ I + ( 1 − cos ⁡ θ ) n n T + sin ⁡ θ n ∧ \boldsymbol{R}=\cos \theta \mathbf{I}+(1-\cos \theta) \boldsymbol{n} \boldsymbol{n}^{T}+\sin \theta \boldsymbol{n}^{\wedge} R=cosθI+(1−cosθ)nnT+sinθn∧
怎么也没有弄懂 cos ⁡ θ I \cos \theta \mathbf{I} cosθI 是怎么来的。
因此我查了查维基给出的定义,然后自己再推一遍。
PS:潜水csdn多年,学到了不少东西,这篇是我的第一篇博客,分享些我自己的学习心得,如有错误的地方,请大家指正,谢谢大家。

旋转向量

旋转向量的概念

任意旋转都可以用一个旋转轴一个旋转角来表示。

假设有一个旋转轴为 n \boldsymbol{n} n,角度为 θ \theta θ 的旋转,则对应的旋转向量为:
θ n \theta \boldsymbol{n} θn

旋转矩阵和旋转向量的关系

对于旋转矩阵 R \boldsymbol{R} R 和旋转向量 θ n \theta \boldsymbol{n} θn, 他们的关系有:
R = cos ⁡ θ I + ( 1 − cos ⁡ θ ) n n T + sin ⁡ θ n ∧ \boldsymbol{R}=\cos \theta \mathbf{I}+(1-\cos \theta) \boldsymbol{n} \boldsymbol{n}^{T}+\sin \theta \boldsymbol{n}^{\wedge} R=cosθI+(1−cosθ)nnT+sinθn∧

符号 ∧ \wedge ∧是向量的反对称的转换符号:
n = [ a b c ] , 则 n ∧ = [ 0 − c b c 0 − a − b a 0 ] \boldsymbol{n} = \left[\begin{matrix} a\\ b\\ c\\ \end{matrix}\right], 则\boldsymbol{n}^{\wedge} = \begin{bmatrix} 0 & -c & b\\ c & 0 & -a\\ -b& a & 0 \end{bmatrix} n=⎣⎡​abc​⎦⎤​,则n∧=⎣⎡​0c−b​−c0a​b−a0​⎦⎤​

罗德里格斯公式推导

假设 v \mathbf{v} v在三维空间中,绕单位旋转轴 k \mathbf{k} k,旋转 θ \theta θ。

从上图可以看出,对于向量 v \mathbf{v} v 可以分出两个分向量:
v = v ∥ + v ⊥ \mathbf{v}=\mathbf{v}_{\|}+\mathbf{v}_{\perp} v=v∥​+v⊥​

其中 v ∥ \mathbf{v}_{\|} v∥​平行于旋转轴 k \mathbf{k} k:
v ∥ = ( v ⋅ k ) k \mathbf{v}_{\|}=(\mathbf{v} \cdot \mathbf{k}) \mathbf{k} v∥​=(v⋅k)k

v ⊥ \mathbf{v}_{\perp} v⊥​垂直于旋转轴 k \mathbf{k} k:
v ⊥ = v − v ∥ = v − ( k ⋅ v ) k = − k × ( k × v ) \mathbf{v}_{\perp}=\mathbf{v}-\mathbf{v}_{\|}=\mathbf{v}-(\mathbf{k} \cdot \mathbf{v}) \mathbf{k}=-\mathbf{k} \times(\mathbf{k} \times \mathbf{v}) v⊥​=v−v∥​=v−(k⋅v)k=−k×(k×v)
在这里我们也可以得到:
v = ( k ⋅ v ) k − k × ( k × v ) \mathbf{v} = (\mathbf{k} \cdot \mathbf{v}) \mathbf{k} - \mathbf{k} \times(\mathbf{k} \times \mathbf{v}) v=(k⋅v)k−k×(k×v)

向量 k × v \mathbf{k} \times \mathbf{v} k×v可以看作 v ⊥ \mathbf{v}_{\perp} v⊥​ 绕 k \mathbf{k} k 反向旋转 9 0 ∘ 90^{\circ} 90∘。

叉乘公式和点乘公式转换:
a × ( b × c ) = ( a ⋅ c ) b − ( a ⋅ b ) c \mathbf{a} \times(\mathbf{b} \times \mathbf{c})=(\mathbf{a} \cdot \mathbf{c}) \mathbf{b}-(\mathbf{a} \cdot \mathbf{b}) \mathbf{c} a×(b×c)=(a⋅c)b−(a⋅b)c

v ∥ \mathbf{v}_{\|} v∥​旋转后的为:
v ∥ rot  = v ∥ \mathbf{v}_{\| \text {rot }}=\mathbf{v}_{\|} v∥rot ​=v∥​

v ⊥ \mathbf{v}_{\perp} v⊥​旋转后为:
∣ v ⊥ r o t ∣ = ∣ v ⊥ ∣ v ⊥ r o t = cos ⁡ θ v ⊥ + sin ⁡ θ k × v ⊥ \begin{aligned} \left|\mathbf{v}_{\perp r o t}\right| &=\left|\mathbf{v}_{\perp}\right| \\ \mathbf{v}_{\perp r o t} &=\cos \theta \mathbf{v}_{\perp}+\sin \theta \mathbf{k} \times \mathbf{v}_{\perp} \end{aligned} ∣v⊥rot​∣v⊥rot​​=∣v⊥​∣=cosθv⊥​+sinθk×v⊥​​

其中:
k × v ⊥ = k × ( v − v ∥ ) = k × v − k × v ∥ = k × v \mathbf{k} \times \mathbf{v}_{\perp}=\mathbf{k} \times\left(\mathbf{v}-\mathbf{v}_{\|}\right)=\mathbf{k} \times \mathbf{v}-\mathbf{k} \times \mathbf{v}_{\|}=\mathbf{k} \times \mathbf{v} k×v⊥​=k×(v−v∥​)=k×v−k×v∥​=k×v

因此:
v ⊥ r o t = cos ⁡ θ v ⊥ + sin ⁡ θ k × v \mathbf{v}_{\perp r o t}=\cos \theta \mathbf{v}_{\perp}+\sin \theta \mathbf{k} \times \mathbf{v} v⊥rot​=cosθv⊥​+sinθk×v

旋转后的向量 v r o t \mathbf{v}_{rot} vrot​为:
v r o t = v ∥ r o t + v ⊥ r o t \mathbf{v}_{\mathrm{rot}}=\mathbf{v}_{\| \mathrm{rot}}+\mathbf{v}_{\perp \mathrm{rot}} vrot​=v∥rot​+v⊥rot​
v r o t = v ∥ + cos ⁡ θ v ⊥ + sin ⁡ θ k × v = v ∥ + cos ⁡ θ ( v − v ∥ ) + sin ⁡ θ k × v = cos ⁡ θ v + ( 1 − cos ⁡ θ ) v ∥ + sin ⁡ θ k × v = cos ⁡ θ v + ( 1 − cos ⁡ θ ) ( k ⋅ v ) k + sin ⁡ θ k × v \begin{aligned} \mathbf{v}_{rot} &=\mathbf{v}_{\|}+\cos \theta \mathbf{v}_{\perp}+\sin \theta \mathbf{k} \times \mathbf{v} \\ &=\mathbf{v}_{\|}+\cos \theta\left(\mathbf{v}-\mathbf{v}_{\mathbf{\|}}\right)+\sin \theta \mathbf{k} \times \mathbf{v} \\ &=\cos \theta \mathbf{v}+(1-\cos \theta) \mathbf{v}_{\|}+\sin \theta \mathbf{k} \times \mathbf{v} \\ &=\cos \theta \mathbf{v}+(1-\cos \theta)(\mathbf{k} \cdot \mathbf{v}) \mathbf{k}+\sin \theta \mathbf{k} \times \mathbf{v} \end{aligned} vrot​​=v∥​+cosθv⊥​+sinθk×v=v∥​+cosθ(v−v∥​)+sinθk×v=cosθv+(1−cosθ)v∥​+sinθk×v=cosθv+(1−cosθ)(k⋅v)k+sinθk×v​

其中:
( k ⋅ v ) k = k ( k ⋅ v ) = k ( k T v ) = ( k k T ) v \begin{aligned} (\mathbf{k} \cdot \mathbf{v}) \mathbf{k} & = \mathbf{k} (\mathbf{k} \cdot \mathbf{v}) &= \mathbf{k} (\mathbf{k}^\mathbf{T} \mathbf{v} ) & = (\mathbf{k} \mathbf{k}^\mathbf{T})\mathbf{v} \end{aligned} (k⋅v)k​=k(k⋅v)​=k(kTv)​=(kkT)v​
所以 v r o t = ( cos ⁡ θ I + ( 1 − cos ⁡ θ ) k k T + sin ⁡ θ k ∧ ) v \mathbf{v}_{rot} = (\cos \theta \mathbf{I} +(1 - \cos \theta) \mathbf{k} \mathbf{k}^\mathbf{T} + \sin \theta \mathbf{k}^{\wedge}) \mathbf{v} vrot​=(cosθI+(1−cosθ)kkT+sinθk∧)v

注意:
如果在
v r o t = v ∥ + cos ⁡ θ v ⊥ + sin ⁡ θ k × v \mathbf{v}_{rot}=\mathbf{v}_{\|}+\cos \theta \mathbf{v}_{\perp}+\sin \theta \mathbf{k} \times \mathbf{v} vrot​=v∥​+cosθv⊥​+sinθk×v
中将 v ∥ \mathbf{v}_{\|} v∥​ 替换为 v − v ⊥ \mathbf{v}- \mathbf{v}_{\perp} v−v⊥​ ,再将 v ⊥ \mathbf{v}_{\perp} v⊥​ 替换为 − k × ( k × v ) -\mathbf{k} \times(\mathbf{k} \times \mathbf{v}) −k×(k×v)则:
v r o t = v − v ⊥ + cos ⁡ θ v ⊥ + sin ⁡ θ k × v = v + k × ( k × v ) − cos ⁡ θ k × ( k × v ) + sin ⁡ θ k × v = v + ( 1 − cos ⁡ θ ) k × ( k × v ) + sin ⁡ θ k × v = v + ( 1 − cos ⁡ θ ) K 2 v + sin ⁡ θ k × v = ( I + ( 1 − cos ⁡ θ ) K 2 + sin ⁡ θ K ) v \begin{aligned} \mathbf{v}_{rot} &= \mathbf{v}- \mathbf{v}_{\perp} + \cos \theta \mathbf{v}_{\perp} + \sin \theta \mathbf{k} \times \mathbf{v}\\ & = \mathbf{v} + \mathbf{k} \times(\mathbf{k} \times \mathbf{v}) - \cos \theta \mathbf{k} \times(\mathbf{k} \times \mathbf{v}) + \sin \theta \mathbf{k} \times \mathbf{v} \\ & = \mathbf{v} + (1- \cos \theta) \mathbf{k} \times(\mathbf{k} \times \mathbf{v}) + \sin \theta \mathbf{k} \times \mathbf{v} \\ & = \mathbf{v} + (1- \cos \theta) \mathbf{K}^2 \mathbf{v} + \sin \theta \mathbf{k} \times \mathbf{v}\\ &= (\mathbf{I}+ (1- \cos \theta) \mathbf{K}^2 + \sin \theta \mathbf{K}) \mathbf{v} \end{aligned} vrot​​=v−v⊥​+cosθv⊥​+sinθk×v=v+k×(k×v)−cosθk×(k×v)+sinθk×v=v+(1−cosθ)k×(k×v)+sinθk×v=v+(1−cosθ)K2v+sinθk×v=(I+(1−cosθ)K2+sinθK)v​

K = k ∧ \mathbf{K} = \mathbf{k}^\mathbf{\wedge} K=k∧ 为 k \mathbf{k} k 的反对称矩阵。

从上述两种推导,我们可以得出罗德里格斯公式
R = cos ⁡ θ I + ( 1 − cos ⁡ θ ) k k T + sin ⁡ θ k ∧ = I + ( 1 − cos ⁡ θ ) K 2 + sin ⁡ θ K \begin{aligned} \boldsymbol{R} &= \cos \theta \mathbf{I} +(1 - \cos \theta) \mathbf{k} \mathbf{k}^\mathbf{T} + \sin \theta \mathbf{k}^{\wedge}\\ & = \mathbf{I}+ (1- \cos \theta) \mathbf{K}^2 + \sin \theta \mathbf{K} \end{aligned} R​=cosθI+(1−cosθ)kkT+sinθk∧=I+(1−cosθ)K2+sinθK​

从上式子中,我们也可以得到:
k k T = K 2 + I \begin{aligned} \mathbf{k} \mathbf{k}^\mathbf{T} = \mathbf{K}^2 + \mathbf{I} \end{aligned} kkT=K2+I​
这一步的推导,可以回到上面公式
v = ( k ⋅ v ) k − k × ( k × v ) \mathbf{v} = (\mathbf{k} \cdot \mathbf{v}) \mathbf{k} - \mathbf{k} \times(\mathbf{k} \times \mathbf{v}) v=(k⋅v)k−k×(k×v)

( k ⋅ v ) k = k ( k ⋅ v ) = k ( k T v ) = ( k k T ) v \begin{aligned} (\mathbf{k} \cdot \mathbf{v}) \mathbf{k} & = \mathbf{k} (\mathbf{k} \cdot \mathbf{v}) &= \mathbf{k} (\mathbf{k}^\mathbf{T} \mathbf{v} ) & = (\mathbf{k} \mathbf{k}^\mathbf{T})\mathbf{v} \end{aligned} (k⋅v)k​=k(k⋅v)​=k(kTv)​=(kkT)v​
得到。

视觉SLAM十四讲--罗德里格斯公式(Rodrigues’s Formula)推导相关推荐

  1. 高博视觉SLAM十四讲--罗德里格斯公式推导

    罗德里格斯的推导 1.所要证明的信息 1.翻到视觉SLAM14讲,要证明公式3.15 2.首先看图 已知v'=Rv,求旋转矩阵R和旋转向量(u,θ)之间的关系,其中u为单位向量,||u||=1,u即为 ...

  2. 视觉SLAM十四讲(一)——罗德里格斯转换公式推导

    最近在学习SLAM,主要的学习资料为高翔的<视觉SLAM十四讲>,首先安利一下这本书,这本书由浅入的介绍了SLAM的整体结构,算法介绍与实际应用.可以说是一本既是通俗有趣的高科技讲义,又是 ...

  3. slam入门3:2D-2D对极几何中的对极约束公式详细解释(参考 视觉slam十四讲)

    声明:下面一些内容引用了高翔的视觉slam十四讲, 感谢作者. 对于我这种刚入门的小白(cai bi)来说,对极约束公式中的某些步骤理解起来还是有些难度的,下面把个人对相关内容的理解写下来,以备日后翻 ...

  4. 视觉SLAM十四讲学习笔记-第三讲-旋转向量、欧拉角、四元数

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  5. 视觉SLAM十四讲 第3讲 三维空间刚体运动(相关知识点汇总)

    视觉SLAM十四讲 第3讲 三维空间刚体运动 1. 刚体 2. 欧氏空间(euclidean space) 2.1 欧氏距离: 2.2 欧氏变换: 3. 笛卡尔坐标系 4. 透视空间 5. 齐次坐标系 ...

  6. 视觉SLAM十四讲(3):三维空间刚体运动

    本章需要掌握的知识点有:旋转矩阵,变换矩阵,四元数,欧拉角定义和数学表达:同时也要掌握Eigen库关于矩阵.几何模块的使用方法. 文章目录 3.1 旋转矩阵 3.1.1 点,向量和矩阵的关系 3.1. ...

  7. 视觉SLAM十四讲学习笔记-第四讲---第五讲学习笔记总结---李群和李代数、相机

    第四讲---第五讲学习笔记如下: 视觉SLAM十四讲学习笔记-第四讲-李群与李代数基础和定义.指数和对数映射_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第四讲-李代数求导与扰动模 ...

  8. 视觉SLAM十四讲学习笔记-第三讲-相似、仿射、射影变换和eigen程序、可视化演示

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  9. 视觉SLAM十四讲笔记-第四讲 李群与李代数

    目录 前提摘要: 一.群 1.1注意对象不同 1.2 概念 二.李群与李代数 2.1 李群 (Lie Group) 2.2 李代数 三.指数映射和对数映射 3.1 李代数so(3)指数映射 3.2 s ...

最新文章

  1. 【Qt】信号和槽传递自定义结构体
  2. python编程基础与应用-有哪些适合零编程基础的人学习Python的书?
  3. 【Android 属性动画】属性动画 Property Animation 工作原理 ( 线性插值动画 | 非线性插值动画 | 动画计算 | 经过分数 | 插值分数 | 类型估值器)
  4. 不停歇的 Java 即将发布 JDK 16,新特性速览!
  5. 思必驰携手博泰,共创智能汽车新声代
  6. SpringBoot是什么?可以做什么?
  7. SDK、API、JDK都是些什么?
  8. BeanUtils.copyProperties() 用法
  9. 域名是什么_个人买域名有什么用?注册域名有哪些步骤?
  10. STM32的两只狗儿——狗立看门狗
  11. 技术人如何加速成长?提升你的思维和学习方式
  12. easy2game使用教程_Easy2game什么用
  13. spring boot儿童教育管理系统毕业设计源码281442
  14. 用Moment.js 计算两个时间直接的间隔
  15. 5款神仙插件,打工人用了效率提升5倍
  16. C语言数据结构学习——数组和广义表
  17. Muli3D 2 matMatrix44RotationQuaternion 函数 (四元数转矩阵)
  18. **视频会议设备连接注意事项**
  19. java中 “|=“是什么意思
  20. 【嵌入式Linux】基于orangepi的官方外设开发

热门文章

  1. STM32F1在MDK下新建标准库函数工程
  2. Python与各大厂商PLC通讯库(自制)
  3. 阿里取消“P”序列职级显示引热议,网友:P3、P4流下了感动的泪水
  4. 关于win7系统注册表权限usbstor和superCMD
  5. html+css3基础知识部分详记
  6. 青龙面板 ---- 省钱钱
  7. 也看编程语言ruby的前途
  8. 深圳大鹏生态监控平台(Vue3 大屏应用) 问题记录
  9. dm365启动分析以及RBL、UBL、Uboot的简单介绍
  10. 红米android os耗电,体验真正流畅带来的快感,120Hz高刷新率的红米/Redmi K30测评报告...