视觉SLAM14讲第三章学习笔记
文章目录
- 刚体运动
- 旋转矩阵
- 变换矩阵
- 旋转向量
- 欧拉角
- 四元数
- 如何表示旋转
刚体运动
一个物体,运动过后除位置与姿态外的自身条件不会变,变换后与变换前相差一个旋转和平移。
旋转矩阵
向量的内积:a⋅b=aTb=∑13aibi=∣a∣∣b∣cos⟨a,b⟩{a} \cdot b=a^Tb=\sum_{1}^{3} a_ib_i=|a||b|cos\langle a,b \ranglea⋅b=aTb=∑13aibi=∣a∣∣b∣cos⟨a,b⟩
内积可以描述向量间的投影。
向量的外积:a×b=∥e1e2e3a1a2a3b1b2b3∥=[a2b3−a3b2a3b1−a1b3a1b2−a2b1]=[0−a3a2a30−a1−a2a10]b=defa∧ba\times b=\begin{Vmatrix} e_1&e_2 &e_3 \\a_1&a_2 & a_3\\b_1&b_2 &b_3\end{Vmatrix}=\begin{bmatrix}a_2b_3-a_3b_2\\a_3b_1-a_1b_3\\a_1b_2-a_2b_1\end{bmatrix}=\begin{bmatrix}0& -a_3 &a_2 \\a_3&0 &-a_1 \\-a_2&a_1 &0\end{bmatrix}b \overset{def}{=}a^\wedge ba×b=∥∥∥∥∥∥e1a1b1e2a2b2e3a3b3∥∥∥∥∥∥=⎣⎡a2b3−a3b2a3b1−a1b3a1b2−a2b1⎦⎤=⎣⎡0a3−a2−a30a1a2−a10⎦⎤b=defa∧b
外积描述实际上就是∣a∣∣b∣sin⟨a,b⟩|a||b|sin\lang a,b \rang∣a∣∣b∣sin⟨a,b⟩,是两个向量张开的四边形的面积。
a∧a^\wedgea∧表示aaa的反对称矩阵
a∧=[0−a3a2a30−a1−a2a10]a^\wedge=\begin{bmatrix}0& -a_3 &a_2 \\a_3&0 &-a_1 \\-a_2&a_1 &0\end{bmatrix} a∧=⎣⎡0a3−a2−a30a1a2−a10⎦⎤
任意向量aaa都有唯一一个反对称矩阵,且a∧+a∧T=0a^\wedge+a^{\wedge T}=0a∧+a∧T=0。
设有一单位正交基 (e1,e2,e3)(e_1,e_2,e_3)(e1,e2,e3)内有一向量坐标为[a1,a2,a3]T[a_1,a_2,a_3]^T[a1,a2,a3]T
另一单位正交基下 (e1′,e2′,e3′)(e_1{'},e_2{'},e_3')(e1′,e2′,e3′)下,该向量坐标为[a1′,a2′,a3′]T[a_1',a_2',a_3']^T[a1′,a2′,a3′]T
由于向量还是那一个,只是在不同坐标系下的表示不一样,所以有
[e1e2e3][a1a2a3]=[e1′e2′e3′][a1′a2′a3′]\begin{bmatrix} e_1&e_2 &e_3\end{bmatrix}\begin{bmatrix}a_1 \\a_2\\a_3\end{bmatrix}=\begin{bmatrix} e_1'&e_2' &e_3'\end{bmatrix}\begin{bmatrix}a_1 '\\a_2'\\a_3'\end{bmatrix}[e1e2e3]⎣⎡a1a2a3⎦⎤=[e1′e2′e3′]⎣⎡a1′a2′a3′⎦⎤
两边同时左乘 [e1Te2Te3T]\begin{bmatrix}e_1 ^T\\e_2^T\\e_3^T\end{bmatrix}⎣⎡e1Te2Te3T⎦⎤,左侧变为单位矩阵
[a1a2a3]=[e1Te1′e1Te2′e1Te3′e2Te1′e2Te2′e2Te3′e3Te1′e3Te2′e3Te3′][a1′a2′a3′]=defRa′\begin{bmatrix}a_1 \\a_2\\a_3\end{bmatrix}=\begin{bmatrix}e_1 ^Te_1'&e_1^Te_2'&e_1^Te_3'\\e_2^Te_1'&e_2^Te_2'&e_2^Te_3'\\e_3^Te_1'&e_3^Te_2'&e_3^Te_3'\end{bmatrix}\begin{bmatrix}a_1 '\\a_2'\\a_3'\end{bmatrix}\overset{def}{=}Ra'⎣⎡a1a2a3⎦⎤=⎣⎡e1Te1′e2Te1′e3Te1′e1Te2′e2Te2′e3Te2′e1Te3′e2Te3′e3Te3′⎦⎤⎣⎡a1′a2′a3′⎦⎤=defRa′
其中RRR称为旋转矩阵,可以看出RRR是两组基之间的内积
旋转矩阵性质
- 正交阵 RRT=IRR^T=IRRT=I 、RT=R−1R^T=R^{-1}RT=R−1
- 行列式为1,反之行列式为1的正交阵叫旋转矩阵
- 若 RRR 为从 AAA 坐标系到 BBB坐标系的旋转矩阵,则 R−1R^{-1}R−1 表示从 BBB 坐标系到 AAA 坐标系的旋转矩阵。
变换矩阵
欧式变换中,除了旋转还有平移,表示为:
a1=R12a2+t12a_1=R_{12}a_2+t_{12}a1=R12a2+t12
其中R12R_{12}R12 表示从2到1坐标系的旋转矩阵,t12t_{12}t12 所对应的是坐标系1原点指向坐标系2原点的向量并且是在坐标系1下取的坐标。
反过来 R21R_{21}R21 表示从1到2坐标系的旋转矩阵, t21t_{21}t21 对应的是坐标系2原点指向坐标系1原点的向量并且是在坐标系2下取的坐标。
b=R1a+t1c=R2b+t2b=R_1a+t_1\\ c=R_2b+t_2b=R1a+t1c=R2b+t2
所以a到c可以写成
c=R2(R1a+t1)+t2c=R_2(R_1a+t_1)+t_2c=R2(R1a+t1)+t2
该写法若是跨越多个坐标系进行变换写法会很麻烦,所以对 a′=Ra+ta'=Ra+ta′=Ra+t 改写为
[a′1]=[Rt0T1][a1]=defT[a1]\begin{bmatrix}a' \\1\end{bmatrix}=\begin{bmatrix}R&t\\0^T&1\end{bmatrix}\begin{bmatrix}a\\1\end{bmatrix}\overset{def}{=}T\begin{bmatrix}a \\1\end{bmatrix}[a′1]=[R0Tt1][a1]=defT[a1]
令a~\tilde{a}a~表示aaa的齐次坐标,则
b~=T1a~,c~=T2b~c~=T2T1a~\tilde{b}=T_1\tilde{a},\tilde{c}=T_2\tilde{b}\\\tilde{c}=T_2T_1\tilde{a}b~=T1a~,c~=T2b~c~=T2T1a~
一个变换矩阵左上为旋转矩阵,右上为平移向量,左下为0向量,右下为1;它的逆表示一个相反的变换。
T=[Rt0T1]T−1=[RT−RTt0T1]T=\begin{bmatrix}R&t \\0^T&1\end{bmatrix}\\T^{-1}=\begin{bmatrix}R^T&-R^Tt \\0^T&1\end{bmatrix}T=[R0Tt1]T−1=[RT0T−RTt1]
旋转向量
任意旋转都可用一个旋转轴和一个旋转角来表示,令一个向量方向等于旋转轴,长度等于旋转角,这种向量称为旋转向量。
已知一个旋转的旋转轴向量nnn和角度θ\thetaθ,可以通过罗德里格斯公式表换到旋转矩阵。
R=cosθI+(1−cosθ)nnT+sinθtr(n∧)R=\cos\theta I+(1-\cos \theta)nn^T+\sin \theta tr(n^\wedge)R=cosθI+(1−cosθ)nnT+sinθtr(n∧)
反过来,已知旋转矩阵求旋转角和轴
θ=arccostr(R)−12\theta =\arccos \frac{tr(R)-1}{2}θ=arccos2tr(R)−1
因为有Rn=nRn=nRn=n,表示旋转轴上的向量绕轴旋转后不变,则转轴nnn是矩阵RRR特征值1所对应的特征向量归一化后的结果。
欧拉角
任何的旋转都可分解成分别绕三个轴旋转后的结果,定义“偏航-俯仰-滚转(yaw-pitch-roll)”分别对应ZYXZYXZYX轴的旋转。
绕ZZZ轴旋转,得到偏航角yaw
绕旋转之后的YYY轴旋转,得到俯仰角pitch
绕旋转之后的XXX轴旋转,得到滚转角roll
可以用[r,p,y]T[r,p,y]^T[r,p,y]T三为向量描述任意旋转;当俯仰角为±90°\pm90°±90°时会丢失一个自由度——万向锁问题。
二维用的多,因为比较直观,三维的话用的不多,但是可以转换成欧拉角拍错用。
四元数
用三个量表示一个三维旋转注定会有奇异性问题,类似于万向锁。引入四元数,即可以比旋转矩阵紧凑,又可消除奇异性,就是比较抽象,运算复杂。
一个四元数长这样:
q=q0+q1i+q2j+q3kq=q_0+q_1i+q_2j+q_3kq=q0+q1i+q2j+q3k
也写成:q=[s,v]Tq=[s,v]^Tq=[s,v]T;sss是实部,vvv是虚部
前头是实部,后面跟着三个虚部
三个轴之间满足:
{i2=j2=k2=−1ij=k,ji=−kjk=i,kj=−iki=j,ik=−j\left\{\begin{matrix}i^2=j^2=k^2=-1\\ij=k,ji=-k\\jk=i,kj=-i\\ki=j,ik=-j\end{matrix}\right.⎩⎪⎪⎨⎪⎪⎧i2=j2=k2=−1ij=k,ji=−kjk=i,kj=−iki=j,ik=−j
如何表示旋转
空间内有一点 ppp 和一个由单位四元数 qqq 指定的旋转, ppp 经过 qqq 的旋转变成 p′p'p′ 。
- 将三维空间点用一个虚四元数表示,其中虚部就是 ppp 点的三维空间坐标
p=[0,x,y,z]T=[0,v]Tp=[0,x,y,z]^T=[0,v]^Tp=[0,x,y,z]T=[0,v]T - 将四元数三个虚部与空间中的三个轴对应
- 旋转后的结果可表示为:
p′=qpq−1p'=qpq^{-1}p′=qpq−1 - 将 p′p'p′ 的虚部取出,得到旋转后的坐标
视觉SLAM14讲第三章学习笔记相关推荐
- 工程伦理第三章学习笔记2020最新
工程伦理第三章学习笔记2020最新 因为之前自己在网上找答案总是觉得费劲,一道一道的找,很慢,突然找到了前两章的答案,感觉有一种前人种树后人乘凉的感觉,于是自己在艰难找完第三章习题并全对的情况下,将题 ...
- 多维随机变量及其分布——《概率论及其数理统计》第三章学习笔记
多维随机变量及其分布--<概率论及其数理统计>第三章学习笔记 文章目录 多维随机变量及其分布--<概率论及其数理统计>第三章学习笔记 前言 MindMap 二维随机变量 定义与 ...
- 周志华西瓜书第三章学习笔记
第三章学习笔记 文章目录 第三章学习笔记 1.知识脉络 2.我的笔记 参考 1.知识脉络 2.我的笔记 这一章公式推导实在太多了,需要补充的推导过程也有很多,就不写电子档了.扩展公式推导和LDA部分补 ...
- 孙鑫VC++深入详解第三章学习笔记
第三章 3.1创建MFC AppWizard 如何利用vs2019创建MFC应用见参考文献[1] 需要注意的地方有 [1] 创建MFC单文档应用程序 [2]开启类视图窗口 3.2基于MFC的程序框架剖 ...
- 计算机系统结构sw指令集,《深入理解计算机系统》第三章学习笔记
###通过本周的学习,总结出一下知识内容 ###机器级代码 计算机系统使用了多种不同形式的抽象,利用更简单的抽象模型来隐藏实现的细节. 对于机器级编程来说,其中两种抽象尤为重要: 1.指令集体系结构( ...
- 《Python数据分析》第二版.第三章.[学习笔记][Jupyter notebook]
第3章 Python的数据结构.函数和文件 1.元组是一个固定长度,不可改变的Python序列对象 tup = 4, 5, 6 nested_tup = (4, 5, 6), (7, 8) #复杂元组 ...
- dx12 龙书第三章学习笔记 -- 变换
1.线性变换: 函数的输入和输出都是3D向量,我们称为线性变换 矩阵表示法: ⭐所以已知一个线性变换,只要将i,j,z也就是标准基向量代入线性变换,就能构造一个变换矩阵 A:线性变换的矩阵表示法 ...
- 视觉SLAM十四讲-第三章笔记
视觉SLAM14讲-第三章笔记 3.1 旋转矩阵 欧式变换 欧式变换:改变位资,不改变形状.大小. 旋转矩阵:R(3x3).是两个坐标系基的内积. 正交阵 行列式为1 逆表示相反的旋转 平移向量:t( ...
- 视觉slam14讲ch5 opencv安装 ubuntu20.04
视觉slam14讲ch5 opencv安装 ubuntu20.04 最近在学习视觉slam14讲第五章时,由于opencv需要较多依赖项,安装过程经历了一些曲折,在此进行记录. 1.下载opencv工 ...
最新文章
- javaweb入门笔记(4)-request和response
- (二十七)【2021 WWW】Learning Intents behind Interactions with Knowledge Graph for Recommendation
- CCF-CSP 稀疏向量问题(2020-6)
- 面向对象 之重写重载
- IE10首个修复补丁出现 解决ASP.NET兼容性
- 移动H5手势密码解锁插件--demo
- 100名网工备考IE,最终能通过的,到底有几个?
- 使用监听扫描枪输入事件
- vue 实现评论回复功能
- Ubuntu 16.04 系统 gflags glog 安装
- Bilibili视频批量下载(编程方案描述)
- 中国天气预报城市代码
- java设置excel密码
- 命令行快速清理Mac版搜狗输入法
- Linux相关教程(概念版)
- javafx学习教程
- 6-PACK论文学习及复现记录
- 愿我如星君如月,夜夜流光相皎洁
- 异或运算符^,筛选出数组重复元素
- 文章1:本科毕业设计 | 多功能智能跟随行李箱 - 【设计介绍】