1

我目前正在研究 VR 框架。我的 Android 智能手机用作立体显示器和控制器。我有头部跟踪工作,但我也想要一个简单的位置跟踪。我知道精确跟踪智能手机的位置是不可能的。至少只要一个仅限于智能手机的传感器。所以这个想法是区分智能手机的旋转(头部跟踪)和任何类型的一般运动。当然,如果检测到运动,我只能向前移动。正如我所说,头部跟踪与安卓陀螺仪配合得很好。但是运动跟踪仍然没有像我想要的那样工作。

主要的问题是,在旋转手机的时候,这个旋转其实也是一种加速度。因此,仅查看加速度的大小不足以区分加速度(运动)和旋转。此外,为陀螺仪做一个阈值之类的事情:

if(gyroscope.magnitude < EPSILON)
    if(accelerometer.magnitude > EPSILON)
        //this may be motion

也不会产生所需的差异化,因为走路时手机总是会发生一定程度的旋转。

长话短说:这个问题有没有可能的解决方案?(编辑)如果是,它是如何完成的?我希望能够区分智能手机是移动还是旋转。理想情况下,仅使用陀螺仪和加速度计。

最好的问候和感谢任何反馈!

4

1 回答 1

0

我建议熟悉四元数的概念以及如何使用它们来表示方向(这可能是一个好的开始:http ://run.usc.edu/cs520-s12/quaternions/quaternions-cs520.pdf )
同样使用启发式方法作为您建议的“EPSILON”可能还不够,因为在某些情况下启发式方法可能会失败,但我相信您已经知道了。
大多数情况下,您必须关心原始数据中的偏差,因此您要么必须确保手机在足够长的时间内处于静止状态(取决于您在该时间段内获得的样本数量 = 取决于传感器的采样率)在测量开始时。在这种情况下,您可以计算轴上的平均值并减去它。这假设偏差随着时间的推移是恒定的,并且不关心偏差不稳定性(看这里:http ://sensorwiki.org/doku.php/sensors/gyroscope )。偏置不稳定性不仅适用于陀螺仪。
如果您不能保证在过程开始时休息,您还想阅读一些有关卡尔曼滤波器的内容,因为它们为您提供了估计偏差的可能性。我已经看到了使用四元数和偏差作为状态的 KF 实现;) - 仅适用于初学者。

于 2018-07-09T08:39:01.227 回答