値の急激な変化を抑えるクラスです。
モーターの出力値を急激に変化させると、大電流が流れ、モーターやモータードライバーに負荷がかかります。移動平均を使うことで、出力値の急激な変化を抑えられます。
移動平均とは時系列データを平滑化する手法です。サンプル数が多いほど滑らかになりますが、応答性が悪くなります。
- 覚え書き
ループ毎に平均値を更新するため、ループ周期が一定でないと正しく動作しません。LoopCycleController
を使ってループ周期を一定にすることをお勧めします。
static Udon::LoopCycleController loopCtrl{ 10000 };
void setup()
{
}
void loop()
{
loopCtrl.update();
}
移動平均クラス
Definition MovingAverage.hpp:17
double getValue() const noexcept
平均値の取得
Definition MovingAverage.hpp:49
void update(int value) noexcept
値の更新
Definition MovingAverage.hpp:37
operator()()
によって以下のようにも書けます。フィルターをかけるイメージです。
void loop()
{
double 出力値 = movingAverage(入力値);
loopCtrl.update();
}
サンプル数 20 の場合、入出力の関係は以下の様になります。