视觉SLAM十四讲-第三讲-三维空间刚体运动
三维视觉基础介绍

(e)
(f)
(g)
(h)
几种全向摄像机
鱼眼镜头
Oc O
X
M
m
m0
球面成像过程
坐标系
1、世界坐标系: X w ,Yw , Z w
2、摄像机坐标系:X c ,Yc , Zc
3、图像坐标系: u, v x, y
Xw
Zw
Ow
Yw
世界坐标系
说明:
为了校正成像畸变
用理想图像坐标系 X u ,Yu
为了校正成像畸变为了校正成像畸变用理想图像坐标系用理想图像坐标系和真实图像坐标系和真实图像坐标系分别描述畸变前后的坐标关系分别描述畸变前后的坐标关系坐标系坐标系摄像机光学成像过程的四个步骤摄像机光学成像过程的四个步骤刚体变换刚体变换透视投影透视投影畸变校正畸变校正数字化图像数字化图像世界坐标系世界坐标系摄像机坐标系摄像机坐标系真实图像坐标系真实图像坐标系数字化图像坐标系数字化图像坐标系理想图像坐标系理想图像坐标系1刚体变换公式刚体变换公式齐次坐标形式齐次坐标形式物体物体图像图像fobfob为透镜的焦距为透镜的焦距mocmoc为像距为像距naonao一般地由于一般地由于于是于是这时可这时可以将透镜成像模型近以将透镜成像模型近似地用小孔模型代替似地用小孔模型代替透视投影透视投影透镜成像原理图透镜成像原理图写成齐次坐标形式为写成齐次坐标形式为透视投影透视投影小孔成像模型小孔成像模型写成齐次坐标形式为写成齐次坐标形式为中心透视投影模型中心透视投影模型dtpositionpositiondistortiondistortionidealidealpositionpositiondrdrdr
为什么要学习射影几何?
照相机的成像过程是一个射影变换(透视 或中心射影)的过程:
《视觉SLAM十四讲》笔记(ch7)

