为什么DeviceMotion中的值不为零?!

时间:2014-02-28 03:21:17

标签: javascript accelerometer

我在Android上测试DeviceMotion事件,并在图表上绘制值。由于它们是加速度值(没有重力),如果设备处于静止状态,那么这些值在技术上应该为零。但是,当我在图表上绘制它们时,似乎并非如此:

enter image description here

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

如您所见,acc z 大部分时间是-0.7,而其他时间接近0。它们似乎也不是正确的加速度值。如果您查看t=0附近的值,当设备实际上没有移动时,它们不在0。为什么会发生这种情况?如何“解决”这个问题?

1 个答案:

答案 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

google返回结果: 243.012479公里

相比之下,LEO卫星轨道始于160公里。所以你要么在太空中,要么你的Android设备没有校准。我猜第二个是因为如果你在太空中,你将处于自由落体状态,你的设备应该读得接近零重力而不是9.1。

至于小动作。好吧,除非你完全将你的设备与地面隔离开,否则大多数现代MEMS加速度计都非常敏感,足以吸收外面的汽车或人们走进房间的交通。如果您的Z轴未校准,那么如果您的其他轴也报告错误,我也不会感到惊讶。