public void onSensorChanged(SensorEvent event)
{
// alpha is calculated as t / (t + dT)
// with t, the low-pass filter's time-constant
// and dT, the event delivery rate
final float alpha = 0.8;
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
}
上面的代码中什么是重力?我还要初始化什么?
最佳答案
使用加速度计时,您始终可以获得大约 1g 的相对地球静态加速度读数。上面的代码只是一个低通滤波器,用于随着时间的推移去除该静态分量。每次读取读数时,它都会使用现有重力测量值的 80% 与新读数的 20% 相结合来跟踪该读数,以便静态分量稍后可以将其删除。
首先将gravity
数组初始化为零值。但请注意,只有采集了五个样本后,读数才会准确。您可能想引入一个计数器并忽略读数,直到过滤器有机会稳定下来。
如果没有该代码,例如,如果您的设备平放在 table 上,您将在 Z 轴上获得 1g 的恒定读数(对于最常见的加速度计安装布置)。使用该代码,您应该获得接近于零的读数,并且只有在拿起它时才能看到读数。
关于android - 从加速度计中去除重力...文档代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19473819/