旋转向量

旋转矩阵表达方式

旋转矩阵描述旋转,变换矩阵描述一个6自由度的三维刚体运动。但存在如下缺点:

  1. SO(3)的旋转矩阵有9个量,但一次旋转只有3个自由度。因此这种表达方式是冗余的。同理,变换矩阵16个量表达了6个自由度的变换,也不够紧凑。
  2. 旋转矩阵自身带有约束:它必须是个正交矩阵,且行列式为1。变换矩阵也是如此。当想要估计或优化一个旋转矩阵/变换矩阵时,这些约束会使得求解变得困难。

外积与旋转的关系

外积表达了两个向量的旋转关系。对于坐标系的旋转,任意旋转可以用一个旋转轴和一个旋转角来刻画。可以使用一个向量,器方向与旋转轴一致,而长度等于旋转角。这种向量称为旋转向量(或轴角,Axis-Angle)。这种表示法只需要一个三维向量即可描述旋转。同样,对于变换矩阵,我们使用一个旋转向量和一个平移向量即可表达一次变换。这时的位数正好是六维度。

旋转矩阵和旋转向量之间的转换

旋转轴n,角度为 θ \theta θ,对应的旋转向量 θ \theta θn。从旋转矩阵到旋转向量的转换过程由罗德里格斯公式(Rodrigues’s Formula)表明。

罗德里格斯公式推导


v ∣ ∣ _{||} ∣∣​与旋转向量v与旋转轴k(k为当我向量)相互垂直。对于与旋转轴呈任意角度的向量v,可以通过正交分解,把被旋转向量转化为与旋转轴平行的分量v ∣ ∣ _{||} ∣∣​和与旋转轴垂直的分量 v ⊥ _{\bot} ⊥​,其中与旋转轴平行的分量v ∣ ∣ _{||} ∣∣​在旋转中是不变的,而与旋转轴垂直的分量 v ⊥ _{\bot} ⊥​则恰好旋转了角度 θ \theta θ,把与旋转轴平行的分量与旋转以后的与旋转轴垂直的分量加在一起,即可得到旋转以后的分量。
对向量 v做正交分解:
v= v ∣ ∣ _{||} ∣∣​+ v ⊥ _{\bot} ⊥​
利用向量投影公式,可以得到 v ∣ ∣ _{||} ∣∣​的表达式:
v ∣ ∣ _{||} ∣∣​= (v ⋅ \cdot ⋅k)k
通过减法,得到
v ⊥ _{\bot} ⊥​=v-v ∣ ∣ _{||} ∣∣​=v-(v ⋅ \cdot ⋅k)k
利用外积可以计算与v ⊥ _{\bot} ⊥​和k都垂直,且长度为v ⊥ _{\bot} ⊥​的向量w
w=k × \times ×v ⊥ _{\bot} ⊥​=k × \times ×(v-(v ⋅ \cdot ⋅k)k)=k × \times ×v
旋转以后的向量可以表示为:
v ⊥ r o t = _{\bot rot}= ⊥rot​= cos θ \theta θ v ⊥ _{\bot} ⊥​+sin θ \theta θw=cos θ \theta θ(v-(v ⋅ \cdot ⋅k)k)+sin θ \theta θk × \times ×v
v ∣ ∣ _{||} ∣∣​相加即可得到旋转以后的向量的表达式:
v r o t _{ rot} rot​=v ∣ ∣ _{||} ∣∣​+ v ⊥ r o t _{\bot rot} ⊥rot​=cos θ \theta θv+(1-cos θ \theta θ)(v ⋅ \cdot ⋅k)k+sin θ \theta θk × \times ×v

矩阵形式

