四元数

简单VR照片 使用陀螺仪、姿态角(Roll、Pitch、Yaw )、四元数

拈花ヽ惹草 提交于 2019-12-18 09:04:04
最近在做一个类似VR照片的demo,跟全景图片也很像,只是VR照片与全景720度显示,我只做了180度。但我发现他们实现的原理有一丝相似,希望可以给一些想入行AR、VR的朋友一些提示吧。 要想根据用户摇晃手机的行为轨迹展示相应的场景,那必须要使用移动端的陀螺仪、加速器等传感器来做相应的协调。现在的移动端已经提供了很多传感器,你可以根据自己的需要获取相应的数据。 刚开始的时候,我使用传感器提供的姿态角,也称为欧拉角:pitch yaw roll 来显示。这种 姿态角/欧拉角 比较常用在航空上,无人机技术应该也使用到了这个技术点。我用飞机的模型来展示一下这三个角,就一目了然了(不同作者使用不同的坐标系,使用哪种坐标系,个人而定。): 图一 姿态角/欧拉角 在数学上理解起来会有点抽象,我也是稍理解一点。在维基百科上,欧拉角定义为:用来描述刚体在三维欧几里得空间的取向,对于任何参考系,一个刚体的取向,是依照顺序,从这参考系,做三个欧拉角的旋转而设定的。有兴趣了解得深入一点,可以参考(需翻墙): https://zh.wikipedia.org/wiki/%E6%AC%A7%E6%8B%89%E8%A7%92 我们也可以简单理解这三个角代表什么意思: 1、俯仰角θ(pitch):围绕Y轴旋转的。 图二 2、偏航角ψ(yaw):围绕Z轴旋转的角度。 图三 3、滚转角Φ(roll)

Eigen(7)-Geometry(几何转换)

寵の児 提交于 2019-12-16 09:53:16
官方地址传送 Space transformations 常用 1.旋转矩阵(3X3):Eigen::Matrix3d 2.旋转向量(3X1):Eigen::AngleAxisd 3.四元数(4X1):Eigen::Quaterniond 4.平移向量(3X1):Eigen::Vector3d 5.变换矩阵(4X4):Eigen::Isometry3d AngleAxis(angle, axis):绕该轴逆时针旋转angle(rad)。 变换矩阵 Eigen::Isometry3d T; T.matrix()才是变换矩阵,做运算时需加.matrix()后缀; T.pretranslate()以及T.prerotate()可以给平移部分和旋转矩阵赋值,但是若循环中使用,末尾不重置变换矩阵的话,这个设置量会累加,而不是覆盖。 四元数赋值:Eigen::Quaterniond Q; Q.x() = 3 「类似地 Q.y() = Q.z() = Q.w()」 1、 旋转矩阵(R),旋转向量(V)和四元数(Q)在Eigen中转换关系的总结: 2、旋转矩阵(R),旋转向量(V)和四元数(Q)分别通过自身初始化自己的方式: R通过自身初始化的方法: 使用旋转矩阵的函数来初始化旋转矩阵 Matrix3d R1=Matrix3d::Identity(); cout << “Rotation

实用四元数

