android - 加速度计在运行几分钟后同时触发多次

标签 android flutter dart accelerometer android-sensors

我用 Flutter 开发了一个移动应用程序。 我正在使用 flutter_sensors 读取加速度数据包,每次流被触发并输出新的加速数据时,我都会用 Stopwatch class 计算经过的毫秒数。并存储和绘制加速度数据和相应的时间戳。

accelerationZ = [12.79, 9.93, 8.43, 15.96, …, 5.13, 9.61, 12.81] in m/s^2
time = [145922, 145923, 145952, 145960, …, 147900, 147913, 147936] in ms since start

几分钟后,奇怪的事情发生了。

这是启动传感器后随时间变化的加速度图的样子:

Acceleration over time right after starting the sensor - 1

这是大约 4 分钟后的样子:

Acceleration over time after around 4min - 2

此图显示了每次流被触发和给我新数据之间的时间(以毫秒为单位)(经过的毫秒数 time[i+1]-time[i] 之间的差异)。橙色为正常状态(图 1)。蓝色为几分钟后的断裂状态(图 2)。

time between every timestamp

当一切正常时(橙色线),每隔 5 到 15 毫秒就会有新数据出现。

但几分钟后(蓝线)流同时被触发多次(时间差因此此时的图表为零) 然后中断大约 70 毫秒(图中的尖峰)然后再次触发多次。

这对应于图 2 中显示的图表。您还可以看到这些时间跳跃和同时出现的多个值。

我的问题是:是什么原因造成的?我该如何解决?

我很高兴听到任何关于一般改进的建议(例如标题)。非常感谢您的帮助。 如果需要更多信息来帮助我,请告诉我!我很绝望。

这是监听事件的代码:

void startSensors() async {
    accelstream = await SensorManager().sensorUpdates(
      sensorId: Sensors.ACCELEROMETER,
      interval: Duration(milliseconds: 10),
    );

    stopWatch.start();

    accelstream.listen((SensorEvent event) {
      setState(
        () {
          Vector3 accel = Vector3(event.data[0], event.data[1], event.data[2]);
          newData(accel.z, stopWatch.elapsedMilliseconds)
        },
      );
    });
}

我的一些发现: 状态随着时间的推移而发展。启动应用程序后,采样率平均为 100Hz(每 10 毫秒)(图中的橙色)。并不是流每 10ms 不断触发一次。取而代之的是,有时加速度计“占用”(idk 正确的术语是什么,我道歉)15 毫秒,然后下一次可能只有 5 毫秒。随着时间的推移,差异会越来越大。例如,在 30 秒后,流在 2 毫秒到 18 毫秒之间触发,但仍平均为 10 毫秒(100 赫兹)。传感器运行的时间越长,差距就越大(例如 0ms 和 60ms)。 我发现的另一件事是,随着时间的推移,操作系统 (ig) 会将采样率从最初的 100Hz 降低到 20Hz。

最佳答案

您不应尝试自己确定时间(使用秒表)。事件数据包含事件发生时间的时间戳。您需要改用它,因为可能会有一些延迟(取决于其他情况)。

只需存储最后一个事件的时间戳,然后在新事件出现时计算增量。

关于android - 加速度计在运行几分钟后同时触发多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66955354/

相关文章:

dart - 在 initState 方法中调用时不播放 Flutter 视频

dart - 如何修复 "pub get failed(1)"

flutter - 根据另一个 DropdownButton [FLUTTER] 的值动态更改 DropdownButton 的值

android - match_parent 在自定义工具栏中不起作用

Java BlockingQueue<Runnable> 不可转换类型

flutter - 如何在 flutter 列表和 map 中使用颜色和标题

dart - 为什么我的 setState 方法无法更改我的容器背景颜色?

flutter - 如何在抖动中获取音频文件的元数据?

php - 在后台多次从 android 执行 .php 文件的最佳方法是什么?

java - relativelayout 上的高斯模糊