【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵

news2024/11/16 11:34:28

专栏系列文章如下:
【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍
【视觉SLAM十四讲学习笔记】第二讲——初识SLAM

本章将介绍视觉SLAM的基本问题之一:如何描述刚体在三维空间中的运动

旋转矩阵

点、向量和坐标系

三维空间由3个轴组成,所以一个空间点的位置可以由3个坐标指定。而刚体,它不光有位置,还有自身的姿态。举个例子,相机也可以看成三维空间的刚体,于是位置是指相机在空间中的哪个地方,而姿态则是指相机的朝向,合起来称为位姿

点: 点是空间中的基本元素,没有长度,没有体积。

向量: 把两个点连接起来,就构成了向量。向量可以看成从某点指向另一点的一个箭头。不要把向量与它的坐标两个概念混淆。一个向量是空间当中的一样东西,并不需要和若干个实数相关联的。只有当我们指定这个三维空间中的某个坐标系时,才可以谈论该向量在此坐标系下的坐标,也就是找到若干个实数对应这个向量。简单来讲:向量本身就是一个东西,如果把它放在一个坐标系中,这个向量才有了对应于这个坐标系的坐标。

用线性代数的知识来说,三维空间中的某个点的坐标也可以用线性空间R^3来描述。假设在这个线性空间内,有该空间的一组基 (或者说基底)(e1,e2,e3),(基就是张成这个空间的一组线性相关的向量)那么,任意向量a在这组基下就有一个坐标,这里 (a1,a2,a3)T 称为a在此基下的坐标。公式如下:

img

坐标的具体取值,一是和向量本身有关,二是和坐标系(基)的选取有关。坐标系通常由3个正交的坐标轴组成,非正交的很少见。通常使用右手系,给定xy轴时,z 轴就可以通过右手法则由x × y定义出来。左手系的第3个轴与右手系的方向相反。

向量内积: 可以描述向量间的投影关系

img

其中<a,b>指向量a,b的夹角。

向量外积:

外积的结果是一个向量,它的方向垂直于这两个向量,大小为 |a||b|sin〈a,b〉,是两个向量张成的四边形的有向面积。

img

对于外积运算,我们引入∧符号,把a写成一个矩阵,事实上是一个反对称矩阵(Skew-symmetric matrix),反对称矩阵A满足AT = -A。你可以将∧记成一个反对称符号。这样就把外积a × b写成了矩阵与向量的乘法ab,把它变成了线性运算。这意味着任意向量都对应着唯一的一个反对称矩阵,反之亦然:

在这里插入图片描述

向量和加减法、内外积,即使在不谈论它们的坐标时也可以计算。例如,虽然内积在有坐标时,可以用两个向量的分量乘积之和表达,但是即使不知道它们的坐标时,也可以通过长度和夹角来计算二者的内积。所以两个向量的内积结果和坐标系的选取是无关的。

坐标系间的欧式变换

考虑运动的机器人,常见的做法是设定一个惯性坐标系(或者叫世界坐标系),可以认为它是固定不动的。相机或机器人则是一个移动坐标系。相机视野中某个向量p,它在相机坐标系下的坐标为pc,而在世界坐标系下看,它的坐标为pw。如果要实现这两个坐标之间的转换,需要先得到该点针对机器人坐标系的坐标值,再根据机器人位姿变换到世界坐标系中。我们需要一种数学手段来描述这个变换关系。

两个坐标系之间的运动由一个旋转加上一个平移组成,这种运动称为刚体运动。相机运动就是一个刚体运动。刚体运动过程中,同一个向量在各个坐标系下的长度和夹角都不会发生变化,只可能有空间位置和姿态的不同。此时,我们说刚体坐标系到世界坐标之间,相差了一个欧氏变换(Euclidean Transform)。

在这里插入图片描述

欧氏变换由旋转平移组成。首先考虑旋转,设某个单位正交基 (e1, e2, e3) 经过一次旋转变成了 (e1’, e2’, e3’) ,那么,对于同一个向量 a(该向量并没有随着坐标系的旋转而发生运动),它在两个坐标系下的坐标为[a1, a2, a3]T和[a1’, a2’, a3’]T。因为向量本身没变,根据坐标的定义,有:

img

为了描述两个坐标之间的关系,我们对上述等式的左右两边同时左乘

img

那么左边的系数就变成了单位矩阵,把中间的矩阵拿出来,定义成一个矩阵R:

img

这个矩阵由两组基之间的内积组成,刻画了旋转前后同一个向量的坐标变换关系。只要旋转是一样的,那么这个矩阵也是一样的。可以说,矩阵R描述了旋转本身。因此称为旋转矩阵(Rotation matrix)。该矩阵各分量是两个坐标系基的内积,由于基向量的长度为1,所以实际上是各基向量的夹角之余弦。所以这个矩阵也叫方向余弦矩阵(Direction Cosine matrix)。

旋转矩阵有一些特别的性质。它是一个行列式为1的正交矩阵。反之,行列式为1的正交矩阵也是一个旋转矩阵。以把 n 维旋转矩阵的集合定义如下:

img

