Android:仅使用加速度计确定倾斜角度

时间:2013-03-29 19:10:58

标签: android accelerometer angle tilt

我正在尝试使用加速度计读数立即计算一条腿的初始位置角度。

当我接近这个时,我决定需要记录平均重力矢量并计算当前读数与之间的一些角度。

理论上看起来似乎有道理:腿的每个位置的重力读数都不同,所以在静止位置,读数应该会聚到我可以用来找到腿的角位移的矢量,相对于读数的读数一开始。

但是,我尝试了几种组合:两个矢量之间仅使用Z和Y分量的角度(使用this);计算重力和电流之间的差异向量,并做atan2(dY,SQRT(dX ^ 2 + dZ ^ 2));计算atan2(dY,dz)...(其中dY和dZ分别是Y和Z分量的当前和重力矢量的减法)

这些解决方案似乎都没有起作用,所以我想知道我是否能做到这一点。

有人有解决方案吗?

1 个答案:

答案 0 :(得分:1)

假设设备绑在腿上,屏幕朝向与用户相同的方向,则可以将角度计算为屏幕表面与东北平面之间的角度。我只想给你一个想法,你必须做更多的工作才能知道角度是在东 - 北平面之下还是之上。角度可以计算为

Math.acos(event.values[3] / norm of event.values[3]);  

因此,如果用户站立,那么根据您的惯例,角度将为90或-90。当腿向上移动时,角度的绝对值将减小。一条大腿与东北平面平行,即屏幕平放,腿向上移动,你将获得与腿向下移动时相同的角度,所以你需要使用更多的信息来解决这个问题。
如果屏幕与用户的面向方向正交,则必须计算东北平面与垂直于屏幕的平面之间的角度。我让你弄清楚这一点,它可能是上面的event.values 0 or 1等式,取决于设备是纵向还是横向。