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

专栏系列文章如下:
【视觉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.mzph.cn/news/153445.shtml

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

相关文章

担忧CentOS停服?KeyarchOS系统来支撑

担忧CentOS停服&#xff1f;KeyarchOS系统来支撑 近年发生的“微软黑屏门”、“微软操作系统停更”等安全事件&#xff0c;敲响了我国 IT 产业的警钟&#xff0c;建立由我国主导的 IT 产业生态尤为迫切。对此&#xff0c;我国信息技术应用创新行业乘势而起&#xff0c;旨在通过…

使用大语言模型 LLM 做文本分析

本文主要分享 传统聚类算法 LLM与嵌入算法 嵌入算法聚类 LLM的其他用法 聚类是一种无监督机器学习技术&#xff0c;旨在根据相似的数据点的特征将其分组在一起。使用聚类成簇&#xff0c;有助于解决各种问题&#xff0c;例如客户细分、异常检测和文本分类等。尽管传统的聚…

vue3插槽的使用

什么是插槽 Vue 3 插槽&#xff08;Slots&#xff09;是一个强大的工具&#xff0c;用于在组件之间传递内容和逻辑。通过使用插槽&#xff0c;我们可以将子组件中的内容插入到父组件中的特定位置。本篇文章将总结 Vue 3 插槽的基本用法、特点以及使用场景。 基本用法 插槽分为…

DSCNet:基于拓扑几何约束的动态蛇形卷积管状结构分割

文章目录 摘要1、简介2、相关研究2.1、基于网络设计的方法2.2、基于特征融合的方法2.3、基于损失函数的方法 3、方法3.1、动态蛇形卷积&#xff08;Dynamic Snake Convolution&#xff09;3.2、多视图特征融合策略3.3、拓扑连续性约束损失 4、实验配置4.1、数据集4.2、评估指标…

Redis篇---第十一篇

系列文章目录 文章目录 系列文章目录前言一、说说Redis持久化机制二、缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题三、热点数据和冷数据是什么前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…

harmonyOS鸿蒙开发工具下载安装以及使用流程

注册账号 进入鸿蒙官方网站&#xff1a;https://www.harmonyos.com/ 推荐使用手机号注册 进行实名认证 发布工具 华为集成开发环境IDE DevEco Device Tool下载 | HarmonyOS设备开发 下载开发工具 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 安装 无脑下一步选…

X2Keyarch迁移工具实战 | 将CentOS高效迁移至浪潮云峦操作系统KeyarchOS

X2Keyarch迁移工具实战 | 将CentOS高效迁移至浪潮云峦操作系统KeyarchOS 1. 搭建仿真线上业务环境2. 安装KeyarchOS操作系统和X2Keyarch迁移工具3. 将CentOS系统业务迁移至KeyarchOS系统 浪潮信息云峦操作系统KeyarchOS基于Linux Kernel、OpenAnolis等开源技术自主研发的一款服…

【智能家居项目】FreeRTOS版本——将裸机程序改造成FreeRTOS程序 | DHT11温湿度传感器

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《智能家居项目》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 如上图所示是裸机版本的智能家居项目总体框架结构&#xff0c;这篇文章开始&#xff0c;本喵要…

基于GB28181搭建流媒体服务器--1.概念解析

什么是GB28181 GB28181(国标28181)&#xff0c;全称为《中华人民共和国公共安全视频监控联网系统技术要求》&#xff0c;是中国国家标准委员会发布的一个针对公共安全视频监控领域的标准框架。该标准指导了视频监控设备之间的联网互通&#xff0c;统一管理和控制&#xff0c;并…

git拉取普通idea Java项目module没有build的问题

在不断完成一个项目的时候&#xff0c;会有不断新加的module&#xff0c;我们用git拉取时会发生没有识别新module的情况。 解决方法是右键项目名称&#xff0c;然后点击Open Module Settings 接下来&#xff0c;点击Module&#xff0c;加号&#xff0c;新建Module的名字就是在g…

【数据结构】【版本2.0】【树形深渊】——二叉树入侵

