文章目录

  • 刚体运动
  • 旋转矩阵
  • 变换矩阵
  • 旋转向量
  • 欧拉角
  • 四元数
    • 如何表示旋转

刚体运动

一个物体,运动过后除位置与姿态外的自身条件不会变,变换后与变换前相差一个旋转和平移。

旋转矩阵

向量的内积: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=∑13​ai​bi​=∣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=∥∥∥∥∥∥​e1​a1​b1​​e2​a2​b2​​e3​a3​b3​​∥∥∥∥∥∥​=⎣⎡​a2​b3​−a3​b2​a3​b1​−a1​b3​a1​b2​−a2​b1​​⎦⎤​=⎣⎡​0a3​−a2​​−a3​0a1​​a2​−a1​0​⎦⎤​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​​−a3​0a1​​a2​−a1​0​⎦⎤​

任意向量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}[e1​​e2​​e3​​]⎣⎡​a1​a2​a3​​⎦⎤​=[e1′​​e2′​​e3′​​]⎣⎡​a1′​a2′​a3′​​⎦⎤​

两边同时左乘 [e1Te2Te3T]\begin{bmatrix}e_1 ^T\\e_2^T\\e_3^T\end{bmatrix}⎣⎡​e1T​e2T​e3T​​⎦⎤​,左侧变为单位矩阵
[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'⎣⎡​a1​a2​a3​​⎦⎤​=⎣⎡​e1T​e1′​e2T​e1′​e3T​e1′​​e1T​e2′​e2T​e2′​e3T​e2′​​e1T​e3′​e2T​e3′​e3T​e3′​​⎦⎤​⎣⎡​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​=R12​a2​+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=R1​a+t1​c=R2​b+t2​
所以a到c可以写成
c=R2(R1a+t1)+t2c=R_2(R_1a+t_1)+t_2c=R2​(R1​a+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​]=[R0T​t1​][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~=T1​a~,c~=T2​b~c~=T2​T1​a~

一个变换矩阵左上为旋转矩阵,右上为平移向量,左下为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=[R0T​t1​]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∧)

反过来,已知旋转矩阵求旋转角和轴
θ=arccos⁡tr(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​+q1​i+q2​j+q3​k
也写成: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′ 。

  1. 将三维空间点用一个虚四元数表示,其中虚部就是 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
  2. 将四元数三个虚部与空间中的三个轴对应
  3. 旋转后的结果可表示为:
    p′=qpq−1p'=qpq^{-1}p′=qpq−1
  4. 将 p′p'p′ 的虚部取出,得到旋转后的坐标

视觉SLAM14讲第三章学习笔记相关推荐

  1. 工程伦理第三章学习笔记2020最新

    工程伦理第三章学习笔记2020最新 因为之前自己在网上找答案总是觉得费劲,一道一道的找,很慢,突然找到了前两章的答案,感觉有一种前人种树后人乘凉的感觉,于是自己在艰难找完第三章习题并全对的情况下,将题 ...

  2. 多维随机变量及其分布——《概率论及其数理统计》第三章学习笔记

    多维随机变量及其分布--<概率论及其数理统计>第三章学习笔记 文章目录 多维随机变量及其分布--<概率论及其数理统计>第三章学习笔记 前言 MindMap 二维随机变量 定义与 ...

  3. 周志华西瓜书第三章学习笔记

    第三章学习笔记 文章目录 第三章学习笔记 1.知识脉络 2.我的笔记 参考 1.知识脉络 2.我的笔记 这一章公式推导实在太多了,需要补充的推导过程也有很多,就不写电子档了.扩展公式推导和LDA部分补 ...

  4. 孙鑫VC++深入详解第三章学习笔记

    第三章 3.1创建MFC AppWizard 如何利用vs2019创建MFC应用见参考文献[1] 需要注意的地方有 [1] 创建MFC单文档应用程序 [2]开启类视图窗口 3.2基于MFC的程序框架剖 ...

  5. 计算机系统结构sw指令集,《深入理解计算机系统》第三章学习笔记

    ###通过本周的学习,总结出一下知识内容 ###机器级代码 计算机系统使用了多种不同形式的抽象,利用更简单的抽象模型来隐藏实现的细节. 对于机器级编程来说,其中两种抽象尤为重要: 1.指令集体系结构( ...

  6. 《Python数据分析》第二版.第三章.[学习笔记][Jupyter notebook]

    第3章 Python的数据结构.函数和文件 1.元组是一个固定长度,不可改变的Python序列对象 tup = 4, 5, 6 nested_tup = (4, 5, 6), (7, 8) #复杂元组 ...

  7. dx12 龙书第三章学习笔记 -- 变换

    1.线性变换:   函数的输入和输出都是3D向量,我们称为线性变换 矩阵表示法: ⭐所以已知一个线性变换,只要将i,j,z也就是标准基向量代入线性变换,就能构造一个变换矩阵 A:线性变换的矩阵表示法 ...

  8. 视觉SLAM十四讲-第三章笔记

    视觉SLAM14讲-第三章笔记 3.1 旋转矩阵 欧式变换 欧式变换:改变位资,不改变形状.大小. 旋转矩阵:R(3x3).是两个坐标系基的内积. 正交阵 行列式为1 逆表示相反的旋转 平移向量:t( ...

  9. 视觉slam14讲ch5 opencv安装 ubuntu20.04

    视觉slam14讲ch5 opencv安装 ubuntu20.04 最近在学习视觉slam14讲第五章时,由于opencv需要较多依赖项,安装过程经历了一些曲折,在此进行记录. 1.下载opencv工 ...

最新文章

  1. javaweb入门笔记(4)-request和response
  2. (二十七)【2021 WWW】Learning Intents behind Interactions with Knowledge Graph for Recommendation
  3. CCF-CSP 稀疏向量问题(2020-6)
  4. 面向对象 之重写重载
  5. IE10首个修复补丁出现 解决ASP.NET兼容性
  6. 移动H5手势密码解锁插件--demo
  7. 100名网工备考IE,最终能通过的,到底有几个?
  8. 使用监听扫描枪输入事件
  9. vue 实现评论回复功能
  10. Ubuntu 16.04 系统 gflags glog 安装
  11. Bilibili视频批量下载(编程方案描述)
  12. 中国天气预报城市代码
  13. java设置excel密码
  14. 命令行快速清理Mac版搜狗输入法
  15. Linux相关教程(概念版)
  16. javafx学习教程
  17. 6-PACK论文学习及复现记录
  18. 愿我如星君如月,夜夜流光相皎洁
  19. 异或运算符^,筛选出数组重复元素
  20. 文章1:本科毕业设计 | 多功能智能跟随行李箱 - 【设计介绍】

热门文章

  1. windows项目搭建
  2. 基于Matlab的语音变调不变速的实现(男声变女声、女声变男声)
  3. vue中如何获取当前路由地址
  4. 各类型博物馆典型案例分析
  5. 深入理解int64,int32 是个啥
  6. Qt平台使用fft解析肌电传感器信号
  7. web前端大一实训 HTML5+CSS大作业——传统节日--中秋节(2页)
  8. LinuxC++开发面试系列(三):代码运行、gcc编译、system函数与VS2013 C4996解决方法
  9. 苹果新款 M2 MacBook Air 是否能冲击 Win 笔记本市场?
  10. PostgreSQL安装最详细教程