3

我的目标是使用我的安卓手机为我的头戴式显示器编写一个头部跟踪器。移动被转移到鼠标移动,而鼠标移动又在电脑游戏中使用。我想把我的安卓手机安装到头部追踪器的后面,所以它会固定在我的后脑勺上。y轴朝上,x轴朝右看,就是看我后脑勺的时候看到的是手机显示屏。

手机图片

由于这种设置的机制,y 轴和重力轴之间存在一个角度,因此当直视前方时,手机会稍微倾斜远离头部的后部。此外,它围绕 z 轴略微旋转,并且可能在围绕 z 轴移动时旋转大约 5 到 10° 的角度。

我的手机没有陀螺仪。我用了

public void onSensorChanged(SensorEvent event)
{
  // alpha is calculated as t / (t + dT)
  // with t, the low-pass filter's time-constant
  // and dT, the event delivery rate

  final float alpha = 0.8;

  gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
  gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
  gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

  linear_acceleration[0] = event.values[0] - gravity[0];
  linear_acceleration[1] = event.values[1] - gravity[1];
  linear_acceleration[2] = event.values[2] - gravity[2];
}

这比仅使用来自加速度计的原始数据效果更好。我只是用0.8作为alpha,需要根据t/(t+dT)来调整吗?那么如何得到t和dT呢?

使用这种设置,上下倾斜头部就可以了 - 在这里和那里进行一些改进 - 很好。

但是左右移动是个问题。还从左下到右上移动对角线并镜像。或者在圈子里移动。

来自基础数学而不是我的错误描述,您建议使用哪些代码来完成这项工作?

4

0 回答 0