《视觉SLAM⼗四讲》笔记(ch7)ch7 视觉⾥程计1本章⽬标:1.理解图像特征点的意义,并掌握在单副图像中提取出特征点及多副图像中匹配特征点的⽅法2.理解对极⼏何的原理,利⽤对极⼏何的约束,恢复出图像之间的摄像机的三维运动3.理解PNP问题,以及利⽤已知三维结构与图像的对应关系求解摄像机的三维运动4.理解ICP问题,以及利⽤点云的匹配关系求解摄像机的三维运动5.理解如何通过三⾓化获得⼆维图像上对应点的三维结构本章⽬的:基于特征点法的vo,将介绍什么是特征点,如何提取和匹配特征点,以及如何根据配对的特征点估计相机运动和场景结构,从⽽实现⼀个基本的两帧间视觉⾥程计。
特征点:⾓点、SIFT(尺度不变特征变换,Scale-Invariant Feature Transform)、SURF、、ORB(后三个是⼈⼯设计的特征点,具有更多的优点)特征点的组成:1.关键点:指特征点在图像⾥的位置2.描述⼦:通常是⼀个向量,按照某种⼈为设计的⽅式,描述了该关键点周围像素的信息。
相似的特征应该有相似的描述⼦(即当两个特征点的描述⼦在向量空间上的距离相近,认为这两个特征点是⼀样的)以ORB特征为代表介绍提取特征的整个过程:ORB特征:OrientedFAST关键点+BRIEF关键⼦提取ORB特征的步骤:1.提取FAST⾓点:找出图像中的“⾓点”,计算特征点的主⽅向,为后续BRIEF描述⼦增加了旋转不变特性FAST⾓点:主要检测局部像素灰度变化明显的地⽅特点:速度快缺点:1).FAST特征点数量很⼤且不确定,但是我们希望对图像提取固定数量的特征2).FAST⾓点不具有⽅向信息,并且存在尺度问题解决⽅式:1).指定要提取的⾓点数量N,对原始FAST⾓点分别计算Harris响应值,然后选取前N个具有最⼤响应值的⾓点作为最终的⾓点集合2).添加尺度和旋转的描述 尺度不变性的实现:构建图像⾦字塔,并在⾦字塔的每⼀层上检测⾓点(⾦字塔:指对图像进⾏不同层次的降采样,以获得不同分辨率的图像)特征旋转的实现:灰度质⼼法(质⼼:指以图像块灰度值作为权重的中⼼)2.计算BRIEF描述⼦:对前⼀步提取出的特征点周围图像区域进⾏扫描特点:使⽤随机选点的⽐较,速度⾮常快,由于使⽤了⼆进制表达,存储起来也⼗分⽅便,适⽤于实时的图像匹配在不同图像之间进⾏特征匹配的⽅法:1.暴⼒匹配:浮点类型的描述⼦,使⽤欧式距离度量⼆进制类型的描述⼦(⽐如本例中的BRIEF描述⼦),使⽤汉明距离度量缺点:当特征点数量很⼤时,暴⼒匹配法的运算量会变得很⼤2.快速近似最近邻(FLANN):适合匹配特征点数量极多的情况实践部分:1.OpenCV的图像特征提取、计算和匹配的过程:演⽰如何提取ORB特征并进⾏匹配代码: 1 #include <iostream>2 #include <opencv2/core/core.hpp>3 #include <opencv2/features2d/features2d.hpp>4 #include <opencv2/highgui/highgui.hpp>56using namespace std;7using namespace cv;89int main(int argc,char** argv)10 {11if(argc!=3)12 {13 cout<<"usage:feature_extraction img1 img2"<<endl;14return1;15 }1617//读取图像18 Mat img_1=imread(argv[1],CV_LOAD_IMAGE_COLOR);19 Mat img_2=imread(argv[2],CV_LOAD_IMAGE_COLOR);2021//初始化22 vector<KeyPoint> keypoints_1,keypoints_2;//关键点,指特征点在图像⾥的位置23 Mat descriptors_1,descriptors_2;//描述⼦,通常是向量24 Ptr<ORB> orb=ORB::create(500,1.2f,8,31,0,2,ORB::HARRIS_SCORE,31,20);2526//第⼀步:检测OrientFAST⾓点位置27 orb->detect(img_1,keypoints_1);28 orb->detect(img_2,keypoints_2);2930//第2步:根据⾓点位置计算BRIEF描述⼦31 orb->compute(img_1,keypoints_1,descriptors_1);32 orb->compute(img_2,keypoints_2,descriptors_2);3334 Mat outimg1;35 drawKeypoints(img_1,keypoints_1,outimg1,Scalar::all(-1),DrawMatchesFlags::DEFAULT);36 imshow("1.png的ORB特征点",outimg1);37 Mat outimg2;38 drawKeypoints(img_2,keypoints_2,outimg2,Scalar::all(-1),DrawMatchesFlags::DEFAULT);39 imshow("2.png的ORB特征点",outimg2);4041//第3步:对两幅图像中的BRIEF描述⼦进⾏匹配,使⽤Hamming距离42 vector<DMatch> matches;43//特征匹配的⽅法:暴⼒匹配44 BFMatcher matcher(NORM_HAMMING);45 matcher.match(descriptors_1,descriptors_2,matches);46// for(auto it=matches.begin();it!=matches.end();++it)47// {48// cout<<*it<<" ";49// }50// cout<<endl;5152//第4步:匹配点对筛选53 distance是min_dist5455double min_dist=10000,max_dist=0;5657//找出所有匹配之间的最⼩距离和最⼤距离,即最相似的和最不相似的和最不相似的两组点之间的距离58for(int i=0;i<descriptors_1.rows;++i)59 {60double dist=matches[i].distance;61// cout<<dist<<endl;62if(dist<min_dist) min_dist=dist;63if(dist>max_dist) max_dist=dist;64 }6566 printf("--Max dist:%f\n",max_dist);67 printf("--Min dist:%f\n",min_dist);6869//当描述⼦之间的距离⼤于两倍的最⼩距离时,即认为匹配有误70//但有时候最⼩距离会⾮常⼩,设置⼀个经验值作为下限71 vector<DMatch> good_matches;72for(int i=0;i<descriptors_1.rows;++i)73 {74if(matches[i].distance<=max(2*min_dist,30.0))75 {76 good_matches.push_back(matches[i]);77 }78 }7980//第5步:绘制匹配结果81 Mat img_match;82 Mat img_goodmatch;83 drawMatches(img_1,keypoints_1,img_2,keypoints_2,matches,img_match);84 drawMatches(img_1,keypoints_1,img_2,keypoints_2,good_matches,img_goodmatch);85 imshow("所有匹配点对",img_match);86 imshow("优化后匹配点对",img_goodmatch);87 waitKey(0);8889return0;90 }实验结果:1.png中提取到的特征点2.png中提取到的特征点匹配结果: 所有点对匹配结果 优化后的匹配点对结果(筛选依据是Hamming距离⼩于最⼩距离的两倍)结果分析:尽管在这个例⼦中利⽤⼯程经验优化筛选出正确的匹配,但并不能保证在所有其他图像中得到的匹配都是正确的,所以,在后⾯的运动估计中,还要使⽤去除误匹配的算法。
三维空间刚体运动——(1)齐次坐标与旋转矩阵

