使用LinearAcceleration计算位置

时间:2013-05-24 19:10:48

标签: android accelerometer linear-algebra android-sensors sensor-fusion

我正在尝试根据我将应用于我的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翻译到位? 任何人都可以弄清楚我做错了什么..

我在里面哭!

1 个答案:

答案 0 :(得分:0)

我的经验是,与衡量Sensor.TYPE_LINEAR_ACCELERATION相关的错误使得无法仅从Sensor.TYPE_LINEAR_ACCELERATION获得良好的排名估算。

我不确定你为什么一直都是零。要调试它,我只需Log.v所有变量来解决问题所在。

我也不确定newX的公式是否正在充分利用传感器值。加速是速度的变化,你的实现似乎并不对应。

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