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