Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:仅使用加速计确定倾斜角度_Android_Accelerometer_Angle_Tilt - Fatal编程技术网

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

Android:仅使用加速计确定倾斜角度,android,accelerometer,angle,tilt,Android,Accelerometer,Angle,Tilt,我正试图利用加速度计读数计算一条腿相对于初始位置的瞬时角度 当我接近这一点时,我决定我需要记录一个平均的重力向量,并计算我当前读数和它之间的某个角度 从理论上讲,这似乎是合理的:重力的读数在腿的每个位置上都是不同的,所以在静止位置,读数应该收敛到一个向量,我可以用它来找到腿的角位移,相对于开始时的读数 但是,我尝试了几种组合:两个向量之间的角度仅使用Z和Y分量(使用);计算重力和海流之间的差向量,并进行atan2(dY,SQRT(dX^2+dZ^2));计算atan2(dY,dz)。。。(其中d

我正试图利用加速度计读数计算一条腿相对于初始位置的瞬时角度

当我接近这一点时,我决定我需要记录一个平均的重力向量,并计算我当前读数和它之间的某个角度


从理论上讲,这似乎是合理的:重力的读数在腿的每个位置上都是不同的,所以在静止位置,读数应该收敛到一个向量,我可以用它来找到腿的角位移,相对于开始时的读数

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

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


有人对此有解决方案吗?

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

Math.acos(event.values[3] / norm of event.values[3]);  
因此,如果用户站着,则角度将为90或-90,具体取决于您的习惯。当腿向上移动时,角度的绝对值将减小。一是大腿与东北面平行,即屏幕平放,腿向上移动,腿向下移动时角度相同,因此需要使用更多信息来解决此问题。

如果屏幕与用户的朝向正交,则必须计算东-北平面和与屏幕正交的平面之间的角度。我让你算出这一点,它可能是上面的等式,带有
event.values 0或1
,这取决于设备是纵向的还是横向的。

你只能用加速计获得倾斜角度。您无法获得关于初始位置的“腿部角度”。你要么需要陀螺仪,要么需要磁强计。@ravemir-你能找到解决办法吗?我也面临同样的问题。欢迎任何帮助。我发表论文已经有6个多月了,在和Hoan讨论了一段时间后,我决定用指南针来指引方向,集中精力完成剩下的工作。但我有一种预感,我可以用主成分分析来做这件事(见参考文献25和35)。这将是一个很好的起点。请随意讨论!:)从理论上讲,这似乎是合理的:重力的读数在腿的每个位置都是不同的,所以在静止位置,读数应该收敛到一个向量,我可以用它来找到腿的角位移。你能详细解释一下为什么它不起作用吗?我不明白你所说的“重力读数”是什么意思,你是说它作为z坐标的值吗。因为对我来说重力就是重力,它大约是9.8。我的意思是,如果手机是静止的,加速度计会读取重力值,沿着它的轴分布。稍微倾斜手机也会提供重力读数,但这次沿轴线的分布不同。难道不可能通过这两个值来确定位置的变化吗?我理解您试图做什么,使用加速度计值的分量来计算角度。但是如果你想一想,这可以归结为一件事,就是仅仅通过加速度计来找到设备的位置,这是不可能的。如果假设一个坐标是固定的,那么这很容易,但我认为由于旋转加速度的原因,结果是不准确的。