• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

什么VR,什么是6Dof,欧拉角,四元数转视图矩阵

武飞扬头像
AppNinja
帮助3

目录

一、什么是VR

二、什么是3Dof,6Dof, 9Dof

三、欧拉角(姿态角)

四、Android手机的欧拉角与坐标系

五、安卓坐标系转换欧拉角

六、根据姿态四元数求视图矩阵

一、什么是VR

VR是把一个有透镜成像功能的显示器罩在眼睛上,人向哪里看,就在显示器里显示对应方向的景物画面,从而让人感觉自己身处一个无限大的虚拟空间中。

这个功能的实现由以下几部分基础结构组成:

学新通

1.处理器

处理器即计算的核心,用来计算和生成图像,并根据陀螺仪数据计算你的姿态定位等。为了防止速度不同步导致的眩晕,VR设备要求图像刷新率达到90Hz,这种情况下就对处理器的运算速度要求很高。所以,一般来说,好的VR设备处理器芯片性能指标至关重要。

2. 显示器

分别向左右眼睛显示图像。一般当我们说 2k 屏幕的VR眼镜时,是指一整块屏幕的长边的尺寸,比如 2k*1k 尺寸。但如果说:单眼2k,则是指屏幕短边的尺寸是2k。目前市场上主流的配置是 单眼1.5k左右。屏幕分辨率越高,要求配备的处理器也越强大。

3. 透镜

如果把显示器直接贴在人眼前,人眼是没办法看清楚这么近距离影响的,因此VR设备中凸透镜片的意义,就是通过折射光线,将显示器上的画面成像拉近到视网膜位置,使人的眼睛能轻松看清几乎贴在眼前的显示屏。

4. 陀螺仪

如果要让VR设备显示器里的景象随着人头部的运动而实时发生变化,则必须要知道头部的朝向。例如,当你穿戴着VR设备向上看时,眼睛里的显示器,需要向你实时地显示虚拟世界中的天空,当你回头时,显示器则需要向你展示身后的景象,模拟真正的回头。而VR设备如何检测你这个“向上看”的动作呢?这就需要陀螺仪来配合了。具体陀螺仪的原理这里暂不展开介绍,大家只要知道,它可以用来检测人(物体)在空间中的姿态和朝向即可。

当日,仅仅有360°的显示是不够的,VR设备之所以带给我们超强的沉浸感,是由于你不仅能够看到全方位的虚拟景象,还能够通过VR设备与虚拟的景象实时地发生交互,这才是VR游戏真正的魅力所在。

根据可交互程度的不同,我们常常听到把VR设备中涉及到的3DOF和6DOF等说法。

dof:degree of freedom,即自由度。

其中3dof是指有3个转动角度的自由度,而 6dof 是指,除了3个转动角度外,再加上 上下、前后、左右等3个位置相关的自由度。

因此,当我们说 3dof的VR眼镜或VR设备时,是指该VR设备可以检测到头部向不同方向的自由转动,但是不能检测到头部的前后左右的空间位移。而6dof的VR设备(眼镜),则除了检测头部的转动带来的视野角度变化外,还能够检测到由于身体移动带来的上下前后左右位移的变化。

学新通

用一张更为形象的图解释就容易理解了:

学新通

3DOF的VR设备一般可以用来看VR电影,而要达到玩游戏时与场景中的交互,则需要能够支持6DOF的VR设备,这样我们才能够在游戏里体验到跨越障碍、躲避子弹和怪兽、以及跳楼、登山、滑雪等超级真实的感受。

二、什么是3Dof,6Dof, 9Dof

学新通

自由度(DoF)与刚体在空间内的运动相关,可以解释为“物体移动的不同基本方式”。

自由度总共有6个,可分成两种不同的类型:平移和旋转。

#1

平移运动

Translational motion

刚体可以在3个自由度中平移:向前/向后,向上/向下,向左/向右。

学新通

#2

旋转运动

Rotary motion

刚体也可以在3个自由度中旋转:

俯仰-纵摇(Pitch)、偏航航向-垂摇(Yaw)、横滚翻滚-横摇(Roll)。

飞机动画展示如下:

pitch():俯仰,将物体绕X轴旋转(localRotationX)

学新通
yaw():航向,将物体绕Y轴旋转(localRotationY)

学新通
roll():横滚,将物体绕Z轴旋转(localRotationZ)

学新通

因此,3种类型的平移自由度 3种类型的旋转自由度 = 6自由度!

旋转自由度3Dof在VR中的坐标轴如下所示:

学新通