SO(n) 是特殊正交群(Special Orthogonal Group)的意思。这个集合由n维空间的旋转矩阵组成,特别地,SO(3) 就是指三维空间的旋转。通过旋转矩阵,我们可以直接谈论两个坐标系之间的旋转变换,而不用再从基开始谈起。

由于旋转矩阵为正交矩阵,它的逆(即转置)描述了一个相反的旋转:

在这里插入图片描述

在欧氏变换中,除了旋转之外还有平移。考虑世界坐标系中的向量a,经过一次旋转(用R描述)和一次平移t后,得到了a′,把旋转和平移合到一起,有:
在这里插入图片描述

t称为平移向量。平移部分只需把平移向量加到旋转之后的坐标上。

通过上式,我们用一个旋转矩阵R和一个平移向量t完整地描述了一个欧氏空间的坐标变换关系。定义坐标系1、坐标系2,那么向量a在两个系下坐标为 a1, a2,它们之间的关系应该是:

在这里插入图片描述

R12 是指把坐标系2的向量变换到坐标系1中。同理,如果我们要表达从1到2的旋转矩阵时,就写成R21。关于平移t12,实际对应的是坐标系1原点指向坐标系2原点的向量,在坐标系1下取的坐标,把它记作从1到2的向量。但是反过来的t21,即从2指向1的向量在坐标系2下的坐标,并不等于−t12,这里和两个系的旋转还有关系。从向量层面来看,它们确实是反向的关系,但这两个向量的坐标值并不是相反数。

变换矩阵与齐次坐标

上面的变换关系并非一个线性关系,一旦变换多次就会非常繁杂。所以我们引入齐次坐标和变换矩阵:

在这里插入图片描述

这是一个数学技巧:我们在一个三维向量的末尾添加 1,将其变成了四维向量,称为齐次坐标。对于这个四维向量,我们可以把旋转和平移写在一个矩阵里面,使得整个关系变成线性关系。该式中,矩阵T称为变换矩阵(Transform Matrix)。

我们暂时用ã表示a的齐次坐标。那么依靠齐次坐标和变换矩阵,两次变换的叠加就可以有很好的形式:

在这里插入图片描述

但是懒得区分齐次和非齐次的符号了,所以在不引起歧义的情况下,我们就直接把它写成b=Ta的样子,默认其中进行了齐次坐标的转换。要注意的是,不进行齐次坐标转换时,这边的乘法在矩阵维度上是不成立的。

变换矩阵T具有比较特别的结构:左上角为旋转矩阵,右侧为平移向量,左下角为0 向量,右下角为 1。这种矩阵又称为特殊欧氏群(Special Euclidean Group):

img

与 SO(3) 一样,求解该矩阵的逆表示一个反向的变换:

&pos_id=img-bPvHSBFk-1700485941449)
同样,我们用T12 这样的写法来表示从2到1的变换。

总结:

首先介绍了向量及其坐标表示,并介绍了向量间的运算;然后,坐标系之间的运动由欧氏变换描述,它由平移和旋转组成。旋转可以由旋转矩阵 SO(3) 描述,而平移直接由一个R^3向量描述。最后,如果将平移和旋转放在一个矩阵中,就形成了变换矩阵 SE(3)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1231727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JMeter使用与结果分析

1.如何得到可靠的测试报告&#xff1f; 以上我们便完成了一次简单的测试案例&#xff0c;但我们的测试还未结束。我们需要对测试结果进行分析&#xff0c;但是在真实项目中上述的测试结果是不可靠的&#xff0c;只能用作调试。你如果细心的话&#xff0c;应该能在运行Jmeter的…

碰到一个逆天表中表数据渲染

1. 逆天表中表数据问题 我有一个antd-table组件&#xff0c;他的编辑可以打开一个编辑弹窗打开弹窗里面还会有一个表格&#xff0c;如果这个表格的column是在外层js文件中保存的话&#xff0c;那么第一次打开会正常渲染数据&#xff0c;再次打开就不会渲染&#xff0c;即使是已…

彻底弄清Python软件包安装流程并解决安装错误

彻底弄清Python软件包安装流程并解决安装错误 前言&#xff1a;写这篇文章的初衷也是因为以前饱受Python环境配置和软件包安装的摧残&#xff0c;所以写下这篇文章希望帮助同样深陷泥潭的小伙伴们&#xff0c;该文会带你理解关于安装软件包的流程。&#xff08;tips&#xff1…

大数据Doris(二十五):Stream Load数据导入演示和其他导入案例

文章目录 数据导入演示和其他导入案例 一、数据导入演示

Java获取指定日期到当前日期的差距