三维空间刚体运动——(1)齐次坐标与旋转矩阵⽬录:什么是齐次坐标?简单的说:齐次坐标就是在原有坐标上加上⼀个维度:使⽤齐次坐标有什么优势1、能⾮常⽅便的表达点在直线或平⾯上在2D平⾯上,⼀条直线 l 可以⽤⽅程 ax + by + c = 0 来表⽰,该直线⽤向量表⽰的话⼀般记做我们知道点p = (x, y)在直线 l 上的充分必要条件是 ax + by + c = 0如果使⽤齐次坐标的话,点p的齐次坐标就是p'=(x, y, 1)那么 ax + by + c = 0 就可以⽤两个向量的内积(点乘)来表⽰:因此,点p在直线l上的充分必要条件就是直线l 与p的齐次坐标p'的内积:是不是很⽅便呢!同理,我们知道三维空间的⼀个平⾯A可以⽤⽅程 ax + by + cz + d = 0 来表⽰,三维空间的⼀个点P=(x, y, z) 的齐次坐标 P'=(x, y, z, 1),类似的,点P在空间平⾯A上可以⽤两个向量的内积来表⽰,如下:因此,点P在平⾯A上的充分必要条件就是平⾯A 向量与P的齐次坐标P'的内积(点乘):2、⽅便表达直线与直线,平⾯与平⾯的交点先给出结论,后⾯再具体解释:结论:在齐次坐标下,可以⽤两个点 p, q 的齐次坐标叉乘结果来表达⼀条直线 l,也就是l = p x q也可以使⽤两条直线 l, m 的叉乘表⽰他们的交点 xx = l x m见下⾯⽰例图。
之所以可以这么简洁的表⽰交点是因为采⽤了齐次坐标的表⽰⽅式。
那么这是为什么呢?先介绍⼀下叉乘(也称叉积、外积)的概念:两个向量 a和b 的叉乘仅在三维空间中有定义,写作 a x ba xb 是与向量 a, b都垂直的向量,其⽅向通过右⼿定则(见下图)决定。
其模长等于以两个向量为边的平⾏四边形的⾯积(见下图)。
叉乘可以定义为:其中θ表⽰a, b的夹⾓(0°到180°之间),||a||, ||b||是向量a, b的模长n则是⼀个与向量a, b所构成的平⾯垂直的单位向量根据叉乘定义:向量⾃⾝叉乘结果为0,因为夹⾓为0。
视觉SLAM

