ひとしれずひっそり

主にソフトに関することをメモしていきます。過程をそのまま書いていたりするので間違いが含まれます。鵜呑みしない様に。

M5StickCでM5UnifiedでIMU(3)

移動平均を取ってみる

static void imu_task(void*)
{
  int tap_size = 9;
  int b_ptr = 0;
  float z_buf[tap_size] = {0};
  float val[3];
  float vel = 0;
  float sum = 0;

  while(true) {
    M5.Imu.getAccel(&val[0], &val[1], &val[2]);
    val[2] -= 1.0f;
    vel = sqrt(val[0] * val[0] + val[1] * val[1] + val[2] * val[2]);
    sum -= z_buf[b_ptr];
    z_buf[b_ptr] = vel;
    sum += z_buf[b_ptr];
    b_ptr = (b_ptr + 1) % tap_size;
    velocity = sum / tap_size;

    delay(10);
  }
}

だいたい0.09ぐらいのオフセット値がある様なので差し引いて使う様にする。

  float offset = 0.09;
  .
  .
    vel = sqrt(val[0] * val[0] + val[1] * val[1] + val[2] * val[2]) - offset;

雪寄せ時間を記録するためのM5StickCのプログラム · GitHub