ローラー台の回転速度から負荷を推定するプログラムを書いた
パワーメーターを買ってローラー台こいでいるときのパワーが取れるようになったので、頭の体操として速度情報のみからローラー台の負荷の推定するプログラムを書いた。
モデル化
ローラー台はフルード式。つまりオイルの粘性で負荷をかけ、慣性はフライホイールの回転で再現する。摩擦による負荷もある。
よって、pを投入されるパワー、vをローラーの回転速度として、以下の簡単なモデルを仮定する
・p = (損失) + (速度の変化による回転体の運動エネルギー変化量)
・損失は摩擦と粘性抵抗を考慮することとすると、それぞれvとv^2に比例する。
・運動エネルギーはv^2に比例するため、その変化量はd(v^2)/dt = 2v*dv/dtに比例する。
以上からa1, a2, a3を定数として
雑に離散化すると
(前者と比較してa3には実際は1/Δtがかかっているがどうせ計算では定数倍は意味がないので気にしない)
この式に、実際にローラーを漕いで得られたデータをフィッティングすることで速度vのみからパワーpを推定する。
使用するデータはなるべく広範囲の速度におけるのデータがあること、なおかつ運動エネルギー周りを求めるために大きな加減速があるものが望ましいはず。インターバルトレーニングのデータは最適。
フィッティングは、とりあえずpythonを使ってプログラム書いてscipy.optimize.leastsq関数を使った。
計算結果
全体
Fitted lineとpe1は運動エネルギーを考慮しない場合、つまり純粋に速度に対する損失のみの曲線。pe2は運動エネルギーの変化も考慮した曲線。
開始直後
最初のあたりは推定されたパワーが低めに出ている。フルード型負荷装置の負荷は温度に依存して変化する。そのため、こぎ始めてしばらくは速度に対する負荷が大きく、温まってくると負荷が小さくなるようだ。
インターバル前のスプリント
900Wに届かない。弱い。
急激に加速と減速を行う部分のため、運動エネルギーを考慮したほうが実際のpに近づいているように見える。
インターバル後のおかしな部分
これはおかしな部分。パワーが0なのに推定されたパワーが上下に振れている。
パワー0ということはこいでいない状態。この時はラチェットの動作により負のパワーがかかっていることになる。ラチェットによるパワーはモデルに入っていないためこのようなことが起こるのだろうか。