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