2014-02-28 40 views
0

我正在测试Android上的DeviceMotion事件,并在图上绘制了这些值。由于它们是加速度值(无重力),因此如果设备处于静止状态,则这些值在技术上应为零。然而,当我绘制出来的图表它似乎并没有这样的情况:为什么DeviceMotion中的值不为零?

enter image description here

http://jsfiddle.net/DerekL/Hgxde/17/show

正如你所看到的,ACC ž是大部分时间-0.7而其他人则在0附近。他们似乎也不是正确的加速度值。如果你看看t=0附近的值,那么它们不在0,而设备实际上并没有移动。为什么会发生这种情况,我该如何“修复”这一点?

回答

2

我假定Z轴为-0.7,因为软件假定地球的引力是9.8(这在海平面上是平均的)。然而,传感器的测量结果为9.1,因此差异小于0.7(约减少7%)。

虽然地球的引力是变化的(见:http://en.wikipedia.org/wiki/Gravity_of_Earth),但最大变异约为0.7%,比较山顶非常低的重力和北冰洋异常高的重力。

从维基百科页面,我们发现方程:

gh = g * square(r/(r+h)) 

/* gh = gravity at h 
* h = height 
* r = earth's radius 
* g = earth's gravity 
*/ 

重新排列的公式得到:

h = r/sqrt(gh/g) - r 

计算你的测量重力(用大括号摆弄后)我插上这给谷歌:

(radius of earth/sqrt((9.1m/(s^2))/earth gravity)) - radius of earth 

而谷歌返回结果:243.012479公里

为了便于比较,LEO卫星轨道从160km开始。所以你要么在太空中,要么你的Android设备没有被校准。我猜测第二,因为如果你在太空中,你会自由坠落,你的设备应该接近零重力而不是9.1。

至于小动作。那么,除非你将设备完全从地面上隔离开来,否则大多数现代MEMS加速度计都足够敏感,可以接收外面的车辆或走在房间里的人的交通。如果你的Z轴没有被校准,那么如果你的其他轴也报告错误,我不会感到惊讶。

+0

嗯,这可能是我得到不准确的数据的原因。你知道是否有什么方法可以重新校准Android中的加速度计? –

+0

不确定,我从来没有做过Android编程。我所有使用加速度计的经验都与为嵌入式设备编写固件有关。可能是一个新问题的候选人? – slebetman