视觉SLAM十四讲:从理论到实践(Chapter3:三维空间刚体运动)

news2024/12/23 4:33:51

前言

学习笔记,仅供学习,不做商用,如有侵权,联系我删除即可

目标

  1. 理解三维空间的刚体运动描述方式:旋转矩阵、变换矩阵、四元数和欧拉角。
  2. 掌握Eigen库的矩阵、几何模块的使用方法。

3.1 旋转矩阵

3.1.1 点、向量和坐标系

内积:a \cdot b = a^{T}b = \sum_{i=1}^{3}a_{i}b_{i}=|a||b|cos\left \langle a,b \right \rangle

外积:

外积的结果是一个向量,方向垂直于这两个向量,大小为|a||b|sin<a,b>,是两个向量张成的四边形的有向面积。a^是反对称矩阵。 

反对称矩阵A满足:A^{T}=-A

3.1.2 坐标系间的欧氏变换

刚体运动:两个坐标系之间的运动由一个旋转加上一个平移组成。

欧式变换由旋转和平移组成。

旋转矩阵:行列式为1的正交矩阵。反之,行列式为1的正交矩阵也是一个旋转矩阵。

n维旋转矩阵的集合定义如下:

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

旋转矩阵的逆(转置)描述了一个相反的旋转。

世界坐标系中的向量a,经过一次旋转和一次平移后得到a{}',把旋转平移合到一起,有:

实际当中会定义坐标系1、坐标系2,向量a在两个坐标系下的坐标为a_1,a_2,那么有,这里的R_{12}是指把坐标系2的向量变换到坐标系1中,下标是从右读到左的。t_{12}对应的是坐标系1原点指向坐标系2原点的向量,在坐标系1下取的坐标。

3.1.3 变换矩阵和齐次坐标

齐次坐标:在三维向量的末尾添加1,将其变成四维向量。

对于齐次坐标,可以把旋转和平移写在一个矩阵里,使整个关系变成线性关系,矩阵T为变换矩阵。

矩阵T结构特别:左上角为旋转矩阵,右侧为平移向量,左下角为0向量,右下角为1,这种矩阵称为特殊欧式群(Special Euclidean Group)

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

T_{12}表示从2到1的变换。本书中不刻意区分齐次和非齐次,默认使用的是符合运算法则的坐标。例如Ta就是齐次坐标,Ra就是非齐次坐标,否则不满足矩阵运算法则,无法运算。 

3.2 实践:Eigen

待完善

3.3 旋转向量和欧拉角

3.3.1 旋转向量

矩阵表示方式的缺点:

  1. SO(3)的旋转矩阵有9个量,但一次旋转只有3个自由度。因此这种表达方式是冗余的。变换矩阵更是如此。
  2. 旋转矩阵自身带有约束,且行列式为1,变换矩阵也是如此。因此当想估计或优化一个旋转矩阵或变换矩阵时,这些约束会使求解变得更困难

事实上,任意旋转都可以用一个旋转轴和一个旋转角来刻画。

3.3.2 欧拉角

旋转矩阵或旋转向量不能直观描述旋转究竟是什么样的。

欧拉角提供了直观的方式:把一个旋转分解成3次绕不同轴的旋转。如果讨论的更细一些,还需要区分每次是绕固定轴旋转还是绕旋转之后的轴旋转。

经典的一种欧拉角:[r,p,y]^T,rpy是一种常用的欧拉角。但大部分领域在使用欧拉角时都有各自的坐标方向和顺序上的习惯。常用的旋转方式:ZYX,逆时针旋转为正,顺时针旋转为负。

  • 绕Z轴:偏航角yaw
  • 旋转之后的Y轴旋转:俯仰角pitch
  • 旋转之后的X轴旋转:滚转角roll

缺点:存在万向锁问题(Gimbal Lock):在俯仰角为±90°时,第一次旋转和第三次旋转将使用同一个轴,使得系统丢失了一个自由度(由3次旋转变成了2次旋转)。这被称为奇异性问题。

因此,欧拉角不适用于插值和迭代,SLAM中也很少用欧拉角表达姿态,滤波或优化中也不会用欧拉角表达旋转(因为奇异性)。但是转换成欧拉角可以快速验证结果是否正确,可用于可视化

3.4 四元数(Quaternion)

3.4.1 四元数的定义

一个四元数有一个实部和三个虚部。本书把实部写在前面:q=q_0+q_1i+q_2j+q_3k,三个虚部满足以下的关系:

3.4.2 四元数的运算

 

3.4.3 用四元数表示旋转

首先把三维空间点用一个虚四元数表示:p=[0,x,y,z]^T=[0,v]^T

那么旋转后的点p'表示为:p'=qpq^{-1}

3.5 相似、仿射、射影变换

  1. 刚体变换T=\begin{bmatrix} R & t\\ 0^{T} & 1 \end{bmatrix}
  2. 相似变换T_s=\begin{bmatrix} sR & t\\ 0^{T} & 1 \end{bmatrix},增加一个自由度,允许物体均匀缩放
  3. 仿射变换T_A=\begin{bmatrix} A & t\\ 0^{T} & 1 \end{bmatrix},A只需要是一个可逆矩阵,不鄙视正交矩阵
  4. 射影变换T_P=\begin{bmatrix} A & t\\ a^{T} & v \end{bmatrix}

总结

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

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

相关文章

详解xlsxwriter 操作Excel的常用API

我们知道可以通过pandas 对excel 中的数据进行处理分析&#xff0c;但是pandas本身对格式化数据方面提供了很少的支持&#xff0c;如果我们想对pandas进行数据分析后的数据进行格式化相关操作&#xff0c;我们可以使用xlsxwriter&#xff0c;本文就对xlsxwriter的常见excel格式…

一觉醒来 AI科技圈发生的大小事儿 05月13日

&#x1f4f3;博弈论让 AI 更加正确、高效&#xff0c;LLM 与自己竞争 研究团队设计了共识博弈&#xff0c;通过让语言模型的生成器和判别器相互博弈来提高模型的准确性和内部一致性。这种方法不需要对基础模型进行训练或修改&#xff0c;可以在笔记本电脑上快速执行。研究结果…

山洪灾害无线预警广播系统的主要设备和功能

一、背景 山洪泥石流是指在山区或者其他沟谷深壑&#xff0c;地形险峻的地区&#xff0c;因为暴雨、暴雪或其他自然灾害引发的洪水、山体滑坡并携带有大量泥沙以及石块的特殊洪流。山洪泥石流等地质灾害具有突然性以及流速快&#xff0c;流量大&#xff0c;物质容量大和破坏力…

C# SortedList 用法

文章目录 基本用法主要属性和方法注意事项 SortedList 的一些高级用法和注意事项。自定义排序规则线程安全性性能考量与其他集合的对比 SortedList 是 C# 中的一个集合类&#xff0c;它是一个键/值对集合&#xff0c;其中的键自动按顺序排序。这个类位于 System.Collections.G…

在Windows环境下安装CPU版的PyTorch

PytTorch是基于Python开发的&#xff0c;首先需要安装Python&#xff0c;Python的安装很简单&#xff0c;这里不再赘述。而 Windows用户能直接通过conda、pip和源码编译三种方式来安装PyTorch。 打开PyTorch官网&#xff08;PyTorch&#xff09;&#xff0c;在主页中根据自己的…

2024年NOC大赛创客智慧(西瓜创客)Python复赛编程真题模拟试卷包含答案

NOC复赛python模拟题 1.编写一个程序&#xff0c;提示用户输人一个矩形的长度和宽度&#xff0c;并输出其面积, 2.试计算在区间 1 到 n的所有整数中,数字x(0≤x≤9)共出现了多少次?例如在 1到11 中&#xff0c;即在 1,2,3.45,6.7,8.9,10,11 中&#xff0c;数字 1出现了 4 次.…

买货查窜货过程中的可能情况

控价除了要管控渠道中的低价、乱价链接外&#xff0c;还可能需要解决窜货问题&#xff0c;当窜货问题蔓延不及时解决时&#xff0c;渠道会越来越受影响&#xff0c;所以治理窜货也是控价过程中很重要的一步&#xff0c;窜货问题的治理多通过买货溯源来解决&#xff0c;买货要先…

关于LED的小事

基础知识 LED&#xff08;Light Emitting Diode&#xff09;是一种能够将电能转换为光能的发光二极管。LED的发明者是美国的物理学家罗伯特诺伊斯和化学家哈里贾斯特。LED的原理是利用半导体材料中的电子和空穴在禁带中产生复合&#xff0c;从而释放出光子&#xff0c;达到发光…

QLExpress入门及实战总结

