2013-03-29 50 views
0

我正在尝试使用加速度计读数来瞬时计算关于初始位置的腿的角度。Android:仅使用加速度计确定倾斜角

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

理论上看起来似乎是合理的:重力的读数在腿的每个位置都是不同的,所以在静止的位置读数应该收敛到一个向量,我可以用它来找到腿的角位移,在开始时。但是,我尝试了几种组合:两个矢量之间的角度只使用Z和Y分量(使用this);计算重力和电流之间的差异向量,并做atan2(dY,SQRT(dX^2 + dZ^2));计算atan2(dY,dz)...(其中dY和dZ分别是Y和Z分量的当前矢量和重力矢量的相减)

这些解决方案似乎都不工作,所以我想知道如果我可以做到这一点。

有没有人有解决方案?

+0

只能用加速度计获得倾斜角度。关于初始位置,您无法获得“腿的角度”。后者需要陀螺仪或磁力计。 – Ali

+0

@ ravemir-你能找到解决方案吗?我面临同样的问题。欢迎任何帮助。 – nia

+0

我发表论文已经有6个多月了,经过一段时间与Hoan讨论后,我决定使用指南针指导并专注于完成剩余的工作。但我有一个预感,我可以使用主成分分析(请参阅[我的论文]](https://fenix.tecnico.ulisboa.pt/publico/department/theses.do?thesisID=2353642465657&contentContextPath_PATH=/departamentos/dei/lateral/dissertacoes&method = showThesisDetails&selectedDepartmentUnitID = 1911260507896&locale = en_EN)参考文献25和35)。这将是一个开始的好地方。随意讨论! :) – ravemir

回答

1

假设设备绑在屏幕上,屏幕朝向与用户相同的方向,那么您可以计算角度作为屏幕表面与东北平面之间的角度。我只是在这里给你这个想法,你必须做更多的工作才能知道角度是低于还是高于东北飞机。该角度可以计算为

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

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

+0

理论上看来似乎是合理的:重力的读数在腿的每个位置都是不同的,所以在静止的位置读数应该收敛到我可以用来找到腿的角位移的矢量。你能详细解释为什么它不起作用吗? – ravemir

+0

我不明白“读重力”是什么意思,你的意思是说它是z坐标的值。因为对我来说重力是重力,它近似为9.8 –

+0

我的意思是,如果手机静止,加速度计读取重力值,沿着它的轴分布。稍微倾斜手机也会提供重力读数,但这次沿轴线分布不同。通过这两个值是否可以确定定位的变化? – ravemir