0. 简介

在面对二维与三维之间的转换时,我们常常会困惑该如何去转换,在G2O中存在有理想的坐标转换工具,但是在Sophus中却缺乏这样的手段。之前在Sophus处简要的介绍了一下SE(2)与SE(3)的转换,最近发现之前的文章这部分需要拿出来详细的说一说。

1. 欧拉角与旋转向量

欧拉角、旋转向量、四元数和旋转矩阵是Sophus中常常提到的几个名词,欧拉角和旋转向量是类似的,SO(3)的旋转矩阵有9个量,但是只有3个自由度,并且是单位正交矩阵,具有冗余性,对其估计或优化问题的求解不方便。我们可以用一个旋转轴和一个旋转角描述任意旋转。一个方向与旋转轴一致,长度(模)等于旋转角的向量,我们称之为旋转向量(或轴角)

旋转向量到旋转矩阵:

R = c o s θ I + ( 1 − c o s θ ) n n T + s i n θ n ^ R = cos\theta I+(1-cos\theta)nn^T+sin\theta \hat{n} R=cosθI+(1−cosθ)nnT+sinθn^

其中提到的 n ^ \hat{n} n^是向量的旋转矩阵,由于是反对称矩阵,所以只存在三个自由度,我们可以 X − Y − Z X-Y-Z X−Y−Z轴来规定其反对称矩阵轴:
n ^ = [ 0 − n z n y n z 0 − n x − n y n x 0 ] \hat{n}=\begin{bmatrix} 0 && -{n_z} && {n_y} \\ {n_z} && 0 && -{n_x} \\ -{n_y} && {n_x} && 0 \end{bmatrix} n^= ​0nz​−ny​​​−nz​0nx​​​ny​−nx​0​ ​

所以我们可以从se,so中得到旋转向量数值。而欧拉角对于轴角表示情况,转轴具有2个自由度,转角1个自由度。 根据三次基本转动选取的坐标轴的不同,欧拉角共有12种组合。如 果再考虑到可选取原始坐标系的坐标轴,也可选取“新”坐标系的坐标轴,则共有24种欧拉角表示。一般规定原始坐标系为静坐标系,每个基本转动后形成的新坐标系为动坐标系。

  • 24 种欧拉角表示列举如下:
  • 静轴(即转轴选静坐标系的坐标轴):
    s X Y Z , s X Z Y , s X Y X , sXYZ,sXZY,sXYX, sXYZ,sXZY,sXYX,
    s X Z X , s Y X Z , s Y Z X , sXZX,sYXZ,sYZX, sXZX,sYXZ,sYZX,
    s Y X Y , s Y Z Y , s Z X Y , sYXY,sYZY,sZXY, sYXY,sYZY,sZXY,
    s Z Y X , s Z X Z , s Z Y Z sZYX,sZXZ,sZYZ sZYX,sZXZ,sZYZ

动轴(即转轴选动坐标系的坐标轴):

r Z Y X , r Y Z X , r X Y X , rZYX,rYZX,rXYX, rZYX,rYZX,rXYX,
r X Z X , r Z X Y , r X Z Y , rXZX,rZXY,rXZY, rXZX,rZXY,rXZY,
r Y X Y , r Y Z Y , r Y X Z , rYXY,rYZY,rYXZ, rYXY,rYZY,rYXZ,
r X Y Z , r Z X Z , r Z Y Z rXYZ,rZXZ,rZYZ rXYZ,rZXZ,rZYZ

静轴欧拉角和动轴欧拉角有如下规律:
绕静轴 X Y Z XYZ XYZ 分别 转 α , β , γ α,β,γ α,β,γ 角度的转动与绕动轴 Z Y X ZYX ZYX分别转 γ , β , α γ,β,α γ,β,α 角度的转动等价,其他形式的欧拉角亦有此类似规律。

对于不同的坐标系定义,有不同的转换关系。我们只讨论常用的一种情况:如上图,右手系,Z轴朝上,X轴朝前,y轴朝左。绕Z轴作偏航(Yaw)运动,绕Y轴作俯仰(Pitch)运动,绕X轴作滚转(Roll)运动,运动正方向如上图所示。
对于欧拉角计算公式我们可以得到 α , β , γ α,β,γ α,β,γ 三个角度计算得到的旋转矩阵





上式中 R R R与旋转次序有关,即当 θ z , θ y , θ x θz,θy,θx θz,θy,θx不都为小角时,对应于不同的旋转次序,空间坐标系b的最终位置时不同的,这就是有限转动的不可交换性。但是当 θ z , θ y , θ x θz,θy,θx θz,θy,θx都为小角时,忽略小角间的高阶小量,即: Δ x → 0 , c o s Δ x → 1 , s i n Δ x → Δ x Δx→0,cosΔx→1,sinΔx→Δx Δx→0,cosΔx→1,sinΔx→Δx
R ≈ n ^ = [ 0 − n z n y n z 0 − n x − n y n x 0 ] R \approx \hat{n}=\begin{bmatrix} 0 && -{n_z} && {n_y} \\ {n_z} && 0 && -{n_x} \\ -{n_y} && {n_x} && 0 \end{bmatrix} R≈n^= ​0nz​−ny​​​−nz​0nx​​​ny​−nx​0​ ​

其中 θ z , θ y , θ x θz,θy,θx θz,θy,θx角度为弧度,此时 θ z , θ y , θ x θz,θy,θx θz,θy,θx构成的列向量 [ θ z , θ y , θ x ] T [θz,θy,θx]^T [θz,θy,θx]T可视为三维空间的(旋转)矢量,此时旋转后的坐标系的最终角位置与旋转次序无关:无限转动与旋转次序无关

2. SE(2)与SE(3)的转换

SE(2),通常是作为二维向量的表示形式,基本的组成部分为 x , y , y a w x,y,yaw x,y,yaw三参数,其格式如下:

SE(3)则是在上式的基础上加入 z z z轴,其格式如下:

[ x w y w z w 1 ] = [ c 1 c 3 + s 1 s 2 s 3 c 3 s 1 s 2 − c 1 s 3 c 2 s 1 t w x c 2 s 3 c 2 c 3 − s 2 t w y c 1 s 2 s 3 − s 1 c 3 s 1 s 3 + c 1 c 3 s 2 c 1 c 2 t w z 0 0 0 1 ] × [ x y z 1 ] \begin{bmatrix} x_w \\ y_w \\ z_w \\ 1\end{bmatrix} =\begin{bmatrix} {c_1 c_3 + s_1 s_2 s_3} && {c_3 s_1 s_2 - c_1 s_3} && {c_2 s_1} && t_wx \\ {c_2 s_3} && {c_2 c_3} && -{s_2} && t_wy \\ {c_1 s_2 s_3 - s_1 c_3} && {s_1 s_3 + c_1 c_3 s_2} && {c_1 c_2} && t_wz \\ 0 && 0 && 0 && 1\end{bmatrix} \times \begin{bmatrix} x \\ y \\ z \\ 1\end{bmatrix} ​xw​yw​zw​1​ ​= ​c1​c3​+s1​s2​s3​c2​s3​c1​s2​s3​−s1​c3​0​​c3​s1​s2​−c1​s3​c2​c3​s1​s3​+c1​c3​s2​0​​c2​s1​−s2​c1​c2​0​​tw​xtw​ytw​z1​ ​× ​xyz1​ ​

李群 SO(3) SE(3)
旋转矩阵构建 Sophus::SO3d SO3(R) Sophus::SE3d SE3(R,t)
四元数构建 Sophus::SO3d SO3(q) Sophus::SO3d SO3(q,t)
输出 SO3.matrix() SE3.matrix()
对数映射 Vector3d so3=SO3.log() Vecotr6d se3=SE3.log()
指数映射 SO3d::exp(so3) SE3d::exp(se3)
向量到反对称矩阵 SO3d::hat(so3) SE3d::hat(se3)
反对称矩阵到向量 SO3d::vee(hat) SE3d::vee(hat)

3. 示例代码

…详情请参照古月居

Sophus降维、升维与欧拉角、旋转向量的爱恨情仇相关推荐

  1. 三维空间坐标的旋转算法详解_视觉slam | 三维空间刚体运动的五种表达:旋转矩阵 变化矩阵 欧拉角 旋转向量 四元数及互相转换...

    原po:高翔slam十四讲-刚体运动 1.旋转矩阵 考虑一次旋转 Before: 坐标系(e1,e2,e3), 向量(a1,a2,a3) After: 坐标系(e1',e2',e3'), 向量(a1' ...

  2. 详解基于罗德里格斯(Rodrigues)公式由旋转向量到旋转矩阵的 Python 实现

    文章目录 旋转向量 rotation vector 旋转矩阵 rotation matrix 罗德里格斯公式 Rodrigues' formula 基于 Python 和 NumPy 实现 Rodri ...

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

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

  4. 张量的基本概念+张量的聚合、拼接、比较、随机化采样、序列化等操作+升维、降维

    张量的基本概念+张量的聚合.拼接.比较.随机化采样.序列化等操作 一.张量的基本概念 二.张量的聚合操作 三.张量的拼接操作 张量的升维.降维 一.张量的基本概念 张量(Tensor),就是多维数组. ...

  5. Revit二次开发入门捷径_升维学习、降维打击

    问题 入门Revit二次开发有捷径吗? 答案 量子力学:有也没有.(皮一下:叠加态) 没有:目的地只有一个,路只有一条,学习没有捷径. 有:虽然路只有一条,但我们可以借助交通工具,缩短时间就是捷径. ...

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

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

  7. 旋转向量与欧拉角 罗德里格斯公式(Rodrigues's Formula)

    旋转向量 旋转矩阵表达方式 旋转矩阵描述旋转,变换矩阵描述一个6自由度的三维刚体运动.但存在如下缺点: SO(3)的旋转矩阵有9个量,但一次旋转只有3个自由度.因此这种表达方式是冗余的.同理,变换矩阵 ...

  8. 神经网络中的降维和升维方法 (tensorflow pytorch)

    大名鼎鼎的UNet和我们经常看到的编解码器模型,他们的模型都是先将数据下采样,也称为特征提取,然后再将下采样后的特征恢复回原来的维度.这个特征提取的过程我们称为"下采样",这个恢复 ...

  9. 【自动驾驶】30.c++实现基于eigen实现欧拉角(RPY), 旋转矩阵, 旋转向量, 四元数之间的变换(附代码)

    矩阵的使用可参考系列博客:点击此处 原文链接:基于eigen实现欧拉角(RPY), 旋转矩阵, 旋转向量, 四元数之间的变换. 也可以参考另一篇博客:eigen 中四元数.欧拉角.旋转矩阵.旋转向量. ...

最新文章

  1. 企业级 SpringBoot 教程 (三)SpringBoot用JdbcTemplates访问Mysql
  2. redux middleware 源码分析
  3. java 获取sqlsession_获取Java的MyBatis框架项目中的SqlSession的方法
  4. Base64编码 - Java加密与安全
  5. linux入门_Linux超详细0基础入门篇(一)
  6. 黑客攻破中国电信网络发布900个后台密码
  7. mysql可重复读和间隙锁_解决MySQL可重复读——详解间隙锁
  8. 如何使用火狐下的两款接口测试工具RESTClient和HttpRequester发送post请求
  9. FPGA学习——32位booth算法乘法器设计(串行输入、液晶屏输出)
  10. JQUERY冻结table行或列js
  11. 如何在HTML中添加背景音乐?
  12. 图扑 TopLink 边缘组态
  13. 1.3 nest.js使用supertest单元测试及e2e测试
  14. 纽约出租车旅途时间建模分析
  15. 真实的玻璃反光效果PS图层样式
  16. HTML交互式课件制作,交互式课件制作软件
  17. 计算机控制系统顾树生课后答案,清华大学出版社-图书详情-《自动控制原理习题详解》...
  18. Jetson TX1板载相机调用测试
  19. ATTCK红队评估(红日靶场二)
  20. java程序员装黑苹果_黑苹果教程(四)———MAC OS 10.11+固态硬盘+自定义引导

热门文章

  1. mac卸载python_Mac OS 完全彻底卸载 Python 指定版本的方法
  2. linux 时钟同步命令,Linux 时间同步服务命令
  3. 美摄SDK玩转年轻潮拍,成视音频平台差异化黑马
  4. html5统计字符串,获取字符串长度
  5. eclipse中SVN分支合并到主干(记录)
  6. 跟谁学定增融资:拟加大高途课堂投入,因存在违规被监管要求整改
  7. lingo纳什均衡代码_英语演讲稿_理解“纳什均衡”是对纳什最好的怀念_沪江英语...
  8. 2023.02.24(uniapp 问题记录)
  9. Linux中命令rpm,Linux中rpm命令起什么作用呢?
  10. 5种数据压缩算法实现和性能测试