关于位姿变换的一点体会

  • 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=⎣⎡​100​0cos(θ)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(θ)0​001​⎦⎤​

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)进行平移。如下图所示

总结一下:关于旋转和平移,必须要想清楚是对点(或向量)进行旋转平移还是对坐标系进行旋转平移。

关于位姿变换的一点体会相关推荐

  1. C#线程学习的一点体会和总结

    C#线程学习如同在Java中一样,在c#中写一个多线程应用是非常简单的,本章将介绍如何在c#种开发多线程程序.在.net中线程是由System.Threading 名字空间所定义的.所以你必须包含这个 ...

  2. 如何开发一个可运维系统的一点体会

    本文来自网易云社区 作者:施勇 我们在开发一个复杂系统的时候,常常会强调服务化.模块化.松散耦合等要求以达到高可用.高可靠及高性能等目的:比较少的人会考虑到系统的方便部署配置和运维,至少是在刚开始设计 ...

  3. 计算机教师教学心得体会,信息技术教师教学的一点体会

    放飞学生的梦想 随着素质教育的不断深入,作为教师,我们认识到,教育不仅仅是追求百分之多少的升学率,而是追求每个学生生动.活泼.主动的发展.不仅仅是汇报时的总结.评比时的数据,而是教师与学生共度的生命历 ...

  4. 关于项目管理的一点体会

    关于项目管理的一点体会 enno | 时间: 2011-11-03 | 18,423 Views  设计管理 "1人100个月完成的项目,不是100个人1个月就可以完成." 项目管 ...

  5. [转贴]关于项目管理的一点体会

    关于项目管理的一点体会 这 段时间,一直在负责一个项目的管理与开发.在时间短.任务紧,而团队人员又大部分是没有经验的菜鸟的恶劣情况下,我带领接近40人的团队,终于在客户规定 的时间范围内如期交付产品. ...

  6. 【原创】C#玩高频数字彩快3的一点体会

    购彩风险非常高,本人纯属很久以前对数字高频彩的一点研究.目前已经远离数字彩,重点研究足球篮球比赛资料库和赛果预测. 这是一篇在草稿箱保存了1年多的文章,一直没发现,顺便修改修改分享给大家.以后会有更多 ...

  7. 一点体会:找工作这事儿

    发信人: NichoBlueR (MC HotDog), 信区: job 标 题: 一点体会:找工作这事儿 发信站: 饮水思源 (2008年01月25日10:53:48 星期五) 本人生科院弱弱小本, ...

  8. 少马爷改编《大保镖》的一点体会【ZZ】

    linked from http://www.xiangsheng.org/asp/html/2002/04/20020430230000-1.htm '我们老爷子在传统相声上他绝不率由旧章,他不是刻 ...

  9. 关于开发转岗架构师的一点体会

    今天看到有关于开发转岗架构师的文章,我从项目转到架构也有一年了,一点体会总结下. 需要的背景和业务技能: 1.已经是某一个业务领域的专家,在该领域有从设计.开发到上线,有完整的经历,业务领域被周围同事 ...

最新文章

  1. Spring事务管理 与 SpringAOP
  2. jsonp跨域ajax跨域get方法
  3. IE6/IE7下:inline-block解决方案
  4. RFID采用率迟迟不涨,原因何在?
  5. springboot websocket_SpringBoot 集成 WebSocket 实现前后端消息互传
  6. 乐鑫官宣:ESP32-S3真的来了!
  7. 使用webpack或者gulp去除多余CSS
  8. 吸尘器电机拆解图解_老少皆宜居家清理更轻松?吉米A6上手把无线吸尘器体验...
  9. 这四种攻击单片机的主要技术你了解多少?
  10. ArrayList和LinkedList如何实现的?我看你还有机会!
  11. 关于对于工作方式的一些总结。
  12. 大学四年,各阶段学习书籍推荐(少走弯路必备)
  13. 通道注意力机制keras_注意力机制及Keras实现
  14. 原生JS实现中文简繁切换,引入即可整站变繁体
  15. 新旧版MATLAB中的希尔伯特-黄变换(HHT)及其边际谱的求取问题
  16. 隐藏身份证中间几位工具类
  17. 当女程序员遇到了问题......太真实了
  18. HTML如何转化为canvas教程
  19. PyTorch(四)——视频数据的处理
  20. MySQL图形化用户界面客户端的安装与介绍(SQLyog)

热门文章

  1. 2022-2028全球与中国跨临界二氧化碳系统市场现状及未来发展趋势报告
  2. 2022-2028年中国塑料制品行业投资分析及前景预测报告(全卷)
  3. 2022-2028中国空中互联网系统市场现状及未来发展趋势报告
  4. debian10 Unable to correct problems, you have held broken packages.
  5. 交叉熵理解深度学习互信息
  6. pytorch旧版安装
  7. npm run dev 报错:missing script:dev
  8. MLIR中间表示和编译器框架
  9. deeplearning模型分析
  10. Ascend Pytorch算子功能验证