【问题标题】:calculate acceleration in reference to true north计算参考真北的加速度
【发布时间】:2013-02-04 11:17:57
【问题描述】:

对于我的应用,我需要计算设备相对于真北的加速度。我的想法是计算设备的磁北方向并将偏角应用于它以获得真正的北方向。然后我想计算设备的加速度并将其参考方向,但我不知道该怎么做。

我会尝试使用SensorManager.getRotationMatrix()SensorManager.getOrientation() 获取设备方向。然后我通过GeomagneticField.getDeclination()得到偏角并将其应用到来自SensorManager.getOrientation()的方向值的方位角上。

但是如何将加速度计值映射到这个方向?甚至可能吗?

【问题讨论】:

  • 如果我理解正确的话,你的意思是如果设备向西或向东移动,那么这种情况下的加速器值应该是 0,对吗?
  • 不,我需要以这种方式重新映射加速度计的轴,当设备(即)向北移动时,y 值为正,向南移动时为负。向东移动时 x 值为正,向西移动时为负。目前不需要 z 值。我想我在这个问题中找到了一个很好的来源:stackoverflow.com/questions/11578636/…
  • 当然,当向任何方向进行恒定运动时,该值应为 0,因为无法测量加速度。
  • 上述链接中解决方案中的所有计算似乎都不太合理。请参阅下面的解决方案。

标签: android orientation accelerometer sensors


【解决方案1】:

加速度传感器返回设备的加速度。这是 3 维空间中的向量。该向量在设备坐标系中返回。你要的是这个向量在世界坐标中的坐标,简单来说就是

R = rotation matrix obtained by calling getRotationMatrix
A_D = accelerator vector return by sensor ( A_D = event.values.clone )
A_W = R * A_D is the same acceleration vector in the world coordinate system.

A_W is an array of dimention 3 
A_W[0] is acceleration due east.
A_W[1] is acceleration due north.

这是一些计算它的代码(假设 gravitymagnetic 包含来自它们各自传感器的输出):

            float[] R = new float[9];
            float[] I = new float[9];
            SensorManager.getRotationMatrix(R, I, gravity, magnetic);
            float [] A_D = values.clone();
            float [] A_W = new float[3];
            A_W[0] = R[0] * A_D[0] + R[1] * A_D[1] + R[2] * A_D[2];
            A_W[1] = R[3] * A_D[0] + R[4] * A_D[1] + R[5] * A_D[2];
            A_W[2] = R[6] * A_D[0] + R[7] * A_D[1] + R[8] * A_D[2];

【讨论】:

  • 我相信您的回答可能是错误的(请参阅我在stackoverflow.com/questions/11578636/… 接受的答案中的评论)
  • 不,如果你真的了解旋转矩阵是什么,在源码中看看它是如何计算的。只是基矩阵从设备坐标系到世界坐标系的变化。
  • 此 [链接] (gentlenav.googlecode.com/files/DCMDraft2.pdf) 提供了旋转矩阵的解释,并将世界坐标报告为旋转矩阵和平面坐标的乘积。鉴于此,Android 计算的旋转矩阵可能是将 Device 映射到 World(与示例相反),但你怎么能确定呢?
  • 在 android-sdk --> 源 --> android-17 --> android --> 硬件 --> SensorManager。或者你想要的任何 android 号码,而不是 17
  • 要获得旋转矩阵,您需要重力。但是,当还有非零线性加速度是这个计算的重点时,你怎么能得到重力呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多