用线性加速度计算位置



我正在尝试计算基于传感器的新X位置。TYPE_LINEAR_ACCELERATION,我将应用到我的android游戏中。

我将从以下变量全部设置为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。

是否有人成功地将线性加速度转换为位置?有谁能指出我做错了什么吗?

我在哭!

我的经验是,与测量Sensor.TYPE_LINEAR_ACCELERATION相关的误差使得仅从Sensor.TYPE_LINEAR_ACCELERATION获得良好的位置估计是不可能的。

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

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

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

相关内容

  • 没有找到相关文章

最新更新