三维空间刚体运动

三维空间刚体运动

转载自:https://www.guyuehome.com/46508

前言

在上一个Part,我们知道了坐标转换的一些基础只是,其实三维空间的刚体运动与其也有紧密的联系,可以理解为刚体运动为持续的把运动坐标系中的坐标变换到固定坐标系中,此外再加上旋转这一过程。

世界坐标系与里程计坐标系

世界坐标系与里程计坐标系
世界坐标系:世界坐标系(world坐标系)一般指固定坐标系,在系统运行过程其全局坐标不发生改变。在建图时,经常会认为起点为世界坐标系原点,而本体初始旋转角度为0。
里程计坐标系:里程计坐标系一般指运动坐标系,在建图过程一般指传感器坐标系,视觉SLAM中指的就是相机坐标系(camera坐标系)。
在这里插入图片描述
与坐标系变换的区别与联系。坐标系变换中,向量A空间位置不动,已知A在C1坐标系(视角)下的坐标,求在C2坐标系(视角)下的坐标。简单的说,向量A不变,描述向量A的参考系变了,即坐标系在运动。而刚体运动的描述中,参考坐标系不动,刚体坐标系运动。

在描述刚体运动时,我们一般会求得下一个时刻,相对于上一个时刻坐标系下的平移与旋转,如上图右图所示。这相当于我们知道了c2在c1坐标系下的坐标(平移)与相对于c1的旋转(局部坐标)。这个时候,利用c1在w下的坐标,将c2的平移与旋转转换到世界坐标系下,就得到了c2时刻的全局坐标。然后对于c2,得到下一时刻c3相对于c2的平移与旋转(局部坐标),将其转换到w坐标系下,不断进行下去,就得到了以运动坐标系表征的本地在世界坐标系下的刚体运动。

欧式变换

三维空间刚体的运动,简单来说由平移与旋转构成。平移指两个点之间的位移,三维空间中其自由度为三。旋转则是绕着三个轴各种旋转的角度,自由度也为三。平移加旋转可构成一次变换,这个变换称为欧式变换。
假设c1原点在w坐标系下坐标为P1,旋转为R1,c2原点在c1坐标系下坐标为△P,旋转为△R,则c2在w坐标系下的欧式变换P2与R2为:

P2 = R1 * △P + P1;
R2 = R1 * △R;

欧式变换为一个平移+一个旋转,为了简洁,可以使用一个矩阵表示
在这里插入图片描述
那么上述变换,就可以写为:
在这里插入图片描述
可以看到,只要求得当前时刻,在上一坐标系下的位移及旋转,就可以得到当前时刻的全局欧式变换。不断累加下去,就可以得到所有时刻的欧式变换,连起来就是传感器在三维空间的刚体运动。在加上上一节的外参变换,就可以得到本体在空间中的刚体运动了。

旋转矩阵和四元素

三维空间里表述旋转的计算方式常见的有两种:矩阵(Matrix)和四元数(Quaternion),为了防止矩阵方式存在万向节死锁(Gimbal Lock)问题,通常采用四元数来计算旋转。但在自动驾驶领域里很少这么干,因为相机是固定在车子上,只有垂直于地面的轴(一般是Z轴)才会发生360度的旋转,根本无法引发万向节问题,总不至于用户坚持在翻车的阶段仍旧保持自动驾驶这个诡异的需求。所以在自动驾驶目标检测或车道线检测里的代码里通常就是矩阵形式,SLAM因为还会用在AR和其它领域,相机不是相对固定的,所以会采用四元数。
关于万向节死锁问题,大家可以参考:https://zhuanlan.zhihu.com/p/344050856

旋转矩阵

旋转矩阵是一个3x3的正交矩阵,用来描述一个刚体绕着某个轴旋转的情况。旋转矩阵的每一列代表了一个坐标系中的向量,因此可以通过旋转矩阵将一个向量从一个坐标系转换到另一个坐标系。

四元数

关于四元数是一个比较复杂的问题,此处给出一些参考资料给读者学习。

如何通俗地解释欧拉角?之后为何要引入四元数?
彻底搞懂“旋转矩阵/欧拉角/四元数”,让你体会三维旋转之美
刚体运动中的坐标变换-旋转矩阵、旋转向量、欧拉角及四元数

下图是二者的主要对比啦。
在这里插入图片描述

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在MATLAB中,可以使用旋转矩阵来实现三维空间刚体运动。旋转矩阵是一种正交矩阵,它可以保持长度、角度、面积等特征不变的仿射变换,即内积和度量不变。旋转矩阵的逆等于它的转置,同时行列式的值为正负1。 在MATLAB中,可以使用makehgtform函数来创建旋转矩阵。例如,如果给定一个单位向量normal和旋转角度theta,可以使用下面的代码创建旋转矩阵Matrix_Rot: theta=acos(costheta); Matrix_Rot=makehgtform('axisrotate',normal,theta); 其中,normal是旋转轴的单位向量,theta是旋转角度。这样,Matrix_Rot就是表示刚体运动的旋转矩阵。 更多关于旋转矩阵的信息,可以参考维基百科的页面和博客文章。关于MATLAB中的刚体运动和旋转矩阵的应用,还可以参考博客文章。 总结起来,MATLAB中的三维空间刚体运动可以通过旋转矩阵来实现,旋转矩阵是一种正交矩阵,它可以保持长度、角度、面积等特征不变的仿射变换。在MATLAB中,可以使用makehgtform函数来创建旋转矩阵。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [3D视觉(三)刚体运动及matlab实现](https://blog.csdn.net/piaoxuezhong/article/details/78524498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值