用形式更简单的 E 。
三角测量确定深度
• 在得到运动之后,下一步我们需要用相机的运动估计特征点的空间位置。在单目 SLAM 中,仅通过单张图 像无法获得像素的深度信息,我们需要通过三角测量( Triangulation )(或三角化)的方法来估计地图点
回环检测
• 回环检测,又称闭环检测( Loop Closure Detection ),主要解决位置 估计随时间漂移的问题。 • 前端提供特征点的提取和轨迹、地图的初值,而后端负责对这所有的数据
进行优化。然而,如果像 VO 那样仅考虑相邻时间上的关联,那么,之前
产生的误差将不可避免地累计到下一个时刻,使得整个 SLAM 会出现累积 误差。长期估计的结果将不可靠,或者说,我们无法构建全局一致的轨迹
用对极几何恢复出在两帧之间摄像机的运动
• 现在,假设我们从两张图像中,得到了一对配对好的特征点,像图 7-7 里显示的那样。如果我们有若 干对这样的匹配点,就可以通过这些二维图像点的对应关系,恢复出在两帧之间摄像机的运动。
• 1. 根据配对点的像素位置,求出 E 或者 F ;
• 2. 根据 E 或者 F ,求出 R, t 。由于 E 和 F 只相差了相机
视觉 SLAM
蔺志强 苏 敬
• SLAM 是 Simultaneous Lo“同时定位与地图构
建”。它是指搭载特定传感器的主体,在没有环 境先验信息的情况下,于运动过程中建立环境的 模型,同时估计自己的运动。如果这里的传感器 主要为相机,那就称为“视觉 SLAM ”。
和地图。
核心问题是如何计算图像间的相似性
• 最简单的方式就是对任意两张图像都做一遍特征匹配,根据正确匹配的数量确定哪两个图像存在关联。但 计算量大,效率低下。 • 基于里程计的几何关系( Odometry based ), • 基于外观( Appearanc e based )仅根据两张图像的相似性确定回环检测关系,这种做法摆脱了累计误差, 使回环检测模块成为 SLAM 系统中一个相对独立的模块。
手写VIO(一)概论与预备知识

⼿写VIO(⼀)概论与预备知识第⼀章 VIO概论当前市⾯上很少有系统介绍VIO系统的书⼀ VIO简介VIO(Visual-Inertial Odometry):以视觉和IMU融合的⽅法实现定位的⾥程计接下来介绍VIO使⽤到的两个信息1. IMU(Inertial MeasureMent Unit)惯性测量单元典型的6轴IMU能以较⾼频率(>= 100Hz)返回被测量物体的⾓速度和加速度IMU的缺点在于,容易收到⾃⾝温度、灵⽚、振动等因素⼲扰,通过积分直接得到的评议和旋转将产⽣漂移2. 视觉信息通过视觉定位的⽅法即视觉SLAM,主要利⽤相机采集的图⽚信息作为输⼊,采样频率较低(15-60Hz居多)定位的时候主要通过图像特征点或像素推断相机运动之所以使⽤以上两个硬件主要是由于⼆者的互补性。
3. ⼆者的互补性IMU与视觉定位的优劣势对⽐⽅案IMU视觉优势快速响应不受成像质量影响⾓速度普遍⽐较准确可估计绝对尺度不产⽣漂移直接测量旋转与平移劣势存在零偏低精度IMU积分位⼦发散⾼精度IMU价格昂贵受图像遮挡、运动物体⼲扰单⽬视觉⽆法测量尺度单⽬纯旋转运动⽆法估计快速运动时易丢失可以看出视觉与IMU之间存在⼀定的互补性质:IMU适合于计算短时间快速的运动视觉适合计算长时间慢速的运动同时,可以利⽤视觉定位信息来估计好吃IMU的零偏,减少IMU由零偏导致的发散和累积误差。
反之,IMU也可以为视觉提供快速运动的定位。
应⽤IMU数据可以多种定位⽅案融合⾃动驾驶中通常使⽤IMU+GPS差分GPS/RTK的融合定位⽅案,形成GNSS-INS组合导航系统,打倒厘⽶组定位精度;头戴式AR/VR头盔则多使⽤视觉+IMU的VIO定位系统,形成⾼帧率定位⽅案⾥程计的后端根据信息融合的⽅式进⾏分类我们可以把视觉⾥程计分为松耦合和紧耦合两种1. 松耦合将 IMU 定位与视觉/GNSS 的位姿直接进⾏融合,融合过程对⼆者本⾝不产⽣影响,作为后处理⽅式输出。
视觉slam介绍

