视觉SLAM十四讲-第三章笔记
视觉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十四讲-第三章笔记相关推荐
- 【视觉SLAM十四讲】第一章理论详解
文章目录 第一讲 概述与预备知识 SLAM是什么 室内/室外定位 稀疏-半稠密重建 稠密重建 SLAM可以用在哪些地方? **作业1.** SLAM会在哪些场合中⽤到?⾄少列举三个⽅向. SLAM: ...
- 《视觉SLAM十四讲 第二版》笔记及课后习题(第七讲)
读书笔记:视觉里程计1 之前的内容,介绍了运动方程和观测方程的具体形式,并讲解了以非线性优化为主的求解方法.从本讲开始,我们结束了基础知识的铺垫,开始步入正题:按照第二讲的内容,分别介绍视觉里程计.优 ...
- 《视觉slam十四讲》ch4学习笔记——sophus库使用的问题及解决方法
在看完<视觉slam十四讲>第四章李群和李代数后,准备调试相应的代码,但是出现了各种各样的问题,但最后还是万幸,成功完成了调试.在这里记录一下期间遇到的问题和相应的解决方法以及最后的感想. ...
- 《视觉SLAM十四讲 第二版》笔记及课后习题(第一讲)
前言 之所以想要写这个系列的博客,是因为想要总结一下高博的<SLAM视觉十四讲第二版>的各章内容以及自己对书后习题的一些做法,也算是对自己学习过程的一个总结和回顾.博客分为两个大部分,即读 ...
- 《视觉SLAM十四讲 第二版》笔记及课后习题(第三讲)
读书笔记:三维空间刚体运动 本讲介绍视觉 SLAM 的基本问题之一:一个刚体在三维空间中的运动是如何描述的.我们当然知道这由一次旋转加一次平移组成.平移确实没有太大问题,但旋转的处理是件麻烦事.我们将 ...
- 《视觉SLAM十四讲 第二版》笔记及课后习题(第十二讲)
读书笔记:建图 本讲我们开始介绍建图部分的算法.在前端和后端中,我们重点关注同时估计相机运动轨迹与特征点空间位置的问题.然而,在实际使用SLAM 时,除了对相机本体进行定位之外,还存在许多其他的需求. ...
- SLAM十四讲第三章课后习题
第5题:参考这篇博客,Eigen块操作讲的很细! Matrix4f m; m<< 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16; cout<<m ...
- 视觉slam十四讲第8章课后习题3+稀疏直接法程序注释
版权声明:本文为博主原创文章,转载请注明出处: http://www.cnblogs.com/newneul/p/8571653.html 3.题目回顾: 在稀疏直接法中,假设单个像素周围小块的光度 ...
- 深蓝学院视觉slam十四讲第2章作业
首先给出有关四元数讲解一份比较好的pdf 2.1 设线性⽅程 Ax=b\bm Ax = bAx=b,则有解充要条件为:系数矩阵An×n\bm A_{n \times n}An×n与其增广矩阵Bn×( ...
最新文章
- TCMalloc:线程缓存的Malloc
- 在Sun Enterprise Server上配置SCSI磁带机
- 数字图像处理笔记二 - 图片缩放(最近邻插值(Nearest Neighbor interpolation))
- find命令详解(原创)
- Java深度历险(五)——Java泛型
- Java并发编程 - Executor,Executors,ExecutorService, CompletionServie,Future,Callable
- 这9个人气超高的公众号,你还没关注吗?
- 分度器中硒定位器的完整指南(示例)
- php7 ast,PHP7 的抽象语法树(AST)带来的变化
- Node.js之------模块篇
- 【转】简单的解释XSS攻击
- 一张图11招学会Python网络黑客
- 使用flags定义命令行参数
- hive explain 源码分析
- 【操作系统】系统中断技术
- raid卡组不同raid_Linux 软件阵列与低端硬件阵列卡性能对比
- LuaAuxLib 按键精灵lua库
- e5 2680v3和e5 2682v4有什么区别
- 基于SSM的毕业设计管理系统
- GCC——C compiler
热门文章
- BZOJ 3527 [Zjoi2014] 力
- Flutter之层叠布局Stack、Positioned
- 暗黑模式切换(vue版)
- kafka是如何通过offset定位一条消息的?
- OpenGL几种绘制方式
- 某通讯录同步助手pandas数据清洗
- .rvm/rubies/ruby-2.3.3/lib/ruby/2.3.0/rubygems/...:in `require':
- mysql线上教程_线上环境mysql主从同步的搭建过程
- 空中网发布全新战舰手游 持续布局军武游戏市场
- 数据库设计工具PowerDesigner的强大