【视觉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;旨在通过…

给Fetch添加超时功能

引言 在Web开发中&#xff0c;使用Fetch API进行网络请求是一种常见的方式。然而&#xff0c;Fetch API默认不包含超时功能&#xff0c;这可能导致程序在网络不稳定的情况下长时间阻塞。为了解决这个问题&#xff0c;我们可以通过一些技术手段来为Fetch请求添加超时功能&#…

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

宇视科技通过stm32叠加字符串

void sendtoYskj(uint8_t *cameraIp,uint16_t cameraSrcPort,uint16_t cameraDstPort,uint8_t *userName,uint8_t *pwd,uint8_t lineNum,int camNo)//宇视科技 { int flag = 1; int sock = -1,connected; int send_data_len; int recv_data_len; //char str…

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…

java发送媒体类型为multipart/form-data的请求

文章目录 public static String sendMultipartFormDataPostRequest(String urlString, String data) throws IOException {String fullUrl urlString "?" data;log.info("完整请求路径为{}", fullUrl);URL url new URL(fullUrl);HttpURLConnection co…

3Dexcite deltgen 2022x 新功能

3DEXCITE DELTAGEN 2022x 现已发布&#xff0c;此次新版发布包含 DELTAGEN 2022x&#xff0c;DELTAGEN MARKETING SUITE 2022x&#xff0c;DELTAGEN XPLORE 2022x&#xff0c;以及软件开发工具包 SDK FOR DELTAGEN 2022x 版本。赶快来获取最新 DG 版本&#xff0c;了解新增内容…

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

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

超大规模和隐私保护,融云如何助力 Web3 社交

这里写自定义目录标题 Web3 世界需要什么样的社交组件&#xff1f;开发者需要什么样的服务保障&#xff1f; ​ 现在&#xff0c;无论是资本市场、媒体舆论还是大厂论战&#xff0c;我们几乎要淹没在大模型中了。不知道还有没有人记得&#xff0c;就在 ChatGPT 掀起热议的几乎同…

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

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

在Win系统中创建命令

在 Windows 中&#xff0c;你可以使用命令别名&#xff08;alias&#xff09;来创建自定义的命令&#xff0c;让其执行特定的命令序列。你可以通过以下步骤来设置&#xff1a; 使用 doskey 命令创建命令别名&#xff1a; 打开命令提示符&#xff1a;在开始菜单中搜索 “cmd” …

useEffect 和useLayoutEffect 的区别

useEffect 可以接收两个参数&#xff0c;第一个参数是回调函数&#xff0c;回调函数的返回值是销毁时调用&#xff0c;第二个参数是依赖项, 依赖项是[],useEffect只执行一次 //使用useEffect之前要先引入 import React, { useEffect,useState } from react import ReactDOM fr…