第三讲 三维空间刚体运动

本讲目标

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

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

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

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

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

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

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

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

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

R就称为旋转矩阵,

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

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

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

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

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

旋转向量、欧拉角

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

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

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

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

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

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

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

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

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

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

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

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

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

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

可视化演示

实践部分:EIGEN

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

要事先安装EIGEN这个库,

sudo apt-get install libeigen3-dev

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

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

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

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

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

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

2.SJ-SLAM-14的更多相关文章

  1. JavaSE自学笔记

    ch03 [Thu Aug 18 2016 11:22:26 GMT+0800] 对象变量与对象之间是指代关系,对象变量并不能完全说明有无对象可用.这种指代关系是通过赋值运算建立起来的.对象变量保存的 ...

  2. (自用)专业排版套装:CTeX + TeXStudio

    \documentclass[UTF8,landscape]{ctexart}%UTF8,ctexart中文支持,landscape横向版面 \usepackage{tikz}%画图 \usepack ...

  3. SLAM Course - WS13/14 by Cyrill Stachniss (1) 课程资源汇总

    本帖是作者学习SLAM 课程笔记的资源帖,汇总了SLAM Course - WS13/14 by Cyrill Stachniss 的相关资源. 1. 课程网站,有相关课件作业和教学视频下载. htt ...

  4. SLAM+语音机器人DIY系列:(一)Linux基础——2.安装Linux发行版ubuntu系统

    摘要 由于机器人SLAM.自动导航.语音交互这一系列算法都在机器人操作系统ROS中有很好的支持,所以后续的章节中都会使用ROS来组织构建代码:而ROS又是安装在Linux发行版ubuntu系统之上的, ...

  5. SLAM+语音机器人DIY系列:(二)ROS入门——4.如何编写ROS的第一个程序hello_world

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  6. 一颗躁动的心---下决心从SLAM开始,不钻研嵌入式底层了

    在写这个随笔时,北京的外面正在下2016的第一场雪.夜深人尽之时总会考虑一下自己的未来在何方. 长这么大了,我发现我这人始终不能坚定不移的朝着一个方向努力,总是朝三暮四,对学习更是朝令夕改,这造成了我 ...

  7. 一起做RGB-D SLAM 第二季 (一)

    小萝卜:师兄!过年啦!是不是很无聊啊!普通人的生活就是赚钱花钱,实在是很没意思啊! 师兄:是啊…… 小萝卜:他们都不懂搞科研和码代码的乐趣呀! 师兄:可不是嘛…… 小萝卜:所以今年过年,我们再做一个S ...

  8. SLAM拾萃(3):siftGPU

    前言 本周博客我们给大家介绍一下SiftGPU.由于特征匹配是SLAM中非常耗时间的一步,许多人都想把它的时间降至最短,因此目前ORB成了非常受欢迎的特征.而老牌SIFT,则一直给人一种“很严谨很精确 ...

  9. implement Google's Open Source Slam "Cartographer" demos in ROS/rviz

    Cartographer is a backpack equipped with Simultaneous Localization and Mapping (SLAM) technology. 1. ...

  10. (转) 实时SLAM的未来及与深度学习的比较

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     实时SLAM的未来及与深度学习的比较 The Future of Real-Time SLAM and “Deep Learni ...

随机推荐

  1. 【每日Scrum】第五天(4.26) TD学生助手Sprint2站立会议

    站立会议 组员 昨天 今天 困难 签到 刘铸辉 (组长) 今天增加了几个页面的子菜单,然后设计了几个要用的界面 今天和楠哥做了课程事件和日历表操作的例子,并尝试做时间表和日历表的数据库设计 安卓的数据 ...

  2. 超越MySQL:三个流行MySQL分支的对比(转)

    导读:尽管MySQL是最受欢迎的程序之一,但是许多开发人员认为有必要将其拆分成其他项目,并且每个分支项目都有自己的专长.该 需求以及Oracle对核心产品增长缓慢的担忧,导致出现了许多开发人员感兴趣的 ...

  3. Cocos2d-X中提高性能的方法

     1)内存使用效率: 使用大纹理 场景切换时,要尽量使用replaceScene 2)用好缓存: CCTextureCache(纹理缓存) CCSpriteFrameCache(精灵帧缓存) CC ...

  4. YUV格式

    http://blog.csdn.net/u011270282/article/details/50696616 http://blog.csdn.net/acs713/article/details ...

  5. jmeter后置处理器之正則表達式提取器

    新浪围脖>@o蜗牛快跑o    使用这个组件时,注意使用带分组的正則表達式 使用正则分组方便提取干净数据.以免再次处理数据字符串 正則表達式在线工具推荐:点击打开链接 正則表達式语法參考:点击打 ...

  6. 带缓冲的IO( 标准IO库 )

    前言 在之前,学习了 read write 这样的不带缓冲IO函数.而本文将讲解标准IO库中,带缓冲的IO函数. 为什么要有带缓冲IO函数 标准库提供的带缓冲IO函数是为了减少 read 和 writ ...

  7. 用EasyClient开源项目采集Windows摄像头/麦克风的音视频进行RTSP直播

    EasyClient是EasyDarwin开源流媒体团队开发的一款功能丰富的开源PC客户端项目,目前支持Windows.Android版本,后续将支持ios版本,其中Windows版本的EasyCli ...

  8. gdb coredump的使用

    1 出现core dump时最好的办法是使用gdb查看coredump文件 2 使用的条件 出现问题的代码,系统,所有涉及的代码都应该一起编译,然后得到符号表,这样加载符号表,使用coredump文件 ...

  9. IP address could not be resolved: Name or service not known

    [root@test ~]# /usr/local/mysql/bin/mysqld2018-08-05T07:00:33.647509Z 0 [Warning] [MY-011070] [Serve ...

  10. file descriptor 0 1 2 一切皆文件 stdout stderr stdin /dev/null 沉默是金 pipes

    $>emtry_or_create_a_file.f $ll>>append_a_file.f standard output input error $ls -l /usr/bin ...