在计算机图形学中,罗德里格向量旋转公式通常被用来填写旋转矩阵。如果把kv分别写为列向量:
( k x k y k z ) \left( \begin{matrix} k_x \\k_y \\ k_z \end{matrix} \right) ⎝⎛​kx​ky​kz​​⎠⎞​, ( v x v y v z ) \left( \begin{matrix} v_x \\v_y \\ v_z \end{matrix} \right) ⎝⎛​vx​vy​vz​​⎠⎞​
则旋转以后的向量可以表示为
v r o t _{ rot} rot​=Rv
其中
R=cos θ \theta θI+(1-cos θ \theta θ) ( k x k y k z ) \left( \begin{matrix} k_x \\k_y \\ k_z \end{matrix} \right) ⎝⎛​kx​ky​kz​​⎠⎞​ ( k x , k y , k z ) (k_x,k_y,k_z) (kx​,ky​,kz​)+sin θ \theta θ ( 0 − k z k y k z 0 − k x − k y k x 0 ) \left( \begin{matrix} 0&-k_z&k_y \\k_z&0&-k_x \\ -k_y&k_x&0 \end{matrix} \right) ⎝⎛​0kz​−ky​​−kz​0kx​​ky​−kx​0​⎠⎞​
其中,I是3阶单位矩阵。需要注意的是,公式中的第二项不是点积,而是张量积,得到的是一个3行3列的矩阵。

转换结果

R = c o s θ =cos\theta =cosθI+(1-cos θ ) \theta) θ)nn T ^T T+sin θ \theta θn^
符号^是向量到反对称的转换付。。可以从一个旋转矩阵到旋转向量的转换。对于转角 θ \theta θ,有:

tr(R)=cos θ \theta θtr(I)+(1-cos θ ) \theta) θ)tr(nn T ^T T)+sin θ \theta θtr(n^)=3+cos θ \theta θ+(1-cos θ \theta θ)=1+2cos θ \theta θ
因此:
θ \theta θ=arccos( t r ( R ) − 1 2 \frac{tr(R)-1}{2} 2tr(R)−1​)
关于旋转轴n,由于旋转轴上的向量在旋转后不发生改变,说明
Rn=n
因此,转轴n是矩阵R特征值的1对应的特征向量。求解此方程,在归一化,就得到了旋转轴。“旋转轴经过旋转之后不变”。

欧拉角

欧拉角,使用3个分离的转角,把一个旋转分解成3次绕不同轴的旋转。分的细一些还可以分每次是绕固定轴旋转还是绕旋转之后的轴旋转。
航空和航模中,“偏航-俯仰-滚转”(yaw-pitch-raw)3个角度来描述一个旋转。等价于ZYX轴的旋转。
欧拉角的一个重大缺点是会碰到万向锁问题(Gimbal Lock):在俯仰角为 ± 90 ° \pm 90° ±90°时,第一次旋转与第三次旋转将使用同一个轴,使得系统丢失一个自由度(由三次旋转变成了两次旋转),这杯称为奇异性问题。只要想用3个实数来表达3维旋转时,都会不可避免地碰到奇异性问题。由于这种原理,欧拉角不适合于插值和迭代,往往只用于人机交互中。SLAM中也很少直接用欧拉角表达姿态,同样也不会在滤波或优化中是哟个欧拉角表达旋转(因为它的奇异性)。验证算法是否有错,转换成欧拉角能快速分辨结果是否正确。

