头部跟踪系统设计在虚拟听觉的应用毕业论文(编辑修改稿)内容摘要:

(Ray Tracing)的算法。 头相关函数用人头录音方式记录了不同方向声源在人耳处的冲击响应,将声音和头相关函数卷积,就可以得到来自该方向的声音。 基于光线追踪算法的虚拟听觉采用光线追踪来模拟声音的传播,通过计算可以得到声音从声源 经过场景的反射、衍射、折射 到听者的房间 BRIR 响应。 由于声场的波长比场景中障碍物的尺寸大,所以使用这样的方法计算散射是合适的 [2]。 上 海 大 学 毕 业 论 文 (设 计) 6 图 11 HRTF 数据以及计算出的 BRIR 头部跟踪 头部跟踪系统的应用十分广泛,它可以用来捕捉人头部的运动,近年来在游戏、虚拟现实领域发挥着越来越重要的角色。 其实现主要有基于光学和基于捷联惯导算法两种方式。 基于光学的方式比起捷联惯导方式的优势在于可以检测到头部的 平动,而捷联惯导方式只可以检测到头部转动。 不过光学方式需要高速 红外摄像头,实现成本很大,同时实时性并不好。 鉴于本系统用于虚拟听觉,对转动要求高,平动部分可以使用键盘控制,所以我们将使用捷联惯导算法来实现头部跟踪系统。 为了对传感器数据滤波,本系统中使用的是 DCM 互补滤波 [3]方法 ,虽然 Kalman 滤波 [20]方法可能会有更好的效果,不过考虑到在单片机中计算的时间复杂度,而且两者实际效果差距相似,所以我们使用互补滤波方法。 图 12 头部跟踪系统 上 海 大 学 毕 业 论 文 (设 计) 7 人类听觉在水平面上可以对声源做非常准确的定位,因为水平面上不单单是依靠单耳来确定位置,而是依靠双耳的时间差 ITD、强度差 ILD 来定位。 而确定仰角时只能依靠单耳信息,也就是人头部、身体、外耳廓对声音频谱的滤波作用,所以是不准确的 [1]。 由于人类对水平方位感知更明显,在头部跟踪系统中我们着重考虑水平方向的精度。 在水平面上,人类对声音角度 感知的最小值是 1176。 左右,少于 1176。 的角度变换人类无法察觉。 本系统的精度在水平方向是 12176。 ,所以是符合虚拟声音对头部跟踪的要求的。 上 海 大 学 毕 业 论 文 (设 计) 8 第二章 头部跟踪系统设计 头部跟踪作用与原理 在虚拟现实系统中,如果可以知道用户头部的转动姿态,根据这些信息调整虚拟现实中场景声音的生产,使用户的获得更真实的感受。 图 21 头部跟踪在虚拟听觉中的作用 如果没有头部跟踪,用户头部旋转了 90 度,虚拟声源的位置也会随之旋转 90 度;而如果加上头部跟踪系统,转动时可以将声源位置反向旋转同样角度,这样,声音对于用户依然保持 在同一位置。 图 22 头部的转动 头部跟踪系统的本质是通过传感器来检查头部在 X, Y, Z 三轴方向的转动角 Roll ,Pitch , Yaw。 使用加速度传感器可以检测到重力的方向,有了重力的方向,我们就可以用之计算出 Roll 和 Pitch 信息;使用地磁传感器可以检测出地磁场的方向,使用地磁信息,我们可以计算出 Yaw 方向的数值。 不过由于无论是重力计还是地磁计,它的响应速度都是较慢的,为了纠正他们的数据,还需要使用陀螺仪来检测角速度。 使用角速度信息来加快姿态调整。 传感器数据波动较大,如何更好地融合加速度计、地磁计和陀螺仪的数据计算上 海 大 学 毕 业 论 文 (设 计) 9 出准确的姿态是亟待解决的问题,这就需要 DCM 互补滤波器。 DCM 互补滤波器设计 传感器输入数据不稳定,为了得到稳定的结果,需要融合不同的传感器数据进行滤波。 DCM 矩阵 首先,我们需要定义 2 个坐标系: 地理坐标系:真实世界所在的坐标系。 重力向量为( 0,0,1g),地磁向量是( 0,1,x)两个三维向量 ,对于地磁我们不关心其垂直分量。 头部坐标系:上面有加计、陀螺、电子罗盘传感器,三个三维向量。 图 23 两个坐标系的转换 方向余弦矩阵 (Direction Cosine Matrix)是表示从坐标系 OXYZ到坐标系 Oxyz 变换的矩阵,使用它,我们可以实现地理坐标系与头部坐标系这两个坐标系间的转换。 如上图所示,这是一个 3 维空间中的坐标系变化。 在我们的系统中, OXYZ 是世界坐标系, Oxyz 是头部跟踪系统所在的局部坐标系。 使用 DCM 的目的也就是将坐标从世界坐标系变换到头部坐标系,以便进行姿态计算。 设 X, Y, Z 为世界坐标系中的 3 个单位向量: ⑴ 上 海 大 学 毕 业 论 文 (设 计) 10 设 x, y, z 是局部坐标系中的 3 个单位向量: ⑵ 在全局坐标中: ⑶ 则: ⑷ 其中 是 X 和 的夹角。 所以有: ⑸ 321321321c o sc o sc o sc o sc o sc o sc o sc o sc o s 即为 DCM 矩阵,表示从世界坐标系到头部局部坐标系的变换。 且有。 互补滤波器设计 图 24 互补滤波示意图 为了准确融合加速度、地磁、角速度三个传感器的结果,我们需要使用互补滤波器。 这样做有 2 个好处: 高通滤波器可以抑制陀螺仪低频漂移 低通滤波器可以很好的抑制加速度计的噪声 也就是说,加计和地磁传感器在长久来看是很准确的,而陀螺仪在短时间内是很准确zyxzyx321321321coscoscoscoscoscoscoscoscos39。 39。 39。 上 海 大 学 毕 业 论 文 (设 计) 11 的,结合二者数据,可以得到较优的结果。 伪代码: angle = (K)*(angle + gyro * dt) + (1K)*(x_acc)。 上述伪代码即为互补滤波器融合加计和陀螺仪数值的简单例子。 IMU 计算方程 IMU(Inertial measurement unit, 惯性测量单元 )是用于姿态解算的单元。 姿态解算运算中需要用到大量的旋转操作,所以选择合适的旋转方式对系统的计算十分重要。 旋转的表示方式 常用的选择表示方法有:旋转矩阵、欧拉角、四元数。 旋转矩阵、欧拉角、四元数主要用于 :向量的旋转、坐标系之间的转换、方位的平滑插值计算。 表 21 各旋转表示方法比较 任务 /性质 旋转矩阵 欧拉角 四元数 在坐标系间 (物体和惯性 )旋转点 能 不能 (必须转换到矩阵 ) 不能 (必须转换到矩阵 ) 连接或增量旋转 能 ,但经常比四元数慢 ,小心矩阵蠕变的情况 不能 能 ,比矩阵快 插值 基本上不能 能 ,但可能遭遇万向锁或其他问题 Slerp 提供了平滑插值 易用程度 难 易 难 在内存或文件中存储 9 个数 3 个数 4 个数 对给定方位的表达方式是否唯一 是 不是 ,对同一方位有无数多种方法 不是 ,有两种方法 ,它们互相为共轭 可能导致非法 矩阵蠕变 任意三个数都能构成合法的欧拉角 可能会出现误差积累 ,从而产生非法的四元数 上 海 大 学 毕 业 论 文 (设 计) 12 欧拉角显然是最直接的方式,与人类对旋转的感知最为接近,但是欧拉角会出现万向锁这样的问题,即三轴系统中由于其中一轴旋转 90 度导致损失一轴的自由度,三轴系统的自由度退化为 2 轴。 也就是说: 当任意一轴旋转 90176。 的时候会导致该轴同其他轴重合,此时旋转被重合的轴 无法产生 任何效果,这就是 万向锁 (Gimbal Lock)。 图 25 万向锁 作为旋转变换,矩阵是必要的,可以把四元数或欧拉角作为主数据,同时维护一个旋转矩阵,当四元数或欧拉角变化时更新矩阵。 欧拉角虽然占用更少的内存 (比四元数少 1/4),但是转换到矩阵的时间要比四元数更慢一些。 平滑的插值只能用四元数完成。 直接用欧拉角插值会产生奇怪的转动。 综上考虑,我们选择四元数作为旋转的表示方式,因为四元数插值方便、没有万向锁问题、运算速度较快。 四元数 四元数是由哈密顿在 1843 年爱尔兰发现的。 当时他正研究扩展复数到更高的维次(复数可视为平面上的点)。 他不能做到三维空间的例子,但四维则造出四元数。 根据哈密顿记述,他于 10 月 16 日跟他的妻子在都柏林的皇家运河( Royal Canal)上散步时突然想到的方程 解。 之后哈密顿立刻将此方程刻在附近布鲁穆桥( Brougham Bridge,现称为金雀花桥 Broom Bridge)。 这条方程放弃了交换律,是当时一个极端的想法(那时还未发展出向量和矩阵) [4]。 四元数 常见于控制论、信号处理、姿态控制, 用来表示旋转和方位。 这是由于四元数转换组合比很多矩阵转换组合在数字上更稳定。 四元数一般定义如下: 上 海 大 学 毕 业 论 文 (设 计) 13 ⑹ 其中 w,x,y,z 是实数。 同时,有 : 四元数也可以表示为: 其中 v=(x,y,z)是矢量, w 是标量,虽然 v 是矢量。 当用一个四元数乘以一个向量时,实际上就是让该向量围绕着这个四元数所描述的旋转轴,转动这个四元数所描述的角度而得到的向量。 四元数加法: ⑺ 四元数取模: ⑻ 四元数乘法: ⑼ 四元数共轭: ⑽ 四元数倒数: ⑾ 对于四元数,我们最重要的是用是用它来旋转一个向量,假设有一个用四元数表示的旋转为: ,有一个向量 ,则经过旋转后的结果 为: ⑿ 其中 q*为四元数 q 的共轭四元数, 是转动角度。 有了四元数,如果应用于变换,我们还需要将四元数转化成相对应的矩阵。 把上述的上 海 大 学 毕 业 论 文 (设 计) 14 表示为 ,则有 ⒀ 上式在其次坐标下可以简化为: ⒁ 当 N(q)=1 时,上式可以进一步简化为: ⒂ 由传感器数值与四元数 我们可以获取到地磁、加速度计和陀螺仪的数值,根据这些数值我们可以实时更新四元数方程,使四元数表示的方位与头部所在的姿态保持一致。 首先,我们需要根据之前计算出的四元数来反算出前一时刻头部所在的姿态的重力方向,然后,计算此时传感器得到的重力信息和前一时刻的差,更新四元数。 ⒃ 上 海 大 学 毕 业 论 文 (设 计) 15 上述公式即为由前一状态四元数计算出重 力参考方向。 Vx, Vy, Vz 分别为重力在三轴的分量。 这个公式来自从 中的: ⒄ 重力向量就是 Q 的第三行。 与重力一样,我们也需要计算地磁场的参考方向,并且依据地磁的方向来更新 Yaw 方向的四元数。 地磁参考方向计算如下: ⒅ mx,my,mz 是地磁传感器得到的数值的归一化表示, hx,hy,hz 是计算出来的地磁参考方向。 由于我们并不关心地磁垂直方向的量,所以把地磁的 y 轴和 x 轴做了融合,得到新的参考方向 bx,bz。 之后是由上一时刻四元数表示的方向计算地磁的方向: ⒆ 上公式依旧来源于 中的 有了重力和地磁的参考方向,我们可以计算出传感器得到的方向与场的方向间的差值,上 海 大 学 毕 业 论 文 (设 计) 16 这种求差值本质上是进行了一次向量叉乘运算: ⒇ 其中, 是传感器和场方向的差, 是加速度计数值, 是重力场参考方向, 是地磁计数值, 是地磁场参考方向。 将向量展开成分量,则有: 最后,我们需要把陀螺仪的数值融合到误差 E 中,对 E 做一些 PID 控制,使结果更加平滑准确。 gx = gx + IMU_Kp*ex + exInt。 gy = gy + IMU_Kp*ey + eyInt。 gz = gz + IMU_Kp*ez + ezInt。 上述伪代码中的 gx,gy,gz 即是陀螺仪的三轴的数值,与上面的 E 相融合以后,就可以使用在四元数微分方程里来更新四元数了。 四元数微分方程 数值分析中,龙格-库塔法( RungeKutta)是用于模拟常微分方程的解的重要的一类隐式或显式迭代法。 这些技术由数学家卡尔 龙格和马丁 威尔海姆 库塔于 1900 年左右发明 [5]。 下面举一个具体例子来说明龙格库塔方法。 令初值问题表述如: 则。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。