• 纯视觉Ba中,不存在相机与相机/路标
与路标之间的关联
• 整个误差函数由许多个这样小的项组 成
Dxc
Dx p
第五讲 回环检测
Chapter 5: Loop detection
为消除累计误差,获得全局一致的 地图和轨迹,仅仅通过帧间数据匹配 估计运动位姿是远远不够的,需要在 全局数据中进行处理才能得到更好的 结果。在这个过程中,回环检测就发 挥了非常重要的作用。回环检测可以 有效修正运动轨迹,将累计误差消除 。
t
3.5 光流
• 对 t+dt 时刻的灰度进行Taylor展开并保留一阶项:
• 由于灰度不变,所以
• 希望求解dx/dt, dy/dt
因此 =>
x方向梯度 随时间变化 y方向梯度
w´w
最后,我们可以通过光流跟踪的特征的,用PnP、ICP 或对极几何来估计相机运动。总而言之,光流法可以加速 基于特征点的视觉里程计算法,避免计算和匹配描述子的 过程,但要求相机运动较慢(或采集频率较高)。
• 代数的解法/优化的解法
• 代数的
• DLT • P3P • EPnP/UPnP/…
• 优化的:BLT(直接线性变换)
• 设空间点 • 投影点为: • 投影关系: • 展开:
• 注意最下一行为
归一化坐标
•
用它消掉前两行中的s,则一个特征点
提供两个方程:
• 为求解12个未知数,需要12/2=6对点。 • 将它看成一个关于t的线性方程,求解 (超定时求最小二乘解)
Chapter 3: Visual Odometry
• 特征点:图像当中具有代表性的部分
• 可重复性 • 可区别性 • 高效 • 本地
【视觉SLAM十四讲课后作业答案】第三讲:李群与李代数

第一节课习题屋卡2017年12月19日一、验证向量叉乘的李代数性质我们说向量和叉乘运算构成了李代数,现在请你验证它。
书中对李代数的定义为:李代数由⼀个集合V,⼀个数域 F 和⼀个⼀元运算[,] 组成。
如果它们满⼀以下⼀条性质,称(V,F,[,]) 为⼀个李代数,记作g二、推导SE(3) 的指数映射课上给出了SO(3) 的指数映射推导,但对于SE(3),仅介绍了结论,没有给出详细推导。
请你完成SE(3) 指数映射部分,有关左雅可⼀的详细推导。
三、伴随在SO(3) 和SE(3) 上,有⼀个东西称为伴随(Adjoint)。
下⼀请你证明SO(3) 伴随的性质。
对于SO(3),有:Rexp(p∧)RT = exp((Rp)∧).此时称Ad(R) = R。
解:四、轨迹的描绘我们通常会记录机器⼀的运动轨迹,来观察它的运动是否符合预期。
⼀部分数据集都会提供标准轨迹以供参考,如kitti、TUM-RGBD 等。
这些⼀件会有各⼀的格式,但⼀先你要理解它的内容。
记世界坐标系为W,机器⼀坐标系为C,那么机器⼀的运动可以⼀TWC 或TCW 来描述。
现在,我们希望画出机器⼀在世界当中的运动轨迹,请回答以下问题:1.事实上,TWC 的平移部分即构成了机器⼀的轨迹。
它的物理意义是什么?为何画出TWC 的平移部分就得到了机器⼀的轨迹?解:wc T 的平移部分构成机器人的轨迹,它的物理意义是机器人在现实三维空间中的坐标点。
wc T 包含平移和旋转部分 ,平移指的是机器人在空间中的运动位置,而旋转部分是指机器人在每个位置的方向状态。
2. 我为你准备了⼀个轨迹⼀件(code/trajectory.txt )。
该⼀件的每⼀⼀由若⼀个数据组成,格式为[t,tx,ty,tz,qx,qy,qz,qw],其中 t 为时间,tx,ty,tz 为 TWC 的平移部分,qx,qy,qz,qw 是四元数表⼀的 TWC 的旋转部分,qw 为四元数实部。
同时,我为你提供了画图程序 draw_trajectory.cpp ⼀件。
视觉SLAM综述