文章目录 1.背景2.简介3.QLExpress实战3.1 基础例子3.2 低代码实战3.2.1 需求描述3.2.1 使用规则引擎3.3.2 运行结果 参考文档 1.背景 最近研究低代码实现后端业务逻辑相关功能&#xff0c;使用LiteFlow作为流程编排后端service服务, 但是LiteFlow官方未提供图形界面编排流程。…

深入 Go 语言:使用 math/rand 包实现高效随机数生成

深入 Go 语言&#xff1a;使用 math/rand 包实现高效随机数生成 介绍math/rand 包的核心功能设计哲学应用场景 基础使用方法初始化和种子设置设置种子创建私有随机数生成器 基础函数详解生成整数生成特定范围的整数生成浮点数随机置乱数组 进阶技巧随机数的统计属性生成正态分布…

背背佳卷土重来90天爆卖一个亿,这次盯上了成年人……

提起背背佳这三个字&#xff0c;除了00后不熟悉外&#xff0c;在座的柴油们应该没有陌生的吧&#xff01;不管你是90后&#xff0c;80后&#xff0c;还是70后&#xff0c;60后。 但是&#xff0c;似乎好多年&#xff0c;这三个字没出现过了。 但是这两天&#xff0c;背背佳这三…

嵌入式STM32中I2C控制器外设详解

STM32中的I2C外设主要负责IIC协议与外界进行通信,就像USART外设一样,我们在学习的过程中,需要抓住I2C应用的重点。 STM32在使用I2C协议时,可以通过两种方式, 一是软件模拟协议 意思是使用CPU直接控制通讯引脚的电平,产生出符合通讯协议标准的逻辑。例如,像点亮LED那样…

高并发系统设计-系统的“三高“目标

目录 一、高并发 1.高并发相关指标 2.如何提高并发能力 二、高并发的目标 1.高性能 2.高可用 3.高扩展 一、高并发 高并发&#xff08;High Concurrency&#xff09;是互联网分布式系统架构设计中必须考虑的因素之一&#xff0c;它通常是指&#xff0c;通过设计保证系统能…

实战6:线性回归电影票房预测-完整代码数据论文-可直接运行

直接看论文: 数据: 数据分析特征分析: 预测结果: 完整代码: from sklearn import preprocessing import random from sklearn.model_selection import train_test_split

Docker 基础认识

文章目录 概念铺垫&#xff08;1&#xff09;概念铺垫&#xff08;2&#xff09;概念铺垫 &#xff08;3&#xff09;概念铺垫&#xff08;4&#xff09;Docker 定义Docker 特点Docker 架构 概念铺垫&#xff08;1&#xff09; 虚拟化相关概念 物理机&#xff1a;实际的服务器…

【人工智能Ⅱ】实验7:目标检测算法2

实验7&#xff1a;目标检测算法2 一&#xff1a;实验目的与要求 1&#xff1a;了解一阶段目标检测模型-YOLOv3模型的原理和结构. 2&#xff1a;学习通过YOLOv3模型解决目标检测问题。 二&#xff1a;实验资源 pytorch代码各文件夹内容介绍 1. data_loader.py&#xff1a;能…

【Kali Linux工具篇】wpscan的基本介绍与使用

介绍 WPScan是Kali Linux默认自带的一款漏洞扫描工具&#xff0c;它采用Ruby编写&#xff0c;能够扫描WordPress网站中的多种安全漏洞&#xff0c;其中包括主题漏洞、插件漏洞和WordPress本身的漏洞。最新版本WPScan的数据库中包含超过18000种插件漏洞和2600种主题漏洞&#x…

LeetCode 力扣题目:买卖股票的最佳时机 III

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

template——模板进阶(C++)

在之前的文章中&#xff0c;介绍了模板初阶&#xff1a;Cpp_桀桀桀桀桀桀的博客-CSDN博客 在本篇中将会对模板进一步的讲解。本篇中的主要内容为&#xff1a;非类型模板参数、函数模板的特化、类模板的特化&#xff08;其中包含全特化和偏特化&#xff09;&#xff0c;最后讲解…

什么是数据中心?关于数据中心的这些知识一定要知道

在数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。数据中心&#xff0c;作为支撑海量数据存储、处理和分发的基础设施&#xff0c;其战略地位日益凸显。它们不仅是信息技术的心脏&#xff0c;更是推动现代商业决策、创新和运营的核心引擎。随着云计算、大数据、物联网…