2.SJ-SLAM-14

摘要:
第三节课是三维空间中的刚体运动本课旨在了解三维空间中刚体运动的描述方法:旋转矩阵、变换矩阵、四元数和欧拉角。这种表示称为角轴或旋转矢量。

第三讲 三维空间刚体运动

本讲目标

理解三维空间的刚体运动描述方式:旋转矩阵、变换矩阵、四元数和欧拉角。

掌握Eigen库的矩阵、几何模块使用方法。

3.1 点、向量和坐标系,旋转矩阵

二维空间与三维空间主要区别在于,其旋转性,二维空间有1个自由度,三维空间有三个自由度。

2.SJ-SLAM-14第1张

光说向量不一定跟几何数有关系,比如说三维空间中的向量会跟着三个数,这三个数是向量的坐标,向量坐标和向量本身并不是一回事儿,向量本身可以定义出加法或减法等运算,向量可以平移什么的。

向量的坐标是指向量在一个坐标系下面的一个表示:

2.SJ-SLAM-14第2张

2.SJ-SLAM-14第3张

外积:axb可以改成一个矩阵乘以矩阵b的形式,这个矩阵是一个反对称的矩阵,

2.SJ-SLAM-14第4张

2.SJ-SLAM-14第5张

刚体运动:由平移和旋转组

2.SJ-SLAM-14第6张

由于他们是同一个向量,故相等。

2.SJ-SLAM-14第7张

R就称为旋转矩阵,

2.SJ-SLAM-14第8张

当你有一个旋转矩阵的时候,也就定义出了一种运算,

a1=R12a2,指向量在2坐标系下的坐标a2经过旋转矩阵R12变成了1坐标系下的坐标a1.

2.SJ-SLAM-14第9张

2.SJ-SLAM-14第10张

光是旋转的话还是比较方便的,但是加上平移之后就会显得非常麻烦。

为了方便,把坐标向量都加上1,如下

2.SJ-SLAM-14第11张

2.SJ-SLAM-14第12张

比较偏向于世界坐标转机器人坐标,

旋转向量、欧拉角

2.SJ-SLAM-14第13张

三自由度的东西,用9个数来表示(3x3的旋转矩阵),有点浪费存储空间,用旋转矩阵来算的话还比较麻烦,而且还有一定约束,所以很困难,这就引入了其他的方式

任何一个旋转都可以用一个轴和一个角来表示,如上图的a旋转到b绕轴w,然后有一定角度。

称这种表示称为角轴或者旋转向量。

w描述了整个旋转,方向为一个长度为1的方向为n,角度的大小为Θ

2.SJ-SLAM-14第14张

由于旋转矩阵和角轴都不是很直观,下面引用欧拉角

2.SJ-SLAM-14第15张

欧拉角不适用,它在计算中存在万向锁的事情,

2.SJ-SLAM-14第16张

所以在工程中不太会使用欧拉角,而是在表达的时候使用欧拉角

2.SJ-SLAM-14第17张

四元素可以用来表达旋转的,在工程里面用处会更广泛一些

2.SJ-SLAM-14第18张

四元素可以表达成一个实部和3个虚部组成,

2.SJ-SLAM-14第19张

2.SJ-SLAM-14第20张

下面讲一下怎么用四元素去旋转一个空间点

将三维空间的点用虚的四元素来表示,

p'=qpq-1,先使用qp来旋转,把p旋转到四维空间,然后乘以一个q-1,把四维空间旋转到三维空间当中,

2.SJ-SLAM-14第21张

要把一个轨迹存储到一个文件里面的话,一般都是使用四元素,因为存一个矩阵很麻烦,要有九个量。

2.SJ-SLAM-14第22张

下面讲解一下EIGEN里面的几何模块

可视化演示

实践部分:EIGEN

EIGEN它是在C++里面使用的一个矩阵库,效率高,优化做得好,在很多地方都用它去描述c++中的矩阵运算;

要事先安装EIGEN这个库,

sudo apt-get install libeigen3-dev

它会自动安装在目录/usr/include/eigen3/下面,在这里面就是EIGEN的头文件库,要引用这个头文件库,直接引用这里的文件就可以了

它是一个纯头文件的一个库,没有源文件,说明了在最后在使用的时候,不用链接什么库,直接在CMakeLists.txt里面加上头文件目录就可以了,如下

2.SJ-SLAM-14第23张

那么引进来之后就可以在源文件里面去加上eigen的头文件,

如Eigen/Core下有eigen的核心运算,

2.SJ-SLAM-14第24张

它跟matlab有点像,因为matlab所有的数据都是用矩阵来描述的,eigen也是使用矩阵来使用的;

EIGEN的基本数据类型都是在Matrix里面的,他是一个模板类,它有6个模板参数,

2.SJ-SLAM-14第25张

2.SJ-SLAM-14第26张

2.SJ-SLAM-14第27张

2.SJ-SLAM-14第28张

免责声明:文章转载自《2.SJ-SLAM-14》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java 后端微信支付demoPOI 生成Excel表格的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

混淆矩阵(Confusion matrix)的原理及使用(scikit-learn 和 tensorflow)

原理   在机器学习中, 混淆矩阵是一个误差矩阵, 常用来可视化地评估监督学习算法的性能. 混淆矩阵大小为 (n_classes, n_classes) 的方阵, 其中 n_classes 表示类的数量. 这个矩阵的每一行表示真实类中的实例, 而每一列表示预测类中的实例 (Tensorflow 和 scikit-learn 采用的实现方式). 也可以是,...

数据分析--降维--LDA和PCA

一、因子分析   因子分析是将具有错综复杂关系的变量(或样本)综合为少数几个因子,以再现原始变量和因子之间的相互关系,探讨多个能够直接测量,并且具有一定相关性的实测指标是如何受少数几个内在的独立因子所支配,并且在条件许可时借此尝试对变量进行分类。   因子分析的基本思想   根据变量间相关性的大小把变量分组,使得同组内的变量之间的相关性(共性)较高,并用一...

零基础入门深度学习(5)

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就out了?现在救命稻草来了,《零基础入门深度学习》系列文章旨在讲帮助爱编程的你从零基础达到入门级水平。零基础意味着你不需要太多的数学知识,只要会写程序就行了,...

PCA 人脸降维

1、从文件中读取图像数据(一共40个人,每人5张图片,图片大小为112*92,格式为pgm,每个人的图像单独存放在一个文件夹中) function [imgRow,imgCol,FaceContainer,faceLabel]=ReadFaces(nFacesPerPerson, nPerson, bTest) % 读入ORL人脸库的指定数目的人脸前前五张...

什么是卷积神经网络?为什么它们很重要?

原文地址:http://www.hackcv.com/index.php/archives/104/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 卷积神经网络的四个基本操作: 1、卷积 2、非线性处理(Relu) 3、赤化或者亚采样 4、分类(全连接层) 一、先说卷...

c++矩阵运算库Eigen

因为在看PCA,看到了矩阵运算库Engine。 官网教程:http://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html  Eigen简单上手使用要实现相应的功能只需要包含头相应的头文件即可: Core #include <Eigen/Core> Matrix and Arra...