视觉SLAM14讲-第三章笔记

3.1 旋转矩阵

欧式变换

  • 欧式变换:改变位资,不改变形状、大小。
  • 旋转矩阵:R(3x3)。是两个坐标系基的内积。
    • 正交阵
    • 行列式为1
    • 逆表示相反的旋转
  • 平移向量:t(3x1)
  • 位姿变换:a’=Ra+t

齐次坐标

  • 齐次坐标

多引入一维(1*4),为[0,0,0,1],每一个点的表示不唯一(乘以最后一维的尺度)。

  • 变换矩阵:T(4x4)

将R和t写入同一个矩阵。使得变换变成线性关系

3.3 旋转向量和欧拉角

3.3.1 旋转向量

  • 旋转轴:向量n。旋转朝向。

    • 是R特征值1对应的特征向量。(旋转后n不变,即Rn=1×n)
  • 旋转角:标量theta。旋转大小。

3.3.2 欧拉角

一次旋转分解成绕三个轴的连续旋转。

  • ZYX欧拉角

顺序:

1.Z轴——>偏航角 yaw

2.Y轴——>俯仰角 pitch

3.X轴——>翻滚角 rool

描述向量:[r,p,y]。(描述向量的顺序仍是X,Y,Z轴,但旋转顺序是Z,Y,X)

  • 欧拉角存在问题:万向锁

俯仰角为±90°时,第一次旋转和第三次旋转是一个轴,丢失一个自由度。(Z轴和X轴在Y轴转90°后,都指向原Z轴方向)

