0

我正在尝试根据我将应用于我的 android 游戏的 Sensor.TYPE_LINEAR_ACCELERATION 计算新的 X 位置。

我从以下变量全部设置为 0 开始:

float newX=0;
float lastX0 =0;
float lastX1 =0;

我的时间变量最初设置如下:

float newTime = System.currentTimeMillis()/1000;
float lastTime0 = lastTime1 = newTime;

然后我的 On SensorChange 看起来像这样:

public onSensorChanged(SensorEvent evt){
if (type == Sensor.TYPE_LINEAR_ACCELERATION) {

                    newTime = System.currentTimeMillis()/1000;
                    float oldDeltaTime = lastTime1-lastTime0;
                    float newDeltaTime = newTime- lastTime1;
                   if(oldDeltaTime<1)oldDeltaTime =1;

                    newX = lastX1 + ((lastX1 - lastX0)/oldDeltaTime)*newDeltaTime +(evt.values[0]/2)*(newDeltaTime*newDeltaTime);
                    lastX0 = lastX1;
                    lastX1 = newX;
                    lastTime0 = lastTime1;
                    lastTime1 = newTime;

                    Log.v("SENSOR MAN LINEAR", "new X:"+newX);


                }
}

但我的日志中的 newX 一直为 0。

有没有人成功地将 LinearAcceleration 翻译成位置?谁能弄清楚我做错了什么..

我在里面哭!

4

1 回答 1

1

我的经验是,与测量相关的误差Sensor.TYPE_LINEAR_ACCELERATION使得无法Sensor.TYPE_LINEAR_ACCELERATION单独获得对位置的良好估计。

我不知道为什么你总是得到零。要调试它,我只需Log.v使用所有变量来找出问题所在。

我也不确定您的公式newX是否充分利用了传感器值。加速是速度的变化,而您的实现似乎与此不符。

最后,事件值取决于设备的方向。因此,为了获得任何成功的机会,您需要结合罗盘传感器读数来尝试找出这些Sensor.TYPE_LINEAR_ACCELERATION值如何映射到现实世界中的方向。

于 2013-05-25T09:14:53.147 回答