目录 引言 一、树的概念与结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用 二、二叉树的概念与结构 2.1 二叉树的概念 2.2 特殊二叉树 满二叉树 完全二叉树 2.3 现实中的二叉树 2.4 二叉树的性质 2.5 二叉树的存储结构 顺序存储 链式…

深度学习到智能小车(1)深度学习框架

0.前提 最近新开了一门叫机器学习的课程&#xff0c;老师一直在跟我们讲一些有关这方面的知识&#xff0c;告诉我们一定要学好数学&#xff0c;因为数学是算法的基础。我手上的donkeycar刚好也涉及到Keras深度神经网络&#xff0c;所以出于好奇我去图书馆借回了一本叫《Keras深…

python urllib open 头部信息错误

header 有些字符在 lighttpd server 中无法正常解析,需要转换 quteo 可以转换 就跨平台而言,Rust 和 python 一样优秀,看了在stm32 上使用 Rust 进行编程,从一定程度上,而言&#xff0c;稳定和安全性要比C 开发的好的多,说出来可能不信&#xff0c;在单片机上是可以对空指针进行…

【MySQL】聚合函数、group by、update、delete

聚合函数、group by、update、delete 前言正式开始update将孙悟空同学的数学成绩变更为 80 分将曹孟德同学的数学成绩变更为 60 分&#xff0c;语文成绩变更为 70 分将总成绩倒数前三的 3 位同学的数学成绩加上 30 分将所有同学的语文成绩更新为原来的 2 倍 delete删除孙悟空同…

【C++上层应用】1. 异常处理

文章目录 【 1. C的标准异常 】【 2. 异常转移处理 】2.1 throw 抛出异常2.2 try 捕获异常2.3 catch 捕获异常2.4 实例 【 3. 定义新的异常 】 异常是程序在执行期间产生的问题&#xff0c;比如编译报错、链接错误等。 【 1. C的标准异常 】 C 提供了一系列标准的异常&#xf…

[Spring Cloud] Nacos 实战 + Aws云服务器

文章目录 前言一、拥有一台Aws Linux服务器1.1、选择Ubuntu版本Linux系统1.2、创建新密钥对1.3、网络设置1.4、配置成功&#xff0c;启动实例1.5、回到实例区域1.6、进入具体的实例1.7、设置安全组 二、在Mac上连接Aws云服务&#xff0c;并安装配置JDK112.1、解决离奇的错误2.2…

Zynq-Linux移植学习笔记之66- 国产ZYNQ通过裕太PHY8521连接国产交换芯片

1、背景介绍 ZYNQ通过裕太PHY 8521主要连接两种国产交换芯片&#xff0c;一种为盛科的CTC8096&#xff0c;另一种为32所的JEM5396。框图示意如下&#xff1a; 2、硬件状态确认 首先检查phy的模式&#xff0c;确认为SGMII_MAC-RGMII_PHY 可通过读出A001寄存器确认状态 读出来应…

RESTful API 设计指南——开篇词

引言 十年后的今天&#xff0c;我终于学会了RESTful API。 以上&#xff0c;就是我最近一个月的心路历程。入职新公司不到2周&#xff0c;自己都还没完全理解RESTful API就要求给校招应届生培训&#xff0c;着实压力山大。培训结束后也感觉收获颇丰&#xff0c;遂总结分享出来&…

牛客——OR36 链表的回文结构(C语言,配图,快慢指针)

目录 思路一&#xff1a;链表翻转 思路二&#xff1a;快慢指针&#xff0c;分别从头和尾间开始比较 本题是没有对C的支持的&#xff0c;但因为CPP支持C&#xff0c;所以这里就用C写了&#xff0c;可以面向更多用户 链表的回文结构_牛客题霸_牛客网 (nowcoder.com) 思路一&am…

redis数据结构

redis数据结构 redis全名(Remote Dictionary Server)&#xff0c;即远程字典服务 redis的值的数据结构类型有String、List、Set、Hash、zset(sorted set&#xff0c;有序集合)、Bitmaps(位图)、HyperLogLogs 注意&#xff1a;我使用的版本是6.0.10&#xff0c;不同版本可能略有…