科学研究

Scientific Research
VR技术研究—9轴融合算法—磁力计校准(一)
2018

05/15

16:09

467人阅读

发布者:admin

分享

对于VR的驱动层而言,一个很重要的工作就是融合加速度计、陀螺仪、磁力计的数据。一般而言,采用IMUupdate算法融合加速度计和陀螺仪就可以得到比较准确的数据了,在大多情况下使用也就足够了。但是IMUupdate算法的一个缺陷是它不能长时间得到准确的Yaw角,在经过一定时间后Yaw角会随着陀螺仪积分误差的增大而偏差越来越大。那么如果出现这种情况,用户在玩游戏的时候会出现这么一种情况:

刚开始的时候用户正对着屏幕玩游戏刚刚好,但是半个小时候用户不得不朝着左边或者右边才能正常的玩游戏。

这种情况称为Yaw角漂移,也就是头显在静止的时候,Yaw持续增大的情况。为了解决这个问题需要融合磁力计的数据。磁力计是利用地球的磁场进行定位,磁力计能够提供相对准确的方向,例如HMC5883芯片的厂商就号称他们的磁力计辨识度能到1°~2°。这个误差看起来是很小,实际上如果单纯的应用到游戏中,你会发现屏幕在不停的抖。但是依靠磁力计和陀螺仪的信息,我们可以通过一定的算法融合得到不会漂移的准确数据。我们融合磁力计常用的算法是Madgwick写的AHRSupdate算法。其实IMUupdate算法是AHRSupdate算法的一个阉割版。

AHRSupdate算法如下:

ex = (ay*vz- az*vy) + (my*wz- mz*wy); ey = (az*vx- ax*vz) + (mz*wx- mx*wz); ez = (ax*vy- ay*vx) + (mx*wy-my*wx);

  • 1
  • 2
  • 3
  • 4

IMUupdate算法如下:

ex = (ay*vz- az*vy); ey = (az*vx- ax*vz); ez = (ax*vy- ay*vx);

  • 1
  • 2
  • 3

使用IMUupdate算法一直都很好角度也非常准确,除了Yaw角有些漂移。AHRS算法折腾了好一段时间,虽然融合了磁力计再也不会出现漂移情况了,但是出现了角度不匹配的情况。

角度不匹配:当我们旋转头盔一定的角度后立即停下来,但是Yaw角并不会随着转动停止而立即停止,而是继续缓慢变化一小会儿然后才停止变化。

刚开始的是我一直不知道是什么原因,以为是转动速度过快导致陀螺仪不能检测到过高的转动速度。后来我单纯对比了IMUupdate算法进行测试,发现完全不会出现这种情况。说明是磁力计融合得到的数据和陀螺仪计算的数据不匹配,产生了这个缓慢校正的过程。当然,在短期内陀螺仪是远远比磁力计要准确的,说明磁力计的数据存在问题。 
为了解决这个问题,首先先输出磁力计原始数据到文本中。然后用matlab进行读取,这里我让VR头显在平面旋转一圈,得到完整一圈的磁力计数据。

%加载数据文件到matlab的workspace中loaddata.txt;%读取x轴数据x = data(:,1);%读取z轴数据z = data(:,3);%画出图像plot(x,z);

相关推荐
联系我们
  • 合作电话:0791-87193886(转短号611683)
  • 公司地址:江西省南昌市红谷滩新区九龙大道1388号VR产业基地一号楼6楼
关注我们
友情链接:
Copyright © 2018 南昌虚拟现实研究院 版权所有 ( 备案号: 赣ICP备18004577号-1 ) 技术支持:云端科技