视觉SLAM14精讲——三维空间刚体运动1.2

视觉SLAM14精讲

  1. 三维空间刚体运动1.0
  2. 三维空间刚体运动1.1
  3. 三维空间刚体运动1.2
  4. 李群与李代数2.1
  5. 相机与图像3.1

视觉SLAM14精讲——三维空间刚体运动1.2

三维空间刚体运动


欧拉角

欧拉角可以说是零理解成本的表示形式,由于有万向锁的问题被绝大部分项目所抛弃。欧拉角的每个轴旋转都有固定好的名称,这些名称十分直观:

  • Z轴旋转,相当于左右旋转,叫航角,或偏航角。
  • Y轴旋转,相当于俯仰旋转,叫仰角,或俯仰角。
  • X轴旋转,相当于一个人躺在地上翻滚,叫滚角,或滚转角。

然而在某些情况下,我们获得到欧拉角,还是需要将其转换为旋转矩阵。14讲中提到了Rodrigues公式,在opencv里有直接实现好的接口。尽量使用这些现成的接口,可以避免很多不必要的麻烦:

R = cv2.Rodrigues(rpy)
rpy = cv2.Rodrigues(R)
cv::Rodrigues(rpy, R);
cv::Rodrigues(R, rpy);

使用欧拉角还需要注意的一个问题是弧度单位制和角度单位制的区别。如果发现单位制需要转换,就需要/180*Pi或者*Pi/180来进行转换。

四元数

四元数在所以到的旋转表示中是最麻烦的,它既不直观,计算也不简便,但是在数学上有着十分优美的表达形式。由于四元数仅使用四个分量就可以无奇异的表示旋转,因此这种表示方式会在传输过程中使用到。一个典型的例子就是ROS消息geometry_msgs/Pose:

orientation.x	
orientation.y	
orientation.z	
orientation.w	
position.x	
position.y	
position.z	

采用四元数就可以实现7个数传输一次位姿,用Rt矩阵一共是12个数,T占用16个。但其实这样的数据传输量对总体的系统来说压力并不高,相比图像实时传输的数据量来说是九牛一毛。因此一般不会以传输压力作为选择四元数作为旋转表达的主要原因。在一些工作中,比如VINS,和一些ceres进行优化的标定项目,会主要采用四元数进行最小二乘法的计算。

为了直观的让读者了解四元数,我们模仿前一章的做法,再次把轴旋转的四元数形式列在这里,方便大家理解:

RPY Quaternion
0, 0, 0 [ 0, 0, 0, 1 ]
90,0,0 [ 2 2 \frac{\sqrt{2}}{2} 22 , 0, 0, 2 2 \frac{\sqrt{2}}{2} 22 ]
0,90,0 [ 0, 2 2 \frac{\sqrt{2}}{2} 22 , 0, 2 2 \frac{\sqrt{2}}{2} 22 ]
0,0,90 [ 0, 0, 2 2 \frac{\sqrt{2}}{2} 22 , 2 2 \frac{\sqrt{2}}{2} 22 ]

旋转x轴90度,如果进行手算的话,可能会得到类似[1 0 0 1]的结果,这个结果的膜长是大于1的,需要进行规范化之后才会变成标准表达形式。因此最终是[ 2 2 \frac{\sqrt{2}}{2} 22 , 0, 0, 2 2 \frac{\sqrt{2}}{2} 22 ]。

小工具

最后推荐一个网站,3D Rotation Converter作为一个在线旋转形式转化的小工具,可以帮助我们将任一旋转转化成14讲中提到的人以一种形式。
请添加图片描述

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值