Pri*_*tam 15 android accelerometer
任何人都可以帮助从加速度计读数中删除g因子吗?
我正在使用SensorEventListener以及onSensorChanged()获取Sensor.TYPE_ACCELEROMETER数据的方法.我只需要在所有方向上的纯加速度值.因此,在任何状态下,如果设备稳定(或以恒定速度),它应该大致给出(0.0,0.0,0.0).
目前,根据其俯仰和滚动,它根据作用在每个轴上的g力给出可变输出.
我希望有一些公式可以删除它,因为我还从Sensor.TYPE_ORIENTATION监听器获取方向值(俯仰和滚动).我用了一些,但没用.
Mat*_*aun 10
您可以使用低通滤波器.
为每个传感器值执行此操作:
g = 0.9 * g + 0.1 * v
Run Code Online (Sandbox Code Playgroud)
v您当前的传感器值在哪里,并且g是最初设置为零的全局变量.请注意,您需要与轴数一样多的g变量.
随着v = v - g您可以消除您的传感器值的重力因素.
使用Sensor.TYPE_LINEAR_ACCELERATION而不是Sensor.TYPE_ACCELEROMETER
只需减去 g (~9.8m/s^2) 乘以旋转矩阵的 z 方向。或者更明确地说,让
a = your accelerometer reading,
R = your rotation matrix (as a 9-long vector).
Run Code Online (Sandbox Code Playgroud)
那么你想要的是
(a[0]-g*R[6], a[1]-g*R[7], a[2]-g*R[8]).
Run Code Online (Sandbox Code Playgroud)
小智 4
对时间函数进行微分可以消除常数。
因此,通过对加速度计信号求导,您将得到“加加速度”,然后您可以重新积分以获得您正在寻找的加速度的非恒定部分。
通俗地说,就是每 1 秒从加速度计中采样一次,并从之前的采样中减去它。如果答案是(非常接近)零,那么你相对于地球的加速度就没有。如果结果非零,对其进行积分(在本例中,乘以一秒),就得到了加速度。
但有两件事: - 留意信号中的噪声,四舍五入您的输入。- 不要指望片上加速计会产生超准确的结果。您可以使用它们来检测晃动、方向变化,但不能真正了解您在汽车急转弯时经历了多少 G。
| 归档时间: |
|
| 查看次数: |
41704 次 |
| 最近记录: |