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

算中需要用到 大量的旋转操作, 所以选择合适的旋转方式对系统的计算十分重要。 旋转的 表示 方式 常用的选择表示方法有:旋转矩阵、欧拉角、四元数。 旋转矩阵、欧拉角、四元数主要用于 :向量的旋转、坐标系之间的转换、方位的平滑插值计算。 表 21 各 旋转表示 方法比较 任务 /性质 旋转矩阵 欧拉角 四元数 在坐标系间 (物体和惯性 )旋转点 能 不能 (必须转换到矩阵 ) 不能 (必须转换到矩阵 ) 连接或增量旋转 能 ,但经常比四元数慢 ,小心矩阵蠕变的情况 不能 能 ,比矩阵快 插值 基本上不能 能 ,但可能遭遇万向锁或其他问题 Slerp提供了平滑插值 易用程度 难 易 难 在内存或文件中存储 9个数 3个数 4个数 对给定方位的表达方式是否唯一 是 不是 ,对同一方位有无数多种方法 不是 ,有两种方法 ,它们互相为 共轭 可能导致非法 矩阵蠕变 任意三个数都能构成合法的欧拉角 可能会出现误差积累 ,从而产生非法的四元数 上 海 大 学 毕 业 论 文 (设 计 ) 12 欧拉角 显然是 最直接 的方式,与人类对旋转的感知最为接近 ,但是欧拉角会出现万向锁这样的问题 ,即 三轴 系统中由于其中一轴旋转 90 度导致损失一轴的自由度 , 三轴系统的自由度退化为 2 轴。 也就是说: 当任意一轴旋转 90176。 的时候会导致该轴同其他轴重合,此时旋转被重合的轴 无法产生 任何效果,这就是 万向锁 (Gimbal Lock)。 图 25 万向锁 作为旋转变换,矩阵是必要的,可以把四元数或欧拉角作为主数据,同时维护一个旋转矩阵,当四元数或欧拉角变化时更新矩阵。 欧拉角虽然占用更少的内存 (比四元数少 1/4),但是转换到矩阵的时间要比四元数更慢一些。 平滑的插值只能用四元数完成。 直接用欧拉角插值会产生奇怪的转动。 综上考虑,我们选择四元数作为旋转的表示方式 ,因为四元数插值方便、没有万向锁问题、运算速度较快。 四元数 四元数是由哈密顿在 1843年爱尔兰发现的。 当时他正研究扩展复数到更高的维次(复数可视为平面上的点)。 他不能做到三维空间的例子,但四维则造出四元数。 根据哈密顿记述,他于 10月 16日跟他的妻子在都柏林的皇家运河( Royal Canal)上散步时突然想到𝑖2 = 𝑘2 = 𝑗2 = 𝑖𝑗𝑘 = −1的方程解。 之后哈密顿立刻将此方程刻在附近布鲁穆桥( Brougham Bridge,现称为金雀 花桥 Broom Bridge)。 这条方程放弃了交换律,是当时一个极端的想法(那时还未发展出向量和矩阵) [4]。 四元数 常 见于控制 论、信号处理、姿态控制 , 用来表示旋转和方位。 这是由于四元数转换组合比很多矩阵转换组合在数字上更稳定。 四元数一般定义如下: 上 海 大 学 毕 业 论 文 (设 计 ) 13 𝑞 = 𝑤 + 𝑥𝑖 +𝑦𝑗 + 𝑧𝑘 ⑹ 其中 w,x,y,z是实数。 同时,有 : 𝑖2 = 𝑗2 = 𝑘2 = −1 四元数也可以表示为: 𝑞 = [𝑤,𝑣] 其中 v=(x,y,z)是矢量, w 是标量,虽然 v是矢量。 当用一个四元数乘以一个向量时,实际上就是让该向量围绕着这个四元数所描述的旋转轴,转动这个四元数所描述的角度而得到的向量。 四元数加法: ⑺ 四元数取模: ⑻ 四元数乘法: ⑼ 四元数共轭: ⑽ 四元数倒数: ⑾ 对于四元数,我们最重要的是用是用它来旋转一个向量,假设有一个用四元数表示的旋转为: ,有一个向量 v = (𝑣𝑥,𝑣𝑦,𝑣𝑧),则经过旋转后的结果 v′为: v′ = 𝑞𝑣𝑞∗ ⑿ 其中 q*为四元数 q的共轭四元数 , θ是转动角度。 有了四元数,如果应用于变换,我们还需要将四元数转化成相对应的矩阵。 把上述的上 海 大 学 毕 业 论 文 (设 计 ) 14 𝑞𝑣𝑞∗表示为 Qv,则有 ⒀ 上式 在其次坐标下 可以简化为: ⒁ 当 N(q)=1时,上式可以进一步简化为: ⒂ 由传感器数值 与 四元数 我们可以获取到 地磁、加速度计和陀螺仪的数值,根据这些数值我们可以实时更新四元数方程,使四元数表示的方位与头部所在的姿态保持一致。 首先, 我们需要根据 之前计算出的四元数来反算出前一时刻头部所在的姿态 的重力方向,然后, 计算此时 传感器得到的 重力信息和前一时刻的差,更新四元数。 𝑉𝑥 = 2∗ (q1 ∗ q3 − q0 ∗ q2) 𝑉𝑦 = 2 ∗ (q0 ∗ q1 + q2 ∗ q3) ⒃ 𝑉𝑧 = q0 ∗ q0 − q1 ∗ q1 − q2 ∗ q2 + q3 ∗ q3 上述公式即为 由前一状态四元数计算出重力参考方向。 Vx, Vy, Vz分别为重力在三轴的分量。 这个公式来自从 : 上 海 大 学 毕 业 论 文 (设 计 ) 15 ⒄ 重力 向量 就是 Q的第三行。 与重力一样,我们也需要计算地磁场的参考方向 ,并且依据地磁的方向来更新 Yaw 方向的四元数。 地磁参考方向计算如下: hx = 2∗ mx∗ (− q2q2− q3q3)+ 2∗ my∗ (q1q2−q0q3) + 2 ∗ mz∗ (q1q3+ q0q2)。 hy = 2∗ mx∗ (q1q2+ q0q3)+ 2∗ my∗ (− q1q1−q3q3) + 2∗ mz∗ (q2q3− q0q1)。 hz = 2 ∗ mx∗ (q1q3 −q0q2) +2 ∗ my∗ (q2q3+ q0q1) +2 ∗ mz∗ ( −q1q1 −q2q2)。 bx = sqrt((hx ∗ hx) + (hy∗ hy))。 bz = hz。 ⒅ mx,my,mz 是地磁传感器得到的数值的归一化表示, hx,hy,hz是计算出来的地磁参考方向。 由于我们并不关心地磁垂直方向的量,所以把地磁的 y轴和 x轴做了融合 ,得到新的参考方向 bx,bz。 之后是由上一时刻四元数表示的方向计算地磁的方向: wx = 2∗ bx ∗ ( − q2q2 − q3q3) + 2 ∗ bz∗ (q1q3 − q0q2)。 wy = 2∗ bx ∗ (q1q2 − q0q3) + 2 ∗ bz∗ (q0q1 + q2q3)。 wz = 2 ∗ bx ∗ (q0q2 + q1q3) + 2∗ bz ∗ ( − q1q1 − q2q2)。 ⒆ 上公式依旧来源于 有了重力和地磁的参考方向, 我们可以计算出 传感器得到的 方向 与 场的方向间的差值,这种 求 差值本质上是 进行了一次 向量 叉乘运算 : E⃗ = A⃗⃗ 𝑉⃗ +M⃗⃗⃗ 𝑊⃗⃗⃗ ⒇ 其中, E⃗ 是传感器和场方向的差, A⃗⃗ 是加速度计数值, 𝑉⃗ 是重力 场 参考方向 , M⃗⃗⃗ 是地磁计数值, 𝑤⃗⃗ 是地磁场参考方向。 将向量展开成分量,则有: ex = (ay∗ vz − az∗ vy) +(my∗ wz − mz∗ wy)。 上 海 大 学 毕 业 论 文 (设 计 ) 16 ey = (az ∗ vx − ax∗ vz) +(mz∗ wx − mx∗ wz)。 ez = (ax∗ vy − ay∗ vx) +(mx∗ wy − my∗ wx)。 最后,我们需要把陀螺仪的数值融合到误差 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]。 下面举一个具体例子来说明龙格库塔方法。 令初值问题表述如 : 则,对于该问题的 如果使用 四阶龙格库塔方法 由如下方程给出: 其中 下一时刻的输出 𝑦𝑛+1是由当前值加上估算的斜率与时间差的乘积。 估算的 斜率是k1,k2,k3,k4斜率的加权平均 ,中点的斜率有更大的权值 : 上 海 大 学 毕 业 论 文 (设 计 ) 17 上例 中使用的是四阶方法,考虑到单片机的处理速度, 我们使用的是 1阶龙格库塔法。 设有一个矩阵微分方程: 𝑋̇(𝑡) = 𝑓[𝑋(𝑡),𝑤(𝑡))] 其一阶龙格库塔的解为: X(t+ T) = X(t) +T𝑓[𝑋(𝑡),𝑤(𝑡))] 对于四元数 Q,其微分方程为: Q̇ = 12𝑄 ∗ 𝜔𝐵 矩阵形式为: 则 带入一阶龙格库塔的解为 q(t+ T) = q(t) +T∗ 12𝜔𝑏 ∗ 𝑞(𝑡) 即: 表示为伪代码为: iq0 = (q1*gx q2*gy q3*gz)*halfT。 iq1 = (q0*gx + q2*gz q3*gy)*halfT。 iq2 = (q0*gy q1*gz + q3*gx)*halfT。 iq3 = (q0*gz + q1*gy q2*gx)*halfT。 上 海 大 学 毕 业 论 文 (设 计 ) 18 其中, iq0,iq1,iq2,iq3分别为 Q的四个分量的增量, halfT是上面公式中的 12 T。 Q𝑛𝑒𝑥𝑡 = 𝑄 +𝑖𝑞 系统实现 芯片选择 实现头部跟踪设备时, 我们 综合考虑单片机的性能、价位、资料丰富程度等因数, 选择了 STM32 系列的 STM32F103C8T6 单片机作为 系统的处理器。 STM32 是基于 ARM CortexM3 内核的 32 位 微处理器, 最高到 72MHz的主频, 可以实现单周期乘法和硬件加速的除法 , 它以 8位机的价格 实现了 32位机的性能。 同时 资料丰富,爱好者众多。 系统中主要的传感器 芯片主要 有 2片: MPU6050: 3轴加速度计与 3轴陀螺仪 HMC5883L: 3轴电子罗盘 系统中还使用了蓝牙模块 HC06与 PC通信。 图 26 MPU6050 MPU6000 为全球首例整合性 6 轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了大量的 封 装空间。 MPU6050整合了 3轴陀螺仪、3 轴加速器,并含可藉由第二个 I2C 端口连接其他厂牌之加速器、磁力传感器、或其他传感器的数位运动处理 (DMP: Digital Motion Processor)硬件加速引擎,由主要 I2C端口以单一数据流的形式,向应用端输出完整的 9轴融合演算技术。 MPU6050的角速度全格感测范围为 177。 250、 177。 500、 177。 1000与 177。 20xx176。 /sec (dps),可准确追上 海 大 学 毕 业 论 文 (设 计 ) 19 緃快速与慢速动作,并 且,用户可程式控制的加速器全格感测范围为 177。 2g、 177。 4g177。 8g与 177。 16g。 产品传输可透过最高至 400kHz的 I2C或最高达 20MHz的 SPI。 MPU6050大量使用在姿态检测、体感游戏与手机中。 图 27 HMC5883L Honeywell HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁 传感器芯片,应用于低成本罗盘和磁场检测领域。 HMC5883L 包括最先进的高 分辨率 HMC118X 系列磁阻传感器,并附带 Honeywell 专利的集成电路包括放大 器、自动消磁驱动器、偏差校准、能使罗盘精度控制在 1176。 ~2176。 的 12 位模数 转换器 .简易的 I2C 系列总线接口。 HMC5883L 是采用无铅表面封装技术,带 有 16 引脚,尺寸为。 HMC5883L 的所应用领域有手机、笔记本 电脑、消费类电子、汽车导航系统和个人导航系统。 HMC5883L 用 Honeywell 各向异性磁阻 (AMR)技术,该技术的优点是其他磁传感器技术所无法企及。 这些各向 异性传感器具有在轴向高灵敏度和线性高精度的特点 .传感器带有的对于正交轴低敏感行的固相结构能用于 测量地球磁场的方向和大小,其测量范围从毫高斯到 8 高斯 (gauss)。 图 28 HC06 同时,为了。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。