欧拉角可以与旋转矩阵转换:
(旋转矩阵)[https://zh.wikipedia.org/wiki/旋转矩阵]

3.4 四元数

特点:无冗余,也无奇异性。
形式:

  • 实四元数:虚部为0。
  • 虚四元数:实部为0,表示点。(虚部表示一个向量)
  • **单位四元数:模长为1,表示旋转。**任意旋转可由两个互为相反数的四元数表示。

3.5 各种变换

  • 欧式变换:保留向量的长度和夹角,不改变外形。T正交、行列式为1。
  • 相似变换:旋转后,均匀缩放。R——>sR,s:缩放因子。
  • 放射变换:保平行、体积比,不再是方的。R——>A。A可逆,不必正交。
  • 射影变换:加入缩放向量。不保平行。

练习题

3

  1 #include <iostream>2 #include <Eigen/Core> 3 #include <Eigen/Geometry>4 5 using namespace std;6 int main()7 {8     Eigen::Quaterniond q1(0.35,0.2,0.3,0.1);9     q1=q1.normalized();10     Eigen::Quaterniond p(0,0.1,0.2,0.3);11     cout<<"p"<<endl<<p.coeffs()<<endl;12     Eigen::Quaterniond p1=q1*p*q1.inverse();13     cout<<"p after rotate:"<<endl<<p1.coeffs()<<endl;14 15     return 0;16 }
p:
0.1
0.2
0.30
p after rotate:0.3476190.1047620.0904762
-1.38778e-17

5

  1 #include <iostream>2 #include <Eigen/Core> 3 4 using namespace std;5 6 int main()7 {8     Eigen::Matrix<float,7,9>mat0;9     mat0=Eigen::MatrixXf::Random(7,9);10     cout<<"mat0:"<<endl<<mat0<<endl;11 12     Eigen::Matrix<float,3,3>mat1=mat0.block(0,0,3,3);13     cout<<"mat1:"<<endl<<mat1<<endl;14 15     mat1=Eigen::MatrixXf::Identity(3,3);16     cout<<"mat1:"<<endl<<mat1<<endl;17     return 0;18 }
mat0:0.680375   0.536459   0.904459  -0.514226   0.997849  0.0485743  -0.199543   0.898654  -0.871657-0.211234  -0.444451    0.83239  -0.725537  -0.563486  -0.012834   0.783059  0.0519907  -0.9599540.566198    0.10794   0.271423   0.608353  0.0258648    0.94555  -0.433371  -0.827888 -0.08459650.59688 -0.0452059   0.434594  -0.686642   0.678224  -0.414966  -0.295083  -0.615572  -0.8738080.823295   0.257742  -0.716795  -0.198111    0.22528   0.542715   0.615449   0.326454   -0.52344-0.604897  -0.270431   0.213938  -0.740419  -0.407937  0.0534899   0.838053   0.780465   0.941268-0.329554  0.0268018  -0.967399  -0.782382   0.275105   0.539828  -0.860489  -0.302214   0.804416
mat1:0.680375  0.536459  0.904459
-0.211234 -0.444451   0.832390.566198   0.10794  0.271423
mat1:
1 0 0
0 1 0
0 0 1

7

  1 #include <iostream>2 #include <Eigen/Core> 3 #include <Eigen/Geometry>4 5 using namespace std;6 int main()7 {8     Eigen::Quaterniond q1(0.35,0.2,0.3,0.1);9     Eigen::Quaterniond q2(-0.5,0.4,-0.1,0.2);10     Eigen::Vector3d t1(0.3,0.1,0.1);11     Eigen::Vector3d t2(-0.1,0.5,0.3);12     Eigen::Vector3d p1(0.5,0,0.2);13 14     q1=q1.normalized();15     q2=q2.normalized();16 17     Eigen::Vector3d p0=q1.inverse()*(p1-t1);18     Eigen::Vector3d p2=q2*p0+t2;19 20     cout<<p2<<endl;21     return 0;22 }
-0.03097310.734990.296108

视觉SLAM十四讲-第三章笔记相关推荐

  1. 【视觉SLAM十四讲】第一章理论详解

    文章目录 第一讲 概述与预备知识 SLAM是什么 室内/室外定位 稀疏-半稠密重建 稠密重建 SLAM可以用在哪些地方? **作业1.** SLAM会在哪些场合中⽤到?⾄少列举三个⽅向. SLAM: ...

  2. 《视觉SLAM十四讲 第二版》笔记及课后习题(第七讲)

    读书笔记:视觉里程计1 之前的内容,介绍了运动方程和观测方程的具体形式,并讲解了以非线性优化为主的求解方法.从本讲开始,我们结束了基础知识的铺垫,开始步入正题:按照第二讲的内容,分别介绍视觉里程计.优 ...

  3. 《视觉slam十四讲》ch4学习笔记——sophus库使用的问题及解决方法

    在看完<视觉slam十四讲>第四章李群和李代数后,准备调试相应的代码,但是出现了各种各样的问题,但最后还是万幸,成功完成了调试.在这里记录一下期间遇到的问题和相应的解决方法以及最后的感想. ...

  4. 《视觉SLAM十四讲 第二版》笔记及课后习题(第一讲)

    前言 之所以想要写这个系列的博客,是因为想要总结一下高博的<SLAM视觉十四讲第二版>的各章内容以及自己对书后习题的一些做法,也算是对自己学习过程的一个总结和回顾.博客分为两个大部分,即读 ...

  5. 《视觉SLAM十四讲 第二版》笔记及课后习题(第三讲)

    读书笔记:三维空间刚体运动 本讲介绍视觉 SLAM 的基本问题之一:一个刚体在三维空间中的运动是如何描述的.我们当然知道这由一次旋转加一次平移组成.平移确实没有太大问题,但旋转的处理是件麻烦事.我们将 ...

  6. 《视觉SLAM十四讲 第二版》笔记及课后习题(第十二讲)

    读书笔记:建图 本讲我们开始介绍建图部分的算法.在前端和后端中,我们重点关注同时估计相机运动轨迹与特征点空间位置的问题.然而,在实际使用SLAM 时,除了对相机本体进行定位之外,还存在许多其他的需求. ...

  7. SLAM十四讲第三章课后习题

    第5题:参考这篇博客,Eigen块操作讲的很细! Matrix4f m; m<< 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16; cout<<m ...

  8. 视觉slam十四讲第8章课后习题3+稀疏直接法程序注释

    版权声明:本文为博主原创文章,转载请注明出处: http://www.cnblogs.com/newneul/p/8571653.html  3.题目回顾: 在稀疏直接法中,假设单个像素周围小块的光度 ...

  9. 深蓝学院视觉slam十四讲第2章作业

    首先给出有关四元数讲解一份比较好的pdf 2.1 设线性⽅程 Ax=b\bm Ax = bAx=b,则有解充要条件为:系数矩阵An×n\bm A_{n \times n}An×n​与其增广矩阵Bn×( ...

最新文章

  1. TCMalloc:线程缓存的Malloc
  2. 在Sun Enterprise Server上配置SCSI磁带机
  3. 数字图像处理笔记二 - 图片缩放(最近邻插值(Nearest Neighbor interpolation))
  4. find命令详解(原创)
  5. Java深度历险(五)——Java泛型
  6. Java并发编程 - Executor,Executors,ExecutorService, CompletionServie,Future,Callable
  7. 这9个人气超高的公众号,你还没关注吗?
  8. 分度器中硒定位器的完整指南(示例)
  9. php7 ast,PHP7 的抽象语法树(AST)带来的变化
  10. Node.js之------模块篇
  11. 【转】简单的解释XSS攻击
  12. 一张图11招学会Python网络黑客
  13. 使用flags定义命令行参数
  14. hive explain 源码分析
  15. 【操作系统】系统中断技术
  16. raid卡组不同raid_Linux 软件阵列与低端硬件阵列卡性能对比
  17. LuaAuxLib 按键精灵lua库
  18. e5 2680v3和e5 2682v4有什么区别
  19. 基于SSM的毕业设计管理系统
  20. GCC——C compiler

热门文章

  1. BZOJ 3527 [Zjoi2014] 力
  2. Flutter之层叠布局Stack、Positioned
  3. 暗黑模式切换(vue版)
  4. kafka是如何通过offset定位一条消息的?
  5. OpenGL几种绘制方式
  6. 某通讯录同步助手pandas数据清洗
  7. .rvm/rubies/ruby-2.3.3/lib/ruby/2.3.0/rubygems/...:in `require':
  8. mysql线上教程_线上环境mysql主从同步的搭建过程
  9. 空中网发布全新战舰手游 持续布局军武游戏市场
  10. 数据库设计工具PowerDesigner的强大