我正在尝试计算基于传感器的新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
值如何映射到现实世界中的方向。