佐手、 提交于 2019-12-10 14:20:38
四元数(Quaternion)相关的介绍材料非常多,这里针对其中几个实用问题进行阐述。 文章目录 四元数初步 四元数运算 四元数与刚体姿态表示 四元数插值 四元数与黎曼流形 其它参考 四元数初步 相关介绍可参考 此文 。 相对于复数的二维空间表示,四元数可理解为一种四维空间表示。四元数是由一个实数和三个元素 i , j , k i,j,k i , j , k 组成: q = w + x i + y j + z k q = w + xi + yj + zk q = w + x i + y j + z k 三个元素之间有如下关系: i 2 = j 2 = k 2 = i j k = − 1 i^2 = j^2 = k^2 = ijk = -1 i 2 = j 2 = k 2 = i j k = − 1 四元数乘法不具有交换律,例如: i j = k , j i = − k ; j k = i , k j = − i ; k i = j , i k = − j ij = k, ji = -k;\quad jk = i, kj = -i;\quad ki = j, ik = -j i j = k , j i = − k ; j k = i , k j = − i ; k i = j , i k = − j 四元数的共轭定义为: q − 1 = w − x i − y j − z k q^{

四元数相关总结-未完

佐手、 提交于 2019-12-06 02:16:05
一,数学基础 1,向量乘法,点乘,叉乘的区别 初中高中课本上说的向量乘法,就是指叉乘,证明如下: 其中ixi = jxj = kxk = 0,注意,在四元数中 ixi = jxj = kxk = -1,为什么会这样没想明白,先留个问号吧 于是上面的结果就是 这与我们使用行列式法得出的结果相同。 2,复数的乘法表示旋转 3,qpq-1为什么表示旋转,证明 4,四元数的应用与原理 来源: https://www.cnblogs.com/timeObjserver/p/11956490.html

四元数

落爺英雄遲暮 提交于 2019-12-03 22:36:39
https://www.qiujiawei.com/understanding-quaternions/ 来源: https://www.cnblogs.com/my-trees/p/11809907.html

四元数

前提是你 提交于 2019-12-03 04:42:16
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/ecidevilin/article/details/77937109 何为四元数?讲解四元数的文章往往会把四元数跟复数联系在一起。诚然,四元数的起源跟复数有关系,但是理解复数系统并不是理解四元数的首要条件。 提到四元数,我们首先要提到一个人——莱昂哈德·欧拉(Leonhard Euler),根据欧拉旋转定理(wiki),在三维空间里,假设一个刚体在做一个位移的时候,刚体内部至少有一点固定不动,则此位移等价于一个绕着包含那固定点的固定轴的旋转。还有另外一种阐述:3D中的任意角位移都能表示为绕单一轴的单一旋转。如图所示: 所谓角位移也就是旋转,我们通常用欧拉角表示,这也是最容易理解的一种形式。 那么轴-角形式跟四元数有什么关系?它们并不等同,但是却也密不可分。 上图的四元数表示法: q=[cos(θ/2) sin(θ/2)e] 注意这里e是图中的向量,即 q=[cos(θ/2) sin(θ/2)ex sin(θ/2)ey sin(θ/2)ez] 那么接着我们就要讨论四元数跟复数的关系了,首先先把William Hamilton这个四元数的发明者提出来,免得大家觉得没意思跳过了这段。 首先,什么是复数? 我们知道在实数范围里

旋转矩阵、轴角、欧拉角、四元数的转换关系

匿名 (未验证) 提交于 2019-12-03 00:30:01
其他参考: https://blog.csdn.net/candycat1992/article/details/41254799 http://www.cnblogs.com/yiyezhai/p/3176725.html 主要介绍了在计算机视觉中关于3D变换矩阵的数学方法。 旋转矩阵是一种3×3的正交矩阵, 这里R为3D的旋转矩阵,同样的,t为3D的平移矢量。 由于3D旋转都可以归结成按照某个单位向量n进行大小为θ的旋转。 所以,已知某个旋转时,可以推导出对应的旋转矩阵。该过程由罗德里格斯公式表明,由于过程比较复杂,我们在此不作赘述,只给出转换的结果:  这里 公式虽然较为复杂,但实际写成程序后,只需知道旋转方向和角度后即可完成计算。另一件有趣的事是,如果用 表示与n对应的一个反对称矩阵,那么有: (李代数会对后面的指数形式做出解释) 根据此式,我们也可以从任意给定的旋转矩阵,求出对应的转轴与转角。关于转角θ,我们对上式两边求矩阵的迹,可得: 可得 关于转轴n,由于旋转轴上的向量在旋转后不发生改变,说明 因此,只要求此方程的解向量即可。这也说明n是R特征值为1的一个特征向量。 总之,读者应当明白在3D时,旋转和平移仍可用转移矩阵T来描述,其结构也与2D类似。而T4×4构成了三维欧氏变换群SE(3)。注意到T虽然有16个变量,但 真正的自由度只有6个,其中3个旋转,3个位移。

迭代最近点(Iterative Closest Point, ICP)算法及matlab实现

匿名 (未验证) 提交于 2019-12-03 00:22:01
通常,使用RGB-D相机或是其他方法获取到物体的三维点云后,由于采集设备不同、拍摄视角不同等等因素的影响,即使是同一个物体所得到的点云也会有较大的差异,主要是旋转或者平移的变化。对于一组图像数据集中的两幅图像,需要通过寻找一种空间变换把一幅图像映射到另一幅图像,使得两图中对应于空间同一位置的点一一对应起来,从而达到信息融合的目的。所以,就需要对点云进行配准。 迭代最近点算法(ICP)是一种点云匹配算法。其思想是:通过旋转、平移使得两个点集之间的距离最小。ICP算法由Besl等人于1992年提出,文献可以参考: A Method for Registration of 3D Shapes ,另外还可以参考: Least-Squares Fitting of Two 3-D Point Sets 。前者使用的是四元数方法来求解旋转矩阵,而后者则是通过对协方差矩阵求解SVD来得到最终的旋转矩阵。流程大体上一致,后面就主要列出前者的流程。 ICP 我们可以使用四元数表示旋转关系: q R → = [ q 0 q 1 q 2 q 3 ] T q R → = [ q 0 q 1 q 2 q 3 ] T ,满足条件: q 0 ≥ 0 q 0 ≥ 0 、 q 2 0 + q 2 1 + q 2 2 + q 2 3 = 1 q 0 2 + q 1 2 + q 2 2 + q 3 2 = 1 。

飞行姿态解算(二)

匿名 (未验证) 提交于 2019-12-03 00:22:01
继之前研究了一些飞行姿态理论方面的问题后,又找到了之前很流行的一段外国大神写的代码,来分析分析。 先贴上代码: #include "AHRS.h" //---------------------------------------------------------------------------------------------------- // Definitions #define Kp 2.0f #define Ki 0.005f #define halfT 0.5f //---------------------------------------------------------------------------------------------------- // Variable definitions float q0 = 1, q1 = 0, q2 = 0, q3 = 0; float exInt = 0, eyInt = 0, ezInt = 0; //---------------------------------------------------------------------------------------------------- // Function void AHRSupdate(float gx, float gy,

VIO-第1章 概述与课程介绍

我怕爱的太早我们不能终老 提交于 2019-12-02 23:57:20
内容总结: 内容:   IMU原理与模型   后端优化与VIO BA   滑动窗口算法与FEJ   后端求解系统与代码   前端介绍   VIO初始化   VIO系统回顾 预备知识:   数学:线性代数、微积分、概率论   编程:Linux、C++、OpenCV   英语:文献阅读   专业知识:2D/3D 计算机视觉、图像处理 VIO 概述 VIO: 以视觉与IMU融合实现的里程计   IMU:惯性测量单元     组成:陀螺仪和加速度计,共6轴。     较高频率(>100Hz),易受自身温度、零偏、振动等因素干扰,积分得到的平移与旋转容易漂移。   视觉:     较低频率(15-60Hz居多),通过相机特整点进行匹配,推断相机运动。 2种传感器比较: 两种融合方案 紧耦合:直接将图像的特征匹配点与IMU定位,进行融合。典型方案为MSCKF和非线性优化。 松耦合:将IMU定位与视觉定位,直接进行融合。后处理方式输出。典型方案为卡尔曼滤波器。 紧耦合优势:视觉BA中含有IMU信息,整体层面最优。而且,可以对所有运动、测量信息进行建模,达到最优。 主要总结: IMU数据的状态信息,及噪声 对含有IMU测量信息和视觉特征点信息的非线性优化 随时间将如何变化 预备知识 三维刚体运动(2种): 李代数与李群 四元数 两种导数(具体推导请自行查看《SLAM十四讲》):