【问题标题】:Accelerometer triggers multiple times at the same time after some minutes running运行几分钟后,加速度计同时触发多次
【发布时间】:2021-04-05 15:20:30
【问题描述】:

我已经使用 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

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

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

- 1

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

- 2

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

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

【问题讨论】:

  • 请展示一个最小的可重现样本
  • @ch271828n 这需要我两到三个小时。如果您对提供所提供的信息没有任何想法,并且对在这个问题上花费大量时间不感兴趣,我认为这对我来说不值得。 ://
  • @NanoKaano 你应该至少发布监听事件的代码和处理陀螺数据的代码。
  • @danypata 我做到了,希望对您有所帮助。函数newData 然后将加速度和经过的毫秒存储到列表中。
  • @NanoKaano 您是否会两次或多次调用此方法?你是否曾经取消过从listen 获得的流订阅。在您的情况下,您似乎对同一个观察者有多个订阅者。

标签: android flutter dart accelerometer android-sensors


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
  • 2023-02-16
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
相关资源
最近更新 更多