Java获取指定日期到当前日期的差距 一、指定日期到今天的y年m月d日 private JSONObject getYesrMonthDay(String dataParam){JSONObject res new JSONObject();/*只比较年月日&#xff0c;不要时间*/DateTimeFormatter df DateTimeFormatter.ofPattern("yyyy-MM-dd&quo…

Linux入门攻坚——6、磁盘管理——分区及文件系统管理

磁盘管理主要涉及分区的管理&#xff0c;以及分区后的文件系统管理。 磁盘的使用大体要分两步&#xff1a; 文件系统也是一个软件&#xff0c;根是自引用的。 文件系统的全局结构&#xff1a;物理格式&#xff1a; 一个磁盘刚被生产出来的时候&#xff0c;它里边没有划分扇区…

什么是RS485通信

RS-485是一种通讯接口标准&#xff0c;RS就是Recommended Standard的缩写&#xff08;推荐标准的意思&#xff09;485是标识号。 RS485采用总线的接线方式&#xff0c;广泛应用于数据采集和控制&#xff0c;它的主要优点之一是它允许将多个RS485设备放在同一条总线上。 多设备…

Python如何实现原型设计模式?什么是原型设计模式?Python 原型设计模式示例代码

什么是原型&#xff08;ProtoType&#xff09;设计模式&#xff1f; 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;旨在通过复制现有对象来创建新对象&#xff0c;而无需通过标准的构造方式。它允许我们基于现有对象创建新对象&#xf…

【Python/C++ 递归】汉诺塔

汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重…

车牌识别 支持12种中文车牌类型 车牌数据集下载

开源代码 如果觉得有用&#xff0c;不妨给个Star⭐️&#x1f31f;支持一下吧~ 谢谢&#xff01; Acknowledgments & Contact 1.WeChat ID: cbp931126 2.QQ Group&#xff1a;517671804 加微信(备注&#xff1a;PlateAlgorithm),进讨论群可以获得10G大小的车牌检测和识…

【EI会议征稿】第三届材料工程与应用力学国际学术会议(ICMEAAE 2024)

第三届材料工程与应用力学国际学术会议&#xff08;ICMEAAE 2024&#xff09; 2024 3rd International Conference on Materials Engineering and Applied Mechanics 2024年第三届材料工程与应用力学国际学术会议&#xff08;ICMEAAE 2024&#xff09;将于2024年3月15-17日在中…

【活动回顾】ABeam News | 庆祝ABeam德硕与毕博中国战略合作十周年,关系再升级

国家会展中心 Date.2023.11.6 ​China International Import Expo 上周&#xff0c;ABeam作为毕博中国长期的战略合作伙伴&#xff0c;受邀出席了毕博中国在第六届进博会展台召开的战略合作十周年庆祝仪式。 本次战略合作庆祝仪式在进博会这个充满活力、创新与友谊的舞台举…

【Linux】 线程

pthread_join: 获取线程返回值 #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #include <string.h>/*** 测试 pthread_join* 阻塞等待一个子线程的退出&#xff0c;可以接收到某一个子线程调用pthread_ex…

企业OA办公系统的设计与实现【附源码】

企业办公自动化系统设计与实现 毕业论文 摘 要 办公自动化&#xff08;Office Automation,简称OA&#xff09;是将现代化办公和计算机网络功能结合起来 的一种新型的办公方式。企业办公自动化系统在此基础上实现企业的快速运转和交流&#xff0c;进而 有效提高企业办公效率。 本…

MCU内存基础知识

文章目录 一、存储器分类二、C语言内存分区内存区三、STM32启动文件分析四、应用分析 一、存储器分类 RAM&#xff08;Random Access Memory) &#xff1a;掉电之后就丢失数据&#xff0c;读写速度块 ROM (Read Only Memory) &#xff1a;掉电之后仍然可以保持数据 单片机的RA…

webshell免杀之传参方式

1.Cookie 由于Cookie基本上是每个web应用都需要使用到的&#xff0c;php应用在默认情况下&#xff0c;在Cookies请求头中会存在一个PHPSESSIDxxxx这样的cookie&#xff0c;其实这个就可以成为我们的传参位置 使用burp抓包将内容改成base64加密后的命令 可以看到已经执行成功了…

英飞凌TC3xx的LMU SRAM保护机制(二)

目录 1.SRAM保护配置使能 2.测试结果分析 3.小结 我们接着上文继续来梳理如何配置LMU的保护机制 英飞凌TC3xx的LMU SRAM保护机制(一)-CSDN博客 1.SRAM保护配置使能 简单举两个例子&#xff0c;地址下限寄存器如下&#xff1a; 可以看到使用SRI地址的bit31-5用于作为边界&am…

Swift-day 2

1、数据绑定&#xff0c;改变标题 State private var zoomed: Bool false 属性包装器包装的变量self.title 单向绑定 self.$textInput 双向绑定 传的是数据结构 self.title self.textInput 赋值是String self._titletitle //绑定类型加下划线2、数据绑定&#xff0c;传递结构…

毕业设计JSP 2384网上diy蛋糕店管理系统【程序源码+讲解视频+调试运行】

一、摘要 本文将介绍一个功能全面、易于使用的网上DIY蛋糕店管理系统。该系统包括用户和管理员两种用户&#xff0c;每种用户都有相应的功能模块。系统实现了网站首页、用户注册/登录、蛋糕展示、综合排行、购物车、蛋糕DIY和用户中心等功能&#xff0c;同时管理员还可以进行管…

测试之路,女孩子软件测试-职业规划建议,路就在脚下...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、测试岗是不是加…