在任意一个自由度中,物体可以沿两个“方向”自由运动。例如,电梯限制在1个自由度中(垂直平移),但电梯能够在这个自由度中上下运动。同样,摩天轮限制在1个自由度中,但这是旋转自由度,所以摩天轮能够朝相反的方向旋转。

学新通

我们可以继续举例子,比如说主题公园。碰碰车总共有3个自由度:它只能在3轴中的2条里平移(无法像电梯那样上下移动);然后它只能以一种方式旋转(无法像飞机那样纵摇和垂摇)。所以2个平移 1个旋转=3自由度。

学新通

无论有多复杂,刚体的任何可能性运动都可以通过6自由度的组合进行表达。例如在你用球拍击打网球的时候,球拍的复杂运动可以表示为平移和旋转的组合。

#3

惯性测量单元和自由度

nertial measurement unit and degrees of freedom

惯性测量单元(IMU)是一种通过传感器组合(加速度计、陀螺仪和磁力计)来测量和报告速度、方向和重力的电子设备。IMU过去的主要应用之一是作为飞机仪表设备,但现在它们已经应用于一系列电子设备,比如说智能手机。IMU的成本已经出现了大幅下降,映维网觉得我们今天可以认为3DoF定位问题已经得到了“解决”。但遗憾的是,IMU在实际应用中只能准确地测量和报告方向值(旋转),无法处理平移。

学新通

#4

九自由度是什么

Nine degrees of freedom

IMU的世界里出现了有趣的术语,比如一系列关于“9自由度”IMU的说法,但这令人相当困惑,因为自由度总共只有6个。

基本上,很多IMU厂商都生造了“9自由度”一词来推销他们的产品,但这都不是真正意义上的自由度。9自由度主要是IMU内每一个传感器所能测量到的自由度的总和。比如,如果IMU搭载了一个可以测量3自由度的加速度计,一个能测量3自由度的陀螺仪,以及一个能测量3自由度的磁力计,厂商就有可能将其称之为9自由度IMU(九轴)。但这与现实不符,因为这3个传感器所测量的是相同的3自由度(只有方向)。

学新通

一个9自由度IMU(九轴)可能比6自由度IMU(六轴)更好,因为它可以通过传感器融合(结合来自不同传感器的数据)来提高最终输出的质量。然而,这仍然无法测量平移。

三、欧拉角(姿态角)

莱昂哈德·欧拉用欧拉角来描述刚体在三维欧几里得空间的取向。对于任何参考系,一个刚体的取向,是依照顺序,从这参考系,做三个欧拉角的旋转而设定的。所以,刚体的取向可以用三个基本旋转矩阵来决定。换句话说,任何关于刚体旋转的旋转矩阵是由三个基本旋转矩阵复合而成的。

欧拉角 - 维基百科,自由的百科全书 (wikipedia.org)

