我的目标是使用我的Android手机为我的头戴式显示器编写一个头部追踪器。该动作转移到鼠标移动,而鼠标移动又用于PC游戏。我想把我的Android手机安装到头部跟踪器的后面,所以它将固定在我的脑后。 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呢?
使用这种设置,向上和向下倾斜头部工作 - 在这里和那里进行一些改进 - 好吧。
但左右移动结果是一个问题。同时将对角线从左下方移动到右上方并进行镜像。或者在圈子里移动。
来自基础数学,而不是我的错误描述,你建议使用哪些代码?