我知道我正在尝试使用加速度计获得设备的线性运动,但请幽默一下。
我试图找出正确的公式来获取Sensor.TYPE_LINEAR_ACCELEROMETER
(我相信这是正常的加速度计数据减去重力)并基本上说“这么长时间过去了,自上次以来我已经加速了 x 量,所以我已经走了 d 量。
应该是这样的distanceTraveledOnX = linearAccerationOfX * TimePassed;
在现实世界中足够容易吧?如果我以每分钟 1 英里的速度行驶了 10 分钟,那么我已经行驶了 10 英里。速度 * 时间 = 距离
问题是我不确定linearAcceleration 使用什么度量单位。我知道我的 timePassed 是在 NanoSeconds 正如我所说的(在我的onSensorChanged
)
currentTime = System.nanoTime();//(double) 类型的var timePassed = currentTime - lastTime; 最后时间 = 当前时间;
有人可以帮我弄清楚将linearAcceleration值转换为nanoSecond测量的公式吗?
谢谢
编辑
这是我当前使用的代码,但我总是得到 0 :
public void onSensorChanged(SensorEvent evt) {
if (type == Sensor.TYPE_LINEAR_ACCELERATION) {
newTime = System.currentTimeMillis()/1000;
float oldVelocity = lastTime1-lastTime0;
float newVelocity = newTime- lastTime1;
if(oldVelocity<1)oldVelocity =1;
newX = lastX1 + ((lastX1 - lastX0)/oldVelocity)*newVelocity +(evt.values[0]/2)*(newVelocity*newVelocity);
lastX0 = lastX1;
lastX1 = newX;
lastTime0 = lastTime1;
lastTime1 = newTime;
Log.v("SENSOR MAN LINEAR", "new X:"+newX);
}
}