通过基于光束平差法 ( Bundle Adjustment,BA) 的图优化理论估计相机的 位姿和地图点坐标,大大 提高了 SLAM 的精度。
目前,基于关键帧的VSLAM成为主流算法。最具代表性的有 两种: 一种是 LSD-SLAM [6] ,属于半稠密的单目的 VSLAM; 一 种是 ORB-SLAM [7,8] ,属于稀疏的 VSLAM。
3、稠密VSLAM
为了降低稠密地图的计算量,Engel J[12,13]提出了半稠 密地图(semi-direct visual odometry,SVO),通过结 合关键点的思想和直接配准的方法,大大降低了计算复 杂度。目前最先进的SVO就是Engel J等提出的LSDSLAM[13],已经能在CPU上实现了实时性。
什么是SLAM?
SLAM问题可以描述为: 机器人在未知环境中从一个未知 位置开始移动,在移动过程中根据位置估计和地图进行 自身定位,同时在自身定位的基础上建造增量式地图, 实现机器人的自主定位和导航。
(1)定位(localization):机器人必须知道自己在环境中位 置。 (2)建图(mapping):机器人必须记录环境中特征的位置 (如果知道自己的位置)
后端图优化流程
2.3 后端优化
2.4 建图
在经典的VSLAM模型中,所谓的建图,即找到所有路标 点,这些路标点的集合即是最终的地图,一旦确定了路 标点的位置,即可以说完成了建图。地图类型分为栅格 地图,拓扑地图,特征地图和混合地图。根据建图需求 不同,可以将建图用途分为两类:
定位:把地图下来,机器人下次开机后仍然能在地图上 定位,不需要再次建模,此类地图,稀疏地图即可完成。
1.2 地图的稠密程度
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
17
3.2 实践部分:EIGEN
18
3.3 旋转向量、欧拉角
19 第三讲 三维空间刚体运动
• 除了旋转矩阵之外的旋转表示 • 三维旋转:三自由度,用 ������3 向量表示
• 方向为旋转轴、长度为转过的角度
• 称为角轴(Angle-Axis)或旋转向量(Rotation Vector)
������ = ������������
• 于是:
������21 = ������1−21 = ������1������2
• 进一步,三个坐标系亦有:
������3 = ������32������2 = ������32������21������1 = ������31������1
13 第三讲 三维空间刚体运动
• 加上平移: • 两个坐标系的刚体运动可以由 ������, ������ 完全描述。
10 第三讲 三维空间刚体运动
• 旋转
• 设某坐标系
发生了一次旋转,变成了
• 对于某个固定的向量 (向量不随坐标系旋转),它的坐标怎么变化?
• 坐标关系:
11 第三讲 三维空间刚体运动
• 左乘
,得:
12 第三讲 三维空间刚体运动
• 中间的矩阵 ������ 称为旋转矩阵 • 根据定义可以验证:
14 第三讲 三维空间刚体运动
• 齐次坐标与变换矩阵 • 用旋转+平移方式有一点不便之处,比如发生了两次变换: • 这时: • 叠加起来过于复杂
15 第三讲 三维空间刚体运动
• 改变形式,写成:
•记
������ =
������ 1
• 那么多次变换就可写成:
• 这种用四个数表达三维向量的做法称 为齐次坐标
• 旋转矩阵转轴角
• 角度:
• 轴:
21 第三讲 三维空间刚体运动
• 欧拉角(Euler Angles)
• 将旋转分解为三次不同轴上 的转动,以便理解
• 例如:按 Z-Y-X 顺序转动 • 轴可以是定轴或动轴,顺序
亦可不同,因此存在许多种 定义方式不同的欧拉角
• 常见的有 yaw-pitch-roll (偏航-俯仰-滚转)角等等。
4
3.1 点、向量和坐标系,旋转矩阵
5 第三讲 三维空间刚体运动
• 点存在于三维空间之中 • 点和点可以组成向量 • 点本身由原点指向它的向量所描述
• 向量
• 带指向性的箭头 • 可以进行加法、减法等运算
6 第三讲 三维空间刚体运动
• 定义坐标系后,向量可以由 R3 坐标表示
• 坐标系:由三个正交的轴组成
23 第三讲 三维空间刚体运动
• 由于万向锁,欧拉角不适于插值和迭代,往往只用于人机交互中。 • 可以证明,用三个实数来表达三维旋转时,会不可避免地碰到奇异性问题。 • SLAM 程序中很少直接使用欧拉角表达姿态
24
3.4 四元数
25 第三讲 三维空间刚体运动
• 四元数(Quaternion)
视觉SLAM十四讲
从理论到实践
高翔 清华大学 2016年冬
2
第三讲 三维空间刚体运动
Chapter 3: 3D Space Rigid Body Motion
3 第三讲 三维空间刚体运动
• 本讲目标
• 理解三维空间的刚体运动描述方式:旋转矩阵、变换矩阵、四元数和欧拉角。 • 掌握Eigen库的矩阵、几何模块使用方法。
• 一个点的世界坐标为 ������������,机器人坐标 系下为 ������������ ,那么满足关系:
������������ = ������������������������������
• 反之亦然
• 在实际编程中,可使用 ������������������ 或 ������������������ 来 描述机器人的位姿。
• R是一个正交矩阵; • R的行列式为+1。
• 满足这两个性质的矩阵称为旋转矩阵
• Special Orthogonal Group 特殊正交群
• 旋转矩阵描述了两个坐标的变换关系
• 比如:
������1 = ������12������2
• 反之:
������2 = ������21������1
1. 绕物体的Z轴旋转,得到偏航角yaw; 2. 绕旋转之后的Y轴旋转,得到俯仰角pitch; 3. 绕旋转之后的X轴旋转,得到滚转角roll。
22 第三讲 三维空间刚体运动
• 万向锁(Gimbal Lock)
• ZYX顺序中,若Pitch为正负90度,则第三次旋转和第一次绕同一个轴,使得系统丢失 了一个自由度——存在奇异性问题
20 第三讲 三维空间刚体运动
• 角轴与旋转矩阵的不同
• 旋转矩阵:九个量,有正交性约束 和行列式值约束
• 角轴:三个量,没有约束
• 注意它们只是表达方式的不同,但表 达的东西可以是同一个
• 角轴也就是第四章要介绍的李代数
• 转换关系
• 轴角转旋转矩阵:罗德里格斯 公式(Rodrigues's Formula )
• 引入齐次坐标后,旋转和平移可以放 入同一个矩阵,称为变换矩阵
• 称为特殊欧氏群(Special Euclidean Group)
16 第三讲 三维空间刚体运动
• 类似的,可定义反向的变换:
• 例子
• 在SLAM中,通常定义世界坐标系 ������������ 与机器人坐标系 ������������
1. 将 ������ 的坐标用四元数表示(虚四元数): 2. 旋转之后的关系为:
可以验证这货也是虚四元数
• 四元数相比于角轴、欧拉角的优势:紧凑、无奇异性
29
3.5 *相似、仿射、射影变换(略)
30
3.6 实践部分:EIGEN几何模块
31
3.表达二维平面的旋转
• 四元数有三个虚部,可以表达三维空间中的旋转:
• 虚部之间的关系:
自己和自己的运算像复数 自己和别人的运算像叉乘
26 第三讲 三维空间刚体运动
• 和复数一样,单位四元数可以表达三维空间的一次旋转 • 四元数的一些运算和性质:
加减法 乘法
共轭 模长
逆
乘法
数乘 点乘
27 第三讲 三维空间刚体运动
• 四元数和角轴的关系
• 角轴到四元数: • 四元数到角轴:
• 类似可知四元数亦可转换为旋转矩阵、欧拉角
28 第三讲 三维空间刚体运动
• 如何用四元数旋转一个空间点? • 设点 ������ 经过一次以 ������ 表示的旋转后,得到了 ������′ ,它们关系如何表示?
• 在SLAM中:
• 固定的世界坐标系和移动的机器人坐标系 • 机器人坐标系随着机器人运动而改变,每个时刻都有新的坐标系
9 第三讲 三维空间刚体运动
• 两个不同的坐标系 • 如何描述左侧到右侧的变化? • 直观看来由两个部分组成:
• 原点间的平移 • 三个轴的旋转
• 平移是一个向量 • 旋转是什么?
• 构成线性空间的一组基 • 左手系和右手系
7 第三讲 三维空间刚体运动
• 向量的运算可以由坐标运算来表达 • 加减法 • 内积 • 外积
这个定义 之后还要用
8 第三讲 三维空间刚体运动
• 目前为止都很平凡 • 但是有一个基本问题:
坐标系之间是如何变化的?
• 进而:
如何计算同一个向量在不同坐标系里的坐标?