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

前言

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

目标

  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}

总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

建立一物一码数字化营销体系,纳宝科技助力五丰黎红在调味品行业再创佳绩!

五丰黎红隶属于华润五丰集团&#xff0c;公司历史可溯源至1979年&#xff0c;前身是汉源花椒油厂&#xff0c;是一家拥有悠久历史的调味品品牌。一直以来&#xff0c;五丰黎红坚持调味品原料、研发、生产、加工一体化的全产业链经营模式&#xff0c;以“质量”为核心&#xff0…

快捷自由定时重启、注销、关机

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 1、打开工具&#xff0c;进入定时器编辑版块 2、左侧目录新建一个定时器 3、选择需要的周期&#xff0c;这里是每天0点&#xff0c;一次执行一条 4、添加具…

iOS copy的正确姿势

参考文章 知识准备&#xff08;理解堆栈&#xff09; 堆区&#xff1a; 程序员管理 若程序员不释放&#xff0c;由os释放不同于数据结构中的堆&#xff0c;堆区的结构类似于数据结构中的链表栈区&#xff1a; 由编译器来管理 存放函数参数值&#xff0c;局部变量的值等结构类似…

Visual Studio下载安装+详细使用学习

一、下载 官网&#xff1a;Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com) 点击下载&#xff0c;一般用社区版免费的开发既可以。 百度网盘分享&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1W6-NY4ORsFzKTB3r77XFtw 提取码&…

Xmind Pro 2024 24安装教程

Xmind 应该是目前最好用的一款思维导图软件了。拥有优秀的用户体验&#xff0c;凭借简单易用&#xff0c;功能强大的特点&#xff0c;XMind在2013年被著名互联网媒体Lifehacker评选为全球最受欢迎的思维导图软件。 Xmind 具有如下优点 ①、用心打磨16年的思维导图软件 ②、评…

如何加密保护U盘?U盘加密方法盘点

U盘是目前最常用的移动存储设备&#xff0c;可以帮助我们存储大量数据。而为了保护数据安全&#xff0c;我们需要加密保护U盘。下面我们就来盘点一下U盘加密的方法。 BitLocker加密 BitLocker是Windows的一种磁盘保护工具&#xff0c;通过加密整个磁盘来保护数据&#xff0c;同…

均线金叉死叉及应用案例

5日均线和10日均线交叉 5日均线和10日均线交叉指的是5日和10日均线的相互交汇,根据5日均线运行方向的不同可以分为两种交叉。一是5日均线向上运行并交叉10日均线,二是5日均线向下运行并交叉10日均线,前面的交叉被称为金叉,后面的交叉被称为死叉。 技能解析: 5日均线和10日均…

数据可视化的艺术:使用Matplotlib和Seaborn揭示数据故事

引言 数据可视化是数据分析中的关键一环&#xff0c;它帮助我们理解数据模式、趋势和异常。在Python中&#xff0c;Matplotlib和Seaborn是两个流行的数据可视化库&#xff0c;它们提供了丰富的图表和图形选项&#xff0c;使数据的可视化变得简单而强大。 Matplotlib&#xff…

RS485和RS232区别

RS485和RS232接口在物理外观上的区别主要在于连接器的类型和接线方式上。这两种串行通讯接口虽然在功能上有所不同&#xff0c;但外观上也有一些显著的特点。 连接器类型&#xff1a; RS232 接口通常使用DB9或DB25类型的连接器。DB9是较为常见的&#xff0c;拥有9个针脚&#x…

Python笔记-Alchemy中改变表的模式(库schema)

现在是2024-01-10&#xff0c;发到互联网上应该是2024-05-13。查了下chatgpt&#xff0c;麻了&#xff0c;乱七八糟的。 最后还是靠stackoverflow解决的&#xff0c;目前&#xff0c;从解决问题的角度来看&#xff0c;这个还是牛逼点。 原文如下&#xff1a; python - How d…

用户登录认证和权限授权(SpringSecurity、JWT、session)

文章目录 前言一、登录认证1. 问题引入2. Session2.1 实现原理2.2 过滤器Filter2.3 上下文对象 3. JWT3.2 实现步骤3.3 拦截器 HandlerInterceptorAdapter3.4 上下文对象 4. Session VS JWT 二、权限授权1. 权限类型1.1 页面权限&#xff08;菜单项权限&#xff09;1.2 ACL模型…

axios传参方式

params参数通常用于GET请求添加查询参数&#xff0c;POST一般使用data参数传递参数 1、data传参 1-1、表单传参 // 方法定义 export function save(data) {return request({url: /url,headers: { Content-Type: multipart/form-data },method: post,data: data,}) }// 调用函…

Cisco Firepower FTD通过FMC修改syslog发送级别

默认FTD是将informational级别log发到 syslog server 但数量太多&#xff0c;所在调整为只发Warning级别以上的log 1 Devices -->platform settings 进入相应的 policy 2 左侧syslog–>Logging Destination—> syslog server 3 修改为warning (默认为information)…

Windows---CMD常用指令大全

CMD是什么&#xff1f; Windows操作系统中的命令行界面程序&#xff0c;全称为命令提示符 CMD可以干什么&#xff1f; 允许用户在文本界面下输入命令来执行各种操作&#xff0c;如文件管理、系统设置、软件安装等 帮助用户更好地控制和管理Windows系统 windows系统CMD指…

新一代GPT!GPT-4O:更快、更懂人类情感的人工智能新纪元

今天凌晨&#xff08;5.14凌晨&#xff09;&#xff0c;OpenAI 的 GPT-4O 版本在自然语言处理领域带来了革命性的改变。不仅在处理速度上获得了显著提升&#xff0c;GPT-4O 还增加了对人类情感的理解能力&#xff0c;这使得它在与人类的交互中更加自然和富有同理心。本文将深入…

软件设计师笔记(三)-设计模式和算法设计

本文内容来自笔者学习zst 留下的笔记&#xff0c;都是零碎的要点&#xff0c;查缺补漏&#xff0c;希望大家都能通过&#xff0c;记得加上免费的关注&#xff01;谢谢&#xff01;本章主要以下午题出现形式为主&#xff01; 文章编辑于&#xff1a;2024-5-13 13:43:47 目录 1…

果蔬经营平台|基于SSM+vue的果蔬经营平台系统的设计与实现(源码+数据库+文档)

果蔬经营平台系统 目录 基于SSM&#xff0b;vue的果蔬经营平台系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介…

黑马点评项目总结及个人优化

怎么根据前端代码实现自己的后端业务,实现不同接口 查阅文档:如果有完善的接口文档,可以直接查阅文档来了解后端所有接口的业务逻辑和功能。 阅读后端代码:通过阅读后端代码,特别是控制器(Controller)层和服务(Service)层的代码,可以了解后端所有接口的具体实现逻辑。…

Linux系统编程:进程控制

1.进程创建 1.1 fork函数 fork&#xff08;&#xff09;通过复制调用进程来创建一个新进程。新进程称为子进程&#xff0c;是调用进程的精确副本 进程&#xff0c;但以下几点除外&#xff1a; 子进程有自己的PID&#xff0c;此PID与任何现有进程组的ID不匹配子进程的父进程ID…

差异基因散点图绘制教程

差异基因散点图绘制教程 本期教程 小杜的生信笔记&#xff0c;自2021年11月开始做的知识分享&#xff0c;主要内容是R语言绘图教程、转录组上游分析、转录组下游分析等内容。凡事在社群同学&#xff0c;可免费获得自2021年11月份至今全部教程&#xff0c;教程配备事例数据和相…