旋转向量与欧拉角 罗德里格斯公式(Rodrigues's Formula)相关推荐

  1. 罗德里格斯公式(Rodrigues‘ rotation formula)推导

    罗德里格斯公式(Rodrigues' rotation formula)推导 向量形式 如图所示,三维空间中的一个矢量 v \bold v v绕轴 k \bold k k旋转 θ \theta θ角度 ...

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

    前言 之前看了高博的<视觉SLAM十四讲>,里面有一段关于罗德里格斯公式,但是高博没有给出具体推导.然后我查了很多博主,都没有给出怎么推到 R = cos ⁡ θ I + ( 1 − co ...

  3. 罗德里格斯公式Rodrigues‘Rotation Formula推导

    原文链接 :https://zhuanlan.zhihu.com/p/113299607 罗德里格斯公式是计算三维空间中,一个向量绕旋转轴旋转一定角度后得到一个新的向量的计算公式,而且可以改写为矩阵的 ...

  4. 罗德里格斯公式Rodrigues' rotation formula推导

    参考本处博客

  5. python 实现罗德里格斯公式Rodrigues 旋转向量到旋转矩阵转化

    罗德里格斯公式Rodrigues: 代码: import numpy as npdef rodrigues_rotation(r, theta):# n旋转轴[3x1]# theta为旋转角度# 旋转 ...

  6. 关于罗德里格斯公式(Rodrigues‘sFormula)的详细推导过程

    关于罗德里格斯公式[Rodrigues'sFormula]的详细推导过程 1 旋转向量 2 罗德里格斯公式 2.1 罗德里格斯公式定义 2.2 罗德里格斯公式推导 3 旋转矩阵到旋转向量的转换 1 旋 ...

  7. 刚体运动中的坐标变换-旋转矩阵、旋转向量、欧拉角及四元数

    坐标变换及其方法 1.转化关系图 2 换算关系 3.1 旋转矩阵换算至其他 3.2 四元数换算至其他 3.3 旋转向量转换至旋转矩阵与四元数 3.3 欧拉角转换到旋转矩阵和四元数 3 坐标变换 4 坐 ...

  8. 旋转矩阵罗德里格斯公式(Rodriguez formula)的理解证明

    一.罗德里格斯公式的表达式 罗德里格斯公式(Rodriguez formula)是计算机视觉中的一大经典公式,在描述相机位姿的过程中很常用,其形式如下: 二.对罗德里格斯公式的理解 我们假设v⃗\ve ...

  9. 通俗易懂!视觉slam第六部分——旋转向量,欧拉角

    矩阵表示方式还有很多缺点: 1.SO(3) 的旋转矩阵有九个量,但一次旋转只有三个自由度.因此这种表达方式是冗余的.同理,变换矩阵用十六个量表达了六自由度的变换. 2. 旋转矩阵自身带有约束:它必须是 ...

最新文章

  1. 【人工智能】人工智能革命与机遇
  2. VS2003 下GridControl的列显示成图片+文字的形式实现
  3. 突然决定,送一台笔记本!
  4. 三次握手和四次挥手详细介绍
  5. 【专题介绍】音视频+
  6. 普通高中生水平就能干好的编程到底是不是高科技?
  7. 网路知识:为什么宽带越用越慢,看完你就明白了
  8. 7-16 一元多项式求导 (20 分)(详解+题目分析)
  9. Ant 简单示例+环境变量配置说明
  10. ARIS业务流程建模工具培训
  11. Spring Boot入门(3)-数据库操作
  12. VB类计算机专业毕业设计题目
  13. AcWing Django框架课第一节笔记
  14. 书到用时方恨少,一大波JS开发工具函数来了
  15. C++生成GIF小结
  16. 千人规模互联网公司研发效能成功之路
  17. 关于“源代码未编译“问题的回复
  18. 客户一个无厘头的BUG ,让我的青春痘炸了2颗
  19. 从键盘读入一个字符,如果该字符是大写字母则转小写,如果该字符是小写字母则转大写,如果不是字符则输出不是字母。
  20. ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理

热门文章

  1. SitePoint Podcast#190:Dave Rupert的开源项目
  2. python飞机_Python 飞机航班案例分析
  3. Springboot 的 WebMvcConfigurerAdapter 过时
  4. hdu6570 动态规划 dp
  5. 计算机毕业设计Java的家居销售网站(源码+系统+mysql数据库+lw文档)
  6. JAVA上传文件到SQLserver_Java实现SQLServer数据库mdf与ldf文件导入导出
  7. await is a reserved word
  8. 在 Matlab 中如何输入希腊字母等特殊字符
  9. python怎么打希腊字母_打字如何打希腊字母-百度经验
  10. 典型的微型计算机系统总线组成,第13章 总线与微型计算机系统的结构.ppt