UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
移動平均

モーターの出力値を急激に変化させると、大電流が流れ、モーターやモータードライバーに負荷がかかります。この出力値の急激な変化を抑えるのに移動平均を利用します。

移動平均とは時系列データを平滑化する手法です。サンプル数が多いほど滑らかになりますが、応答性が悪くなります。

MovingAverage クラスは内部に過去の入力値を保持する配列を持っており、配列の平均値を出力値としています。

#include <Udon.hpp>
static Udon::LoopCycleController loopCtrl{ 10000 };
static Udon::MovingAverage<50> movingAverage; // サンプル数 50
void setup()
{
}
void loop()
{
movingAverage.update(入力値);
double 出力値 = movingAverage.getValue();
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 の場合、入出力の関係は以下の様になります。