如何从Android 3轴加速度计中的加速度计读数中删除重力因子

任何人都可以帮助从加速计读数中删除g因子。 我正在使用SensorEventListener和onSensorChanged()方法获取Sensor.TYPE_ACCELEROMETER数据。 我只需要在所有方向上的纯粹的加速度值。 所以在任何状态下,如果设备稳定(或恒速),它应该给(0.0,0.0,0.0)大致。 目前,取决于它的俯仰和滚转,它根据作用在每个轴上的g力给出了可变的输出。

我希望有一些公式来消除这一点,因为我也从Sensor.TYPE_ORIENTATION监听器获取方向值(俯仰和滚动)。 我用了一些,但没有工作。

请帮忙吗?

Solutions Collecting From Web of "如何从Android 3轴加速度计中的加速度计读数中删除重力因子"

您可以使用低通滤波器。

为每个传感器值做这个:

g = 0.9 * g + 0.1 * v 

其中v是您当前的传感器值, g是初始设置为零的全局variables。 请注意,您需要尽可能多的gvariables。

v = v - g可以消除传感器值中的重力因素。

使用Sensor.TYPE_LINEAR_ACCELERATION而不是Sensor.TYPE_ACCELEROMETER

相对于时间来区分一个时间的函数摆脱你的常量。

因此,通过加速度计信号的导数,您将得到“Jerk”,然后您可以重新整合,以获得所需加速度的非恒定部分。

按照外行的说法,每1秒从加速度计中取样,并从前一个样本中减去。 如果答案是(非常接近)零,那么相对于地球而言,你并没有加速。 如果结果不为零,则将其整合(在这种情况下,乘以一秒),就得到了加速度。

两件事情,虽然: – 消除信号中的噪音,四舍五入您的input。 – 不要期望片上加速度计的超精确结果。 您可以使用它们来检测晃动,方向的变化,但不是真的知道您在汽车急转弯时遇到了多less个G。

一种方法(仅用于加速度计的设备)是通过从相同方向减去在静态情况下出现的值来从加速度计数据中去除重力vector。 但由于取向是通过加速度读数而不是独立计算的,所以不是很准确。

陀螺仪可能有助于这种情况。 但很less有机器人仍然有一个真正的陀螺仪。 而使用原始数据并不那么简单。

只要将g(〜9.8m / s ^ 2)乘以旋转matrix的z方向即可。 或者更明确地说,让

 a = your accelerometer reading, R = your rotation matrix (as a 9-long vector). 

那么你想要的是什么

 (a[0]-g*R[6], a[1]-g*R[7], a[2]-g*R[8]).