我在Android上测试DeviceMotion
事件,并在图表上绘制值。由于它们是加速度值(没有重力),如果设备处于静止状态,那么这些值在技术上应该为零。但是,当我在图表上绘制它们时,似乎并非如此:
http://jsfiddle.net/DerekL/Hgxde/17/show
如您所见,acc z 大部分时间是-0.7
,而其他时间接近0
。它们似乎也不是正确的加速度值。如果您查看t=0
附近的值,当设备实际上没有移动时,它们不在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
google返回结果: 243.012479公里
相比之下,LEO卫星轨道始于160公里。所以你要么在太空中,要么你的Android设备没有校准。我猜第二个是因为如果你在太空中,你将处于自由落体状态,你的设备应该读得接近零重力而不是9.1。
至于小动作。好吧,除非你完全将你的设备与地面隔离开,否则大多数现代MEMS加速度计都非常敏感,足以吸收外面的汽车或人们走进房间的交通。如果您的Z轴未校准,那么如果您的其他轴也报告错误,我也不会感到惊讶。