我目前正在开发一个虚拟现实框架。我的Android智能手机被用作立体显示器和控制器。我有头部跟踪工作,但我想要一个简单的位置跟踪,也。我知道精确跟踪智能手机的位置是不可能的。至少,只要一个人被限制在智能手机的传感器上。因此,我们的想法是区分智能手机的旋转(头部跟踪)和任何类型的普通运动。当然,其结果是,如果检测到运动,我只能向前移动。正如我所说的,头部跟踪在android陀螺仪上工作得很好。但是运动跟踪仍然不能像我希望的那样工作。
主要的问题是,当旋转手机时,这种旋转实际上也是一种加速度。因此,仅仅看加速度的大小并不足以区分加速度(运动)和旋转。此外,做一些类似于陀螺仪阈值的事情:
if(gyroscope.magnitude < EPSILON)
if(accelerometer.magnitude > EPSILON)
//this may be motion也不会产生所需的区别,因为在行走时手机总是会有一定程度的旋转。
长话短说:这个问题有没有可能的解决方案?(编辑)如果是,是如何完成的?我希望能够辨别智能手机是否被移动或旋转。理想情况下,仅使用陀螺仪和加速度计。
致以最良好的问候,并感谢您的反馈!
发布于 2018-07-09 16:39:01
我建议熟悉四元数的概念,以及如何使用它们来表示方向(这可能是一个很好的开始:http://run.usc.edu/cs520-s12/quaternions/quaternions-cs520.pdf)
此外,使用启发式作为您建议的"EPSILON“可能还不够,因为在某些情况下启发式可能会失败,但我相信您已经知道这一点。
大多数时候,你必须关心原始数据中的偏差,因此,你必须在测量开始时确保手机在足够的时间内处于静止状态(取决于在该时间段内获得的样本数量=取决于传感器的采样率)。在这种情况下,您可以计算轴上的平均值并减去它。这假设偏差随着时间的推移是恒定的,并且不关心偏差的不稳定性(看看这里:http://sensorwiki.org/doku.php/sensors/gyroscope)。偏置不稳定性不仅适用于陀螺。
如果您不能保证在过程开始时休息,您还需要阅读一些关于卡尔曼滤波器的知识,因为它们为您提供了估计偏差的可能性。我见过使用四元数和偏置作为状态的KF的实现;) -仅供初学者使用。
https://stackoverflow.com/questions/41173472
复制相似问题