三个欧拉角: ({\displaystyle \alpha ,\ \beta ,\ \gamma }蓝色的轴是xyz-轴,红色的轴是XYZ-坐标轴。绿色的线是交点线 (N)。

学新通

欧拉角动画

 学新通

单位四元数,又称欧拉参数,提供另外一种方法来表述三维旋转。这与特殊酉群的描述是等价的。四元数方法用在大多数的演算会比较快捷,概念上比较容易理解,并能避免一些技术上的问题,如万向锁现象。因为这些原因,许多高速度三维图形程式制作都使用四元数。

四、Android手机的欧拉角与坐标系

在安卓的官方文档中,IMU的 坐标系是这样的:

学新通

手机定义的坐标系统:X轴是水平且指向右边,Y轴是垂直且指向前方,Z轴指向屏幕的正面正上方。

当手机左右摇摆时(绕 y 轴旋转),得到变化的 滚转角Φ(roll),范围为 (-90 to 90)
当手机前后摇摆时(绕 x 轴旋转), 得到变化的 俯仰角θ(pitch) ,范围为 (-180 to 180)当手机横屏转换成竖屏或竖屏转换成横屏时(绕 z 轴旋转),即得到变化的 偏航角ψ(yaw)。

安卓手机IMU坐标系

所以如果是后置摄像头的话,那么相机 轴与IMU 轴一致,相机 轴与 IMU 轴相反。相机 轴也与 IMU的 轴相反。其实就是有一个绕IMU 轴的180度旋转。

实际情况可能有一点误差,需要标定。当然相机坐标系和IMU坐标系除了旋转外,还有平移。这个平移量不同的手机也是不一样的。

五、安卓坐标系转换欧拉角

欧拉角是按照既定的顺序,如依次绕z,y,x分别旋转一个固定角度,使用roll,yaw ,pitch分别表示物体绕,x,y,z的旋转角度,可以完成一个坐标系转换成另一个坐标系。
但是在安卓中,这里的角度定义有所不同,原文如下:

Note: This definition is different from yaw, pitch and roll used in aviation where the X axis is along the long side of the plane (tail to nose).
也就是说,X轴与航空系统所定义的不同。安卓里的X轴是短边。

具体如下图:

学新通

学新通

注: 图中旋转方向只是示意方向,不是指定的正方向!!!

当手机坐标系与地球坐标系重合时,三个角度都为0。

  • Azimuth:绕z轴旋转,磁北与y轴的夹角,顺时针增大,0到359度。
  • Pitch:绕x轴旋转的角度,即手机上下旋转,y轴往z轴方向为正。-180到180度。
  • Roll:绕y轴旋转的角度, 即手机的左右旋转,顺时针为正,-90到90度。

看一下getgetOrientation()方法,求出手机坐标系相对于世界坐标系三个轴的旋转角。

  1.  
    public static float[] getOrientation(float[] R, float[] values) {
  2.  
    /*
  3.  
    * 4x4 (length=16) case:
  4.  
    * / R[ 0] R[ 1] R[ 2] 0 \
  5.  
    * | R[ 4] R[ 5] R[ 6] 0 |
  6.  
    * | R[ 8] R[ 9] R[10] 0 |
  7.  
    * \ 0 0 0 1 /
  8.  
    *
  9.  
    * 3x3 (length=9) case://上篇文章讲到的旋转矩阵
  10.  
    * / R[ 0] R[ 1] R[ 2] \
  11.  
    * | R[ 3] R[ 4] R[ 5] |
  12.  
    * \ R[ 6] R[ 7] R[ 8] /
  13.  
    *
  14.  
    */
  15.  
    if (R.length == 9) {
  16.  
    values[0] = (float) Math.atan2(R[1], R[4]);//azimuth
  17.  
    values[1] = (float) Math.asin(-R[7]);//pitch
  18.  
    values[2] = (float) Math.atan2(-R[6], R[8]);//roll
  19.  
    } else {
  20.  
    values[0] = (float) Math.atan2(R[1], R[5]);
  21.  
    values[1] = (float) Math.asin(-R[9]);
  22.  
    values[2] = (float) Math.atan2(-R[8], R[10]);
  23.  
    }
  24.  
    return values;
  25.  
    }
学新通

这里三个角的计算不大好理解,我画几个示意图大致讲一下我的看法。
还望大家一起讨论。
首先复习一下上一节R矩阵的内容:

  1.  
    R[0] = Hx; R[1] = Hy; R[2] = Hz;//【地球坐标系】X方向,指东
  2.  
    R[3] = Mx; R[4] = My; R[5] = Mz;//【地球坐标系】Y方向,指北
  3.  
    R[6] = Ax; R[7] = Ay; R[8] = Az;//【地球坐标系】Z反方向,向下

首先看azimuth,代码如下:

 values[0] = (float) Math.atan2(R[1], R[4]);

也就是arctan2(Hy,My)。 Hy是【地球坐标系】指向东的单位向量在【手机坐标系】Y轴上的分量。
同样地,My是【地球坐标系】指向北的单位向量在【手机坐标系】Y轴上的分量。
azimuth是绕z轴旋转,磁北与y轴的夹角,顺时针增大,0到359度。这里用了atan2函数,因为atan只可以表示−90o到90o−90o到90o,atan2可以表示−180o到180o−180o到180o。具体详细的区别可以看这里
示意图如下:

学新通

pitch的代码如下:

values[1] = (float) Math.asin(-R[7]);

也就是arcsin(-Ay).Ay是【地球坐标系】指向下(重力)的单位向量在【手机坐标系】Y轴上的分量。示意图如下:

学新通

roll的代码如下:

 values[2] = (float) Math.atan2(-R[6], R[8]);

也就是arctan2(-Ax,Az).Ax【地球坐标系】指向下(重力)的单位向量在【手机坐标系】x轴上的分量。Az是【地球坐标系】指向下(重力)的单位向量在【手机坐标系】z轴上z的分量。
示意图如下:
学新通
这里需要指出的是,这个图的俯视方向是沿着y轴的正方向,所以本来是顺时针为正,这里是逆时针为负,所以也要加负号。

六、根据姿态四元数求视图矩阵

姿态解算3-四元数与旋转矩阵 - 知乎 (zhihu.com)

根据姿态四元数q0,q1,q2,q3求出视图矩阵。

学新通

(待续...)


 

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfibjee
系列文章
更多 icon
同类精品
更多 icon
继续加载