关于位姿变换的一点体会
关于位姿变换的一点体会
- 1.题外话
- 2.刚体的位姿变换
- 2.1 位姿变换的定义
- 2.2 旋转矩阵的具体形式
- 2.2.1 二维情况
- 2.2.2 三维情况
- 3.旋转方向
- 4.平移方向
1.题外话
对于刚体的位姿变换问题,以前总觉得很简单,不就是个旋转平移嘛。可是几天手动做了的坐标变换却做了很久才做好。究其原因,还是有些问题没弄清楚。所以,今天在此写篇博客,彻底把这个过程捋一捋。
2.刚体的位姿变换
2.1 位姿变换的定义
确实,刚体的姿态变换就两部分:旋转和平移。先来看看书上是怎么介绍旋转和平移的。在《视觉slam十四讲》中,对于这部分内容是这样将的:
我们设某个单位正交基(e1,e2,e3)(e_{1},e_{2},e_{3})(e1,e2,e3)经过一次旋转,变成了 (e1′,e2′,e3′)(e'_{1},e'_{2},e'_{3})(e1′,e2′,e3′)。那么,对于同一个向量 aaa(注意该向量并没有随着坐标系的旋转而发生运动),它在两个坐标系下的坐标为[a1;a2;a3]T[a_{1}; a_{2}; a_{3}]^T[a1;a2;a3]T 和 [a′1;a′2;a′3]T[a′_{ 1}; a′_{ 2}; a′ _{3}]^T[a′1;a′2;a′3]T。根据坐标的定义,有:
为了描述两个坐标之间的关系,我们对上面等式左右同时左乘[e1T,e2T,e3T]T[e^T_{1},e^T_{2},e^T_{3}]^T[e1T,e2T,e3T]T,那么左边的系数变成了单位矩阵,所以
我们把中间的阵拿出来,定义成一个矩阵 RRR。这个矩阵由两组基之间的内积组成,刻画了旋转前后同一个向量的坐标变换关系。只要旋转是一样的,那么这个矩阵也是一样的。可以说,矩阵 RRR 描述了旋转本身。因此它又称为旋转矩阵。
在欧氏变换中,除了旋转之外还有一个平移。考虑世界坐标系中的向量 aaa,经过一次旋转(用RRR 描述)和一次平移 ttt 后,得到了 a′a′a′,那么把旋转和平移合到一起,有:
a′=Ra+ta′= Ra + ta′=Ra+t
其中, ttt 称为平移向量。相比于旋转,平移部分只需把这个平移量加到旋转之后的坐标上,显得非常简洁。
以上内容摘自《视觉slam十四讲》第三章中的内容。
2.2 旋转矩阵的具体形式
从上面的内容可以看到,旋转矩阵是由两组基向量的内积组成。接下来再看看沿各个坐标轴进行旋转的旋转矩阵怎样写。
2.2.1 二维情况
对于二维的情况,比较简单。旋转矩阵(旋转方向为逆时针)为:
R=[cos(θ)−sin(θ)sin(θ)cos(θ)]R= \left[ \begin{matrix} cos(\theta) & -sin(\theta)\\ sin(\theta) & cos(\theta) \end{matrix} \right] R=[cos(θ)sin(θ)−sin(θ)cos(θ)]
2.2.2 三维情况
绕x轴进行旋转(在yz平面逆时针旋转)
R=[1000cos(θ)−sin(θ)0sin(θ)cos(θ)]R= \left[ \begin{matrix} 1& 0& 0\\ 0&cos(\theta) & -sin(\theta)\\ 0&sin(\theta) & cos(\theta) \end{matrix} \right] R=⎣⎡1000cos(θ)sin(θ)0−sin(θ)cos(θ)⎦⎤
绕y轴进行旋转(在xz平面逆时针旋转)
R=[cos(θ)0−sin(θ)010sin(θ)0cos(θ)]R= \left[ \begin{matrix} cos(\theta) & 0& -sin(\theta)\\ 0&1&0 \\ sin(\theta)& 0& cos(\theta) \end{matrix} \right] R=⎣⎡cos(θ)0sin(θ)010−sin(θ)0cos(θ)⎦⎤
绕z轴进行旋转(在xy平面逆时针旋转)
R=[cos(θ)−sin(θ)0sin(θ)cos(θ)0001]R= \left[ \begin{matrix} cos(\theta) & -sin(\theta)& 0\\ sin(\theta)& cos(\theta)& 0\\ 0&0&1 \\ \end{matrix} \right] R=⎣⎡cos(θ)sin(θ)0−sin(θ)cos(θ)0001⎦⎤
3.旋转方向
下面来考虑一个简单的问题。
问题:将点p=(1,0)p =(1,0)p=(1,0),按照旋转矩阵RRR进行旋转,旋转后的坐标为多少?
R=[cos(θ)−sin(θ)sin(θ)cos(θ)],θ=π/2R = \left[ \begin{matrix} cos(\theta) & -sin(\theta)\\ sin(\theta) & cos(\theta) \end{matrix} \right] ,\theta=\pi/2 R=[cos(θ)sin(θ)−sin(θ)cos(θ)],θ=π/2
这个问题很简单,口算都可以算出答案是p′=(0,1)p'=(0,1)p′=(0,1)。
但这里面有些问题需要搞清楚。按照旋转矩阵RRR进行旋转,我们将点p=(0,1)p =(0,1)p=(0,1)变换为了p′=(1,0)p'=(1,0)p′=(1,0)。相当于把点ppp逆时针旋转了π/2\pi/2π/2。这并没有什么问题。在上一节的旋转矩阵的定义中,我们也说了这种形式的旋转矩阵是进行逆时针旋转。
但是问题在于,很多情况下点的位置是固定的,它并不会发生变化。旋转之后发生变化的是坐标系。也就是说,旋转过后,点ppp的实际位置并没有变,它还是在那个位置。但是它的坐标变了(p′=(0,1)p'=(0,1)p′=(0,1)),也就是所在的坐标系变了。那坐标系是怎么旋转的呢?刚好与坐标旋转的方向相反——顺时针旋转。
这个道理同时适用于三维的情况。
我觉得,能把这个问题想清楚很重要。
4.平移方向
进行平移变换的时候,同样存在上面的问题。
我们可以考虑一下。将点p=(1,1)p = (1,1)p=(1,1)按向量(1,2)(1,2)(1,2)进行平移,很显然平移后的坐标为p′=(2,3)p'=(2,3)p′=(2,3)。如下图所示:
同样,很多情况下点的位置是固定的,变化的是坐标。所以,如果点的位置不变,在进行平移之后点的坐标变为了p′=(2,3)p'=(2,3)p′=(2,3),那只能是坐标系进行了平移。那坐标系是怎么平移的呢?——与坐标平移方向相反,按向量(−1,−2)(-1,-2)(−1,−2)进行平移。如下图所示
总结一下:关于旋转和平移,必须要想清楚是对点(或向量)进行旋转平移还是对坐标系进行旋转平移。
关于位姿变换的一点体会相关推荐
- C#线程学习的一点体会和总结
C#线程学习如同在Java中一样,在c#中写一个多线程应用是非常简单的,本章将介绍如何在c#种开发多线程程序.在.net中线程是由System.Threading 名字空间所定义的.所以你必须包含这个 ...
- 如何开发一个可运维系统的一点体会
本文来自网易云社区 作者:施勇 我们在开发一个复杂系统的时候,常常会强调服务化.模块化.松散耦合等要求以达到高可用.高可靠及高性能等目的:比较少的人会考虑到系统的方便部署配置和运维,至少是在刚开始设计 ...
- 计算机教师教学心得体会,信息技术教师教学的一点体会
放飞学生的梦想 随着素质教育的不断深入,作为教师,我们认识到,教育不仅仅是追求百分之多少的升学率,而是追求每个学生生动.活泼.主动的发展.不仅仅是汇报时的总结.评比时的数据,而是教师与学生共度的生命历 ...
- 关于项目管理的一点体会
关于项目管理的一点体会 enno | 时间: 2011-11-03 | 18,423 Views 设计管理 "1人100个月完成的项目,不是100个人1个月就可以完成." 项目管 ...
- [转贴]关于项目管理的一点体会
关于项目管理的一点体会 这 段时间,一直在负责一个项目的管理与开发.在时间短.任务紧,而团队人员又大部分是没有经验的菜鸟的恶劣情况下,我带领接近40人的团队,终于在客户规定 的时间范围内如期交付产品. ...
- 【原创】C#玩高频数字彩快3的一点体会
购彩风险非常高,本人纯属很久以前对数字高频彩的一点研究.目前已经远离数字彩,重点研究足球篮球比赛资料库和赛果预测. 这是一篇在草稿箱保存了1年多的文章,一直没发现,顺便修改修改分享给大家.以后会有更多 ...
- 一点体会:找工作这事儿
发信人: NichoBlueR (MC HotDog), 信区: job 标 题: 一点体会:找工作这事儿 发信站: 饮水思源 (2008年01月25日10:53:48 星期五) 本人生科院弱弱小本, ...
- 少马爷改编《大保镖》的一点体会【ZZ】
linked from http://www.xiangsheng.org/asp/html/2002/04/20020430230000-1.htm '我们老爷子在传统相声上他绝不率由旧章,他不是刻 ...
- 关于开发转岗架构师的一点体会
今天看到有关于开发转岗架构师的文章,我从项目转到架构也有一年了,一点体会总结下. 需要的背景和业务技能: 1.已经是某一个业务领域的专家,在该领域有从设计.开发到上线,有完整的经历,业务领域被周围同事 ...
最新文章
- Spring事务管理 与 SpringAOP
- jsonp跨域ajax跨域get方法
- IE6/IE7下:inline-block解决方案
- RFID采用率迟迟不涨,原因何在?
- springboot websocket_SpringBoot 集成 WebSocket 实现前后端消息互传
- 乐鑫官宣:ESP32-S3真的来了!
- 使用webpack或者gulp去除多余CSS
- 吸尘器电机拆解图解_老少皆宜居家清理更轻松?吉米A6上手把无线吸尘器体验...
- 这四种攻击单片机的主要技术你了解多少?
- ArrayList和LinkedList如何实现的?我看你还有机会!
- 关于对于工作方式的一些总结。
- 大学四年,各阶段学习书籍推荐(少走弯路必备)
- 通道注意力机制keras_注意力机制及Keras实现
- 原生JS实现中文简繁切换,引入即可整站变繁体
- 新旧版MATLAB中的希尔伯特-黄变换(HHT)及其边际谱的求取问题
- 隐藏身份证中间几位工具类
- 当女程序员遇到了问题......太真实了
- HTML如何转化为canvas教程
- PyTorch(四)——视频数据的处理
- MySQL图形化用户界面客户端的安装与介绍(SQLyog)
热门文章
- 2022-2028全球与中国跨临界二氧化碳系统市场现状及未来发展趋势报告
- 2022-2028年中国塑料制品行业投资分析及前景预测报告(全卷)
- 2022-2028中国空中互联网系统市场现状及未来发展趋势报告
- debian10 Unable to correct problems, you have held broken packages.
- 交叉熵理解深度学习互信息
- pytorch旧版安装
- npm run dev 报错:missing script:dev
- MLIR中间表示和编译器框架
- deeplearning模型分析
- Ascend Pytorch算子功能验证