0

首先,我假设设备在第一次测量时处于静止状态,所以我的加速度是重力加速度,其次我不会使用低通滤波器。

Android 给了我线性加速度和罗盘值。我的猜测是我可以使用指南针将加速度旋转到地球参考,从而消除重力。我的猜测是,如果我计算两个罗盘测量值的差异,我有一个量是手机旋转的指数,因此,如果我将它添加到初始重力矢量,我也可以旋转它。

然后在我的第 i 个度量中,我的猜测是:

#a[i] contains the 3-acceleration at time i
#b[i] cointains the 3-compass values at time i
b[i]=numpy.sin(b[i]/(180./math.pi)) # I normalize the compass values from 0 to 1
#since b is a unit vector I need to "de-normalize" it
b[i]=b[i]*sqrt(g**2.)
deltab=b[i]-b[i-1]
# At the very beginning of the code I had something like g=a[0]
g=g-deltab #well I've tried also with the plus sign

它不起作用..但我看不到问题..有什么想法吗?

编辑:我也在尝试这种方法,我也不知道为什么它不起作用:我在这里找到了计算旋转矩阵,给出向量和旋转角度。下面是如何构建这个矩阵:http://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle 我选择的角度是新旧指南针方向的标量产品之一。他们旋转的向量是旧向量和新向量之间的叉积(我猜..这可能是错误的)所以:如果我得到罗盘的旋转,然后我建立旋转矩阵,然后我将它应用于我的初始重力矢量,是否正确旋转重力矢量?

#a[i] contains the 3-acceleration at time i
#b[i] cointains the 3-compass values at time i
omega=cross(b[i],b[i-1])
theta=dot(b[i],b[i-1])/sqrt(dot(b[i],b[i])*dot(b[i-1],b[i-1]))
M=rotationMatrix(omega,theta)
aWithoutGravity[i]=dot(M,a[i])
4

2 回答 2

1

罗盘值(即来自 android 传感器的值Sensor.TYPE_MAGNETIC_FIELD)在重力方向和磁北方向都有分量。因此,您可以将它与重力矢量结合使用来计算东方的方向,因为这是由两个矢量的矢量叉积给出的。事实上,根据您在世界的哪个位置,Sensor.TYPE_MAGNETIC_FIELD重力方向的分量可能非常大。

另请注意,Android 有两个传感器Sensor.TYPE_GRAVITYSensor.TYPE_LINEAR_ACCELERATION它们源自Sensor.TYPE_ACCELEROMETER. 读数满足

Sensor.TYPE_ACCELEROMETER =  Sensor.TYPE_GRAVITY + Sensor.TYPE_LINEAR_ACCELERATION
于 2013-06-13T07:49:32.893 回答
1

正如你所描述的,这个问题无法解决。如果你有两个坐标系,你可以用另一个来描述一个,但是你只有两个向量(在手机的坐标系中描述),并且单个向量会引入歧义,因为你真的只知道它们之间的角度。

例如,考虑对重力和磁场矢量进行初始测量,然后旋转和旋转您的手机。您可以再次测量磁场矢量,但假设您不知道重力矢量,它会在哪里?您所知道的只是它相对于磁场矢量的角度(并且您可能还假设您知道它的大小),基本上在磁场矢量周围形成一个锥形(如果您假设大小,则为环形)。但是由于你不知道它的确切信息,所以你不能用它来完全确定线性加速度。也就是说,给定一个测量的加速度(物理上,重力+线性加速度),可能的重力矢量锥中的每个矢量都意味着不同的线性加速度。

它确实让你部分地到达那里,因为你现在有一个复杂的几何问题,其中只有一定范围的线性加速度矢量与“重力锥”一致,但问题变得比它复杂得多一个简单的减法,没有先验的理由相信这个可能的线性加速度向量的较小子集会告诉你任何有用的东西。

例如,假设罗盘的原始读数是(1,0,0),加速度读数是(6, 6, 0)。如果手机然后只是旋转大约(1,0,0),则其他加速度读数是可能的,例如 (6, -6, 0)(6, 0, 6)(6, 0, -6),以及介于两者之间的许多读数。(6, 6, 0)因此,由于这种模糊性,我们无法仅根据罗盘读数来判断是(6, -6, 0)因为加速还是因为手机旋转了。

于 2013-06-13T17:33:17.770 回答