android - 从加速度计中去除重力...文档代码

标签 android

 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/

相关文章:

java - String.contain 在波斯字符串的对象序列化中

java - 使用 Azure 媒体服务获取访问 token 时遇到问题

android - 为手机设计人像,为平板电脑设计风景。使用 fragment

android - Jetpack compose 中的 onPressIn 和 onPressOut

android - 部分可见的 Action 模式图标 android

android - 在 Android Studio 中为多个项目创建相同操作的快捷方式

java - 尝试运行两个双 for 循环

android - 导航到 fragment 时应用程序崩溃

java - 使用 AsyncTask 隐藏/显示进度条

Android - 创建自定义形状按钮的可能方法?