数学基础-3D空间的位置表示
转自:http://www.cnblogs.com/gaoxiang12/p/5113334.html
刚体运动
本篇讨论一个很基础的问题:如何描述机器人的位姿。这也是SLAM研究的一个很基本的问题。这里的位姿表示了位置和姿态。描述位置很简单,如果机器人在平面内运动,那么用两个坐标来描述它的位置:
如果在三维空间中运动,则它的位置就用三个空间坐标来表示:
对于姿态来说,在2D情况下还需要增加一个旋转角θ;在3D情况下表达的方式就有多种,常见的如欧拉角、四元素、旋转矩阵等。那么有了位置和姿态,就可以描述一个坐标系;进一步,还能描述坐标系之间的转换关系。常见的问题如:机器人视野中某个点,对世界坐标系的(或地图的)哪个点?这时,就需要先得到该点针对机器人坐标系坐标值,再根据机器人位姿转换到世界坐标系中。
齐次坐标系
在位姿转换中,通常采用射影空间的齐次坐标表示。齐次坐标是什么呢?记n维射影空间为其中一个空间点的坐标为普通的3D坐标加一个齐次分量:
例如,在2维和3维射影空间中的点,分别表示为:
用四个数来表示点,说明点和坐标肯定不是一一对应的。没错,在齐次坐标中,某个点x的分量同乘一个非零常数k后,仍然表示的是同一个点。因此,一个点的具体坐标值不是唯一的。如但是在w不等于0,可以对每一个坐标除以最后一项w,强制最后一项为1,从而得到一个点唯一的坐标表示:
那么为什么要使用齐次坐标来表示呢?原因如下:
1)齐次坐标下点和直线(高维空间里为超平面)能够使用同样的表达。
把点和超平面采用同样的表示,这种做法一个非常直接的好处,是射影几何里的“对偶原理”。该原理是说,任何有关“点”与“平面”的命题,都可以交换“点”与“平面”的概念,得到一个对偶的命题。对偶命题和原命题是一样的。通过“对偶原理”,射影几何的数学家就可以偷懒,只需要证一半定理,因为对偶命题和原命题有同样的涵义。例如,我们证明了 中某条件下三点共线,那么替换概念后的三线共点则自然成立。
2)齐次坐标能囊括无穷远点与无穷远超平面
θθ3)齐次坐标可以方便地将平移与旋转放在一个矩阵中
有关坐标系怎么用齐次坐标进行变换,后文会详细解释。现在我们能表达点了,还剩下一个姿态。由于2D与3D差别较大,我们分而述之。
2D姿态的描述
3D变换
3D的旋转可以由旋转矩阵、欧拉角、四元素等若干种方式描述,它 们也统称为三维旋转群SO(3);而3D的变换即旋转加上位移,是SE(3)。为了和2D变换统一起见,我们首先介绍旋转矩阵表示法。
旋转矩阵描述
数学基础-3D空间的位置表示的更多相关文章
- 视觉SLAM的数学基础 第一篇 3D空间的位置表示
视觉SLAM中的数学基础 第一篇 3D空间的位置表示 前言 转眼间一个学期又将过去,距离我上次写<一起做RGBD SLAM>已经半年之久.<一起做>系列反响很不错,主要由于它为 ...
- Direct3D 11 Tutorial 4: 3D Spaces_Direct3D 11 教程4:3D空间
概述 在上一个教程中,我们在应用程序窗口的中心成功渲染了一个三角形. 我们没有太注意我们在顶点缓冲区中拾取的顶点位置. 在本教程中,我们将深入研究3D位置和转换的细节. 本教程的结果将是渲染到屏幕的3 ...
- WebGL和ThreeJs学习6--射线法确定3D空间中所选物体
一.在 threejs 中如何确定下图3D空间中鼠标点击位置的 object 对象? 二.射线法确定步骤及代码 //Three.js提供一个射线类Raycaster来拾取场景里面的物体.更方便的使用鼠 ...
- OpenGL学习进程(9)在3D空间的绘制实例
本节将演示在3D空间中绘制图形的几个简单实例: (1)在3D空间内绘制圆锥体: #include <GL/glut.h> #include <math.h> # ...
- NeHe OpenGL教程 第五课:3D空间
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 第05课 OpenGL 3D空间
3D空间: 我们使用多边形和四边形创建3D物体,在这一课里,我们把三角形变为立体的金子塔形状,把四边形变为立方体. 在上节课的内容上作些扩展,我们现在开始生成真正的3D对象,而不是象前两节课中那样3D ...
- 仿QQ空间根据位置弹出PopupWindow显示更多操作效果
我们打开QQ空间的时候有个箭头按钮点击之后弹出PopupWindow会根据位置的变化显示在箭头的上方还是下方,比普通的PopupWindow弹在屏幕中间显示好看的多. 先看QQ空间效果图: ...
- Oracle转移数据表空间存储位置
问题描述:Oracle表空间创建到了C盘,发现C盘的空间不够,现在将表空间的文件转移到D盘下. 操作方法: 1. 先登录sqlplus,登录用户.在cmd中输入:sqlplus /nologSQL&g ...
- 3D空间包围球(Bounding Sphere)的求法
引言 在3D碰撞检測中,为了加快碰撞检測的效率,降低不必要的碰撞检測,会使用基本几何体作为物体的包围体(Bounding Volume, BV)进行測试.基本包围体的碰撞检測相对来说廉价也easy的多 ...
随机推荐
- NSString *const 和 const NSString * 的区别
1.变量存储的指针可变,变量存储的值不可变 //A modifiable pointer to a constant NSString (its value can't be modified) &q ...
- facebook注册不了无法打开官网的解决办法
上周有一个朋友问到我一个问题,问怎么facebook注册不了,facebook官网也无法打开?这个问题不知道有没有人遇到过,以前这个问题也困扰了我挺长时间的,其实想想也挺简单的,由于facebook, ...
- Chroma Oracle 安装宝典,吐血整理
尼玛,太坑爹!安装: 1.Chroma Application Service 2. PL SQL 安装Oracle 11g 的步骤和过程: 第一步:只能安装 Oracle 11g 64 bit 数据 ...
- LdapContext获取对象的属性
// dn = "cn=1,cn=Users,DC=域名,DC=COM";// Attributes answer = ctx.getA ...
- python学习笔记(二):python数据类型
上一篇博客写了python的入门和简单流程控制,这次写python的数据类型和各种数据类型的内置方法.一.数据类型是什么鬼?计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各 ...
- js常见的字符串及数组处理
最近工作设计前台比较多,由于好久没动前台,或者使用前台框架习惯了,js有点生,将常见的字符串处理忘了,在这里整理一下常见的,以便于查阅: 1.substr():字符串分割,第一个是开始的下标,第二个是 ...
- 【Android 多媒体应用】使用MediaRecoder录制,MediaPlayer播放音频数据
1.MainActivity.java import android.annotation.TargetApi; import android.app.Activity; import android ...
- C语言学习笔记--#和##操作符
1. #运算符 (1)#运算符用于在预处理期将宏的参数转换为字符串 (2)#的转换作用是在预处理期完成的,因此只在宏定义中有效,即其他地方不能用#运算符 (3)用法:#define STRING(x) ...
- ios下编译opencv
如果想要在ios下编译opencv 需要安装Cmake 这里通过homebrew 来安装cmake ios下打开终端然后先安装 homebrew :(mac 下自带ruby) ruby -e &quo ...
- x264中重要结构体参数解释,参数设置,函数说明 <转>
x264中重要结构体参数解释http://www.usr.cc/thread-51995-1-3.htmlx264参数设置http://www.usr.cc/thread-51996-1-3.html ...