视觉SLAM14讲笔记-第3讲-三维空间刚体运动

空间向量之间的运算包括:
数乘、加法、减法、内积、外积。
内积:可以描述向量间的投影关系,结果是一个标量。
a ⃗ ⋅ b ⃗ = ∑ i = 1 3 a i b i = ∤ a ∤ ∤ b ∤ c o s ⟨ a , b ⟩ \vec{a} \cdot \vec{b}=\sum_{i=1}^3{{a _i}{b_i}} =\nmid a \nmid \nmid b \nmid cos \langle a,b \rangle a b =i=13aibi=a∤∤bcosa,b

外积:外积的方向垂直于这两个向量,大小为两个向量张成的四边形的有向面积,结果还是一个向量。
a × b = a ∧ ⋅ b a \times b = a^{\wedge } \cdot b a×b=ab
a ∧ a^{\wedge } a a ⃗ \vec{a} a 的反对称矩阵。

旋转向量的引出:由两个向量的外积引出,在右手法则下,我们用右手的4个指头从a转向b,大拇指朝向就是旋转向量的方向,事实上也是 a × b a \times b a×b的方向。

旋转矩阵是正交矩阵。即满足 A T ⋅ A = E A^{T} \cdot A = E ATA=E 。即旋转矩阵的逆为自身转置的矩阵。且是一个行列式为1的正交矩阵。注意:旋转矩阵不一定是对称矩阵。

齐次坐标系的引出:因为空间运动不止有旋转,还有平移,例如
a ′ = R a + t a^{\prime }=Ra+t a=Ra+t
转换为矩阵形式
[ a ′ 1 ] = [ R t 0 1 ] [ a 1 ] = T [ a 1 ] \begin{bmatrix} a^{\prime }\\ 1\end{bmatrix}=\begin{bmatrix} R&t\\ 0&1\end{bmatrix} \begin{bmatrix} a\\ 1\end{bmatrix} = T\begin{bmatrix} a\\ 1\end{bmatrix} [a1]=[R0t1][a1]=T[a1]
T为变换矩阵, [ a 1 ] \begin{bmatrix} a\\ 1\end{bmatrix} [a1]为向量a的齐次形式。即在一个三维向量的末尾添加1,将其变成了四维向量,称为齐次坐标。

关于变换矩阵T的逆,也有公式,如下:
T − 1 = [ R T − R T t 0 1 ] T^{-1} = \begin{bmatrix} R^{T}&-R^{T}t\\ 0&1\end{bmatrix} T1=[RT0RTt1]

的引出:上面我们看到的旋转矩阵R是特殊正交群(Special Orthogonal Group)。变换矩阵T称为特殊欧式群(Special Euclidean Group)。

旋转向量的第2次引出:由于旋转矩阵由(9个元素)和变换矩阵由(16个元素)组成,存在冗余,且自身带有约束(旋转矩阵必须是个正交矩阵),不利于导数的计算(后面使用非线性优化的方式,要对求解元素求导)。而旋转向量可以用3个元素描述,平移向量可以用3个元素描述。

罗德里格斯公式的引出:指导旋转向量到旋转矩阵的转换。
R = cos ⁡ θ ⋅ I + ( 1 − c o s θ ) n n T + s i n θ n ∧ R=\cos\theta\cdot I +(1-cos\theta)nn^{T} + sin\theta n^{\wedge} R=cosθI+(1cosθ)nnT+sinθn
反之也可以得到旋转矩阵到旋转向量的转换。

欧拉角的引出:为了直观的表述绕X、Y、Z角度变化了多少,引出了欧拉角,根据绕不同轴的前后顺序,可以有不同类型的欧拉角,一般最常见的是rpy角(它是按ZYX的旋转顺序,rpy对应yaw-pitch-roll,即偏航-俯仰-滚转)。
但是有奇异性,所以在slam中很少用欧拉角表达姿态。

四元数的引出:正是由于欧拉角的奇异性,所以才有了四元数的引出。缺点是不够直观。一个四元数拥有1个实部和3个虚部。
q = q 0 + q 1 i ⃗ + q 2 j ⃗ + q 3 k ⃗ {q}=q_0 + q_1\vec{i} +q_2\vec{j}+q_3\vec{k} q=q0+q1i +q2j +q3k
Eigen中我们习惯使用下面对应表示
q = w + x i ⃗ + y j ⃗ + z k ⃗ {q}=w + x\vec{i} +y\vec{j}+z\vec{k} q=w+xi +yj +zk

假设某个旋转是绕单位向量 n = [ n x , n y , n z ] n= \begin{bmatrix} n_x,&n_y,&n_z\\ \end{bmatrix} n=[nx,ny,nz]进行了角度为 θ \theta θ的旋转
旋转向量和四元数的转换
q = [ c o s θ 2 , n x s i n θ 2 , n y s i n θ 2 , n z s i n θ 2 ] T q=\begin{bmatrix} cos\dfrac{\theta}{2},&n_xsin\dfrac{\theta}{2},&n_ysin\dfrac{\theta}{2},&n_zsin\dfrac{\theta}{2}\\ \end{bmatrix}^{T} q=[cos2θ,nxsin2θ,nysin2θ,nzsin2θ]T
反之,四元数也可以转换为旋转向量
{ θ = 2 a r c c o s q 0 [ n x , n y , n z ] T = [ q 1 , q 2 , q 3 ] T / s i n θ 2 \begin{cases} \theta = 2arccosq_0 \\ \begin{bmatrix} n_x,&n_y,&n_z\\ \end{bmatrix}^{T}= \begin{bmatrix} q_1,&q_2,&q_3\\ \end{bmatrix}^{T}/sin\dfrac{\theta}{2}\\ \end{cases} θ=2arccosq0[nx,ny,nz]T=[q1,q2,q3]T/sin2θ

四元数之间的运算不过多复述,感觉目前用的地方并不多。

这里再提一下四元数与旋转矩阵之间的转换
假设四元数为 q = q 0 + q 1 i ⃗ + q 2 j ⃗ + q 3 k ⃗ {q}=q_0 + q_1\vec{i} +q_2\vec{j}+q_3\vec{k} q=q0+q1i +q2j +q3k ,则
R = [ 1 − 2 q 2 2 − 2 q 3 2 2 q 1 q 2 − 2 q 0 q 3 2 q 1 q 3 + 2 q 0 q 2 2 q 1 q 2 + 2 q 0 q 3 1 − 2 q 1 2 − 2 q 3 2 2 q 2 q 3 − 2 q 0 q 1 2 q 1 q 3 − 2 q 0 q 2 2 q 2 q 3 + 2 q 0 q 1 1 − 2 q 1 2 − 2 q 2 2 ] R = \begin{bmatrix} 1-2q_2^2-2q_3^2&2q_1q_2-2q_0q_3&2q_1q_3+2q_0q_2\\ 2q_1q_2+2q_0q_3&1-2q_1^2-2q_3^2&2q_2q_3-2q_0q_1 \\2q_1q_3-2q_0q_2&2q_2q_3+2q_0q_1&1-2q_1^2-2q_2^2 \end{bmatrix} R= 12q222q322q1q2+2q0q32q1q32q0q22q1q22q0q312q122q322q2q3+2q0q12q1q3+2q0q22q2q32q0q112q122q22

由旋转矩阵到四元数
q 0 = t r ( R ) + 1 2 , q_0 =\dfrac{\sqrt{tr(R)+1}}2, q0=2tr(R)+1 , q 1 = m 23 − m 32 4 q 0 , q_1 =\dfrac{m_{23}-m_{32}}{4q_0}, q1=4q0m23m32,

q 2 = m 31 − m 13 4 q 0 , q_2 =\dfrac{m_{31}-m_{13}}{4q_0}, q2=4q0m31m13, q 2 = m 12 − m 21 4 q 0 , q_2 =\dfrac{m_{12}-m_{21}}{4q_0}, q2=4q0m12m21,

3D空间的几种变换:
欧式变换:也称为刚体变换,长度、夹角,体积不随着变换而改变。
相似变换:增加了缩放系数,体积比不变。
仿射变换:进一步抽象,变换后仍然保持平行性,同时增加了缩放系数。
射影变换:再进一步抽象,从真实世界到相机照片的变换是一个射影变换。
随着变换的进一步抽象,自由度的变化也在变化,如下:
变换名称 矩阵形式 自由度 欧式变换 [ R t 0 1 ] 6 相似变换 [ s R t 0 1 ] 7 仿射变换 [ A t 0 1 ] 12 射影变换 [ A t a T 1 ] 15 \begin{array}{c|lcr} \text{变换名称} & \text{矩阵形式} & \text{自由度} \\ \hline 欧式变换 & \begin{bmatrix} R&t\\ 0&1\end{bmatrix} & 6 \\ 相似变换 &\begin{bmatrix} sR&t\\ 0&1\end{bmatrix} & 7 \\ 仿射变换 & \begin{bmatrix} A&t\\ 0&1\end{bmatrix} & 12 \\ 射影变换 & \begin{bmatrix} A&t\\ a^T&1\end{bmatrix}& 15 \end{array} 变换名称欧式变换相似变换仿射变换射影变换矩阵形式[R0t1][sR0t1][A0t1][AaTt1]自由度671215

习题1:验证旋转矩阵是正交矩阵
参考网址:https://zhuanlan.zhihu.com/p/419854977

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

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

相关文章

Leetcode-每日一题【剑指 Offer 36. 二叉搜索树与双向链表】

题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜索树转化为双向循环链表…

vim常用命令汇总

vim常用命令 1.光标移动删除撤销/恢复查找替换 vim可以作为vscode插件使用 1.光标移动 快捷键功能描述 删除 快捷键功能描述dd删除光标所在行,删除之后,下一行上移ndd删除当前行(包括此行)后 n 行文本dw移动光标到单词的开头以…

【Vue2】---->mixins 复用

#记录 mixins 复用 - 处理登录确认框的弹出 1 新建一个 mixin 文件 mixins/loginConfirm.js export default {methods: {// 是否需要弹登录确认框// (1) 需要,返回 true,并直接弹出登录确认框// (2) 不需要,返回 falseloginConfirm () {if…

python编写四画面同时播放swap视频

当代技术让我们能够创建各种有趣和实用的应用程序。在本篇博客中,我们将探索一个基于wxPython和OpenCV的四路视频播放器应用程序。这个应用程序可以同时播放四个视频文件,并将它们显示在一个GUI界面中。 C:\pythoncode\new\smetimeplaymp4.py 准备工作…

rabbitmq卸载重新安装3.8版本

卸载之前的版本的rabbitmq 卸载rabbitmq 卸载前先停止rabbitmq服务 /usr/lib/rabbitmq/bin/rabbitmqctl stop查看rabbitmq安装的相关列表 yum list | grep rabbitmq卸载rabbitmq相关内容 yum -y remove rabbitmq-server.noarch 卸载erlang 查看erlang安装的相关列表 …

Android启动优化

Android启动优化 启动分类 冷启动热启动 启动监控 生命周期监控首屏渲染监控用户可交互监控 启动报表 50分位,90分位图分段图,1s到2s,2s到3s不同Android版本,不同设备,不同app版本启动时间 启动优化 懒加载线程…

STM32 F103C8T6学习笔记13:IIC通信—AHT10温湿度传感器模块

今日学习一下这款AHT10 温湿度传感器模块,给我的OLED手环添加上测温湿度的功能。 文章提供源码、测试工程下载、测试效果图。 目录 AHT10温湿度传感器: 特性: 连接方式: 适用场所范围: 程序设计: 设…

js 类、原型及class

js 一直允许定义类。ES6新增了相关语法(包括class关键字)让创建类更容易。新语法创建的类和老式的类原理相同。js 的类和基于原型的继承机制与Java等语言中的类和继承机制有着本质区别。 1 类和原型 类意味着一组对象从同一个原型对象继承属性。因此,原型对象是…

跨专业申请成功|金融公司经理赴美国密苏里大学访学交流

J经理所学专业与从事工作不符,尽管如此,我们还是为其成功申请到美国密苏里大学经济学专业的访问学者职位,全家顺利过签出国。 J经理背景: 申请类型: 自费访问学者 工作背景: 某金融公司经理 教育背景&am…

(视频教程)单细胞转录组多组差异基因分析及可视化函数

很久以前,我们发布过一个单细胞多组差异基因可视化的方法。跟着Cell学单细胞转录组分析(八):单细胞转录组差异基因分析及多组结果可视化。主要复现参考的是这篇发表在《Cell》上的文章。可以将多个组的差异结果展示出来。 (reference:A Spati…

XPath:学习使用XPath语法提取HTML/XML文档中的数据使用语法

以下是一些XPath语法示例,用于提取HTML/XML文档中的数据: 选择元素: 选择所有p元素: //p 选择根元素: / 属性匹配: 选择class属性为"example"的div元素: //div[classexample] 文本内容…

在VScode中执行npm、yarn命令报错解

在VScode中执行npm、yarn命令报错解 我使用的是vnm安装好npm,在WindowsR 界面是可以运行查看出版本的;但是在VScode中报错。 查了很多资料,我这种情况的原因是在VScode中默认使用的终端是Powershell,然后我切换到系统的cmd则可以…

原生微信小程序使用 wxs;微信小程序使用 vant-weapp组件

1.原生微信小程序使用 wxs 1.内嵌 WXS 脚本 2. 定义外链 wxs 3. 使用外连wxs 在这里插入图片描述 2. 微信小程序使用 vant weapp 1.安装步骤 2. 安装包管理(package.json)文件的方法 操作顺序 :文档地址 如果使用 typescript 需要操作步骤3,否则不…

python语言学习

序言 此系列用于总结python语言的相关知识点,用于帮助自己和有缘人查阅 1、python基本数据类型 python基本数据类型 – 字符串

使用 wxPython 和 pymupdf进行 PDF 加密

PDF 文件是一种常见的文档格式,但有时候我们希望对敏感信息进行保护,以防止未经授权的访问。在本文中,我们将使用 Python 和 wxPython 库创建一个简单的图形用户界面(GUI)应用程序,用于对 PDF 文件进行加密…

自动化运维:Ansible基础与命令行模块操作

目录 一、理论 1. Ansible 2.部署Ansible自动化运维工具 3.Ansible常用模块 4.hostsinverntory主机清单 二、实验 1.部署Ansible自动化运维工具 2.ansible 命令行模块 3.hostsinverntory主机清单 三、问题 1. ansible远程shell失败 2.组变量查看webservers内主机ip报…

基于Java+SpringBoot+Vue前后端分离美食推荐商城设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

显著性检验(Significance Test)

参考链接&#xff1a;Click Here 显著性检验&#xff08;Significance Test&#xff09;主要分为两个类别&#xff1a; Statistical Significance Test (统计显著性检验) 计量方式&#xff1a;p-value < 0.05 目的&#xff1a;检验原始分布与目标分布之间是否具有显著差异性…

如何在树莓派上使用Nginx搭建本地站点并通过内网穿透实现远程访问

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#xff0c;可以用于托管网站或 Web 应用程序。相比其他 Web 服务器&#xff0c;Ngi…

时间和日期--Python

1. 时间&#xff1a;time模块 总结&#xff1a;2. datetime模块 相比与time模块&#xff0c;datetime模块的接口更直观、更容易调用 2.1 datetime模块定义的类 &#xff08;1&#xff09;datetime.date:表示日期的类。常用的属性有&#xff1a;year、month、day; &#xff…