我是靠谱客的博主 外向石头,最近开发中收集的这篇文章主要介绍Sophus降维、升维与欧拉角、旋转向量的爱恨情仇0. 简介1. 欧拉角与旋转向量2. SE(2)与SE(3)的转换3. 示例代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 = costheta I+(1-costheta)nn^T+sintheta hat{n} R=cosθI+(1cosθ)nnT+sinθn^

其中提到的 n ^ hat{n} n^是向量的旋转矩阵,由于是反对称矩阵,所以只存在三个自由度,我们可以 X − Y − Z X-Y-Z XYZ轴来规定其反对称矩阵轴:
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^= 0nznynz0nxnynx0

所以我们可以从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 Δx0,cosΔx1sinΔ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} Rn^= 0nznynz0nxnynx0

其中 θ 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 \ 1end{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 && 1end{bmatrix} times begin{bmatrix} x \ y \ z \ 1end{bmatrix} xwywzw1 = c1c3+s1s2s3c2s3c1s2s3s1c30c3s1s2c1s3c2c3s1s3+c1c3s20c2s1s2c1c20twxtwytwz1 × 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降维、升维与欧拉角、旋转向量的爱恨情仇0. 简介1. 欧拉角与旋转向量2. SE(2)与SE(3)的转换3. 示例代码的全部内容,希望文章能够帮你解决Sophus降维、升维与欧拉角、旋转向量的爱恨情仇0. 简介1. 欧拉角与旋转向量2. SE(2)与SE(3)的转换3. 示例代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部