もみあげあしめ

組み込みとかIoTとか、いろいろ

倒立振子でライントレースする 調査編

倒立振子は「とうりつしんし」と読む。倒立する紳士ではない。
倒立振子の応用例としてはセグウェイなどがある。

f:id:shima_nigoro:20161002221939p:plain:w300

この記事ではレゴ マインドストームを使った倒立振子ライントレーサに関する情報をまとめる。
つもりであったが、まずはライントレースの制御に使うPID制御についてまとめる。

ライントレースのアルゴリズム

下記の記事でオンオフ制御とPID制御でのライントレースを紹介している(2010年の記事)
「ETロボコンではじめるシステム制御」最新記事一覧 - ITmedia Keywords

オンオフ制御

時間があったら記事に書く。

PID制御

Proportional:比例、Integral:積分Differential:微分
それぞれの要素に係数をかけて和をとったものを操作量とする。

P制御

係数 × 偏差で操作量を求める。

ある時刻 {t} の操作量を {u(t)} 、出力値を {y(t)}、目標値を {r(t)}、係数を {K_p} とすると下記式となる。

{ u(t) = K_p e(t) }

{ e(t) = y(t) - r(t) } を偏差と呼ぶ。

I制御

係数 × 偏差の累積で操作量を求める

ある時刻 {t} の操作量を {u(t)} 、偏差の累積を { \sum_{0}^{t}e(t) } 、係数を {K_i} とすると下記式となる。

{ u(t) = K_i \sum_{0}^{t}e(t)}

※プログラム上では離散的な値となるため、積分ではなく総和で表現しておく。

#実際には {t} までの過去 {n} 回の偏差の累積を { \sum_{t - n}^{t}e(t) } として使うような気が…。

D制御

係数 ×(前回の偏差-今回の偏差)で操作量を求める。

ある時刻 {t} の操作量を {u(t)} 、偏差の差を { \frac{de(t)}{dt} } 、係数を {K_d} とすると下記式となる。

{ u(t) = K_d \frac{de(t)}{dt}}

{ \frac{de(t)}{dt} = e(t) - e(t-1) } でよい?

PID制御

すべての制御の和をとって求めた {u(t)} が最終的な操作量となる。

{ u(t) = K_p e(t) + K_i \sum_{0}^{t}e(t) + K_d ( e(t) - e(t-1) )}

用語

とりあえず、備忘録。

システム制御理論

用語 意味
古典制御 線形(入力値から目標値を計算する)のシステム制御。
代表的なものとしてオンオフ制御PID制御がある
現代制御 制御対象の揺らぎを「内部状態(内部変数)」として
モデル化し、精度よく目標値に近づける
ポスト現代制御 現代制御で完全にモデル化できない部分を補うシステム制御理論

#どれが優れているというわけではなく。特性を加味して使い分けることがよいらしい。

システム制御方式

用語 意味
開ループ制御 操作量に対する制御対象の状態を観測せず、目標値と制御対象の
偏差を操作量にフィードバックしない制御手法
閉ループ制御 操作量に対する制御対象の状態を観測し、目標値と制御対象の
偏差を操作量にフィードバックする制御手法

古典制御では「開ループ制御としてオンオフ制御」、「閉ループ制御としてPID制御」がある。

ライントレース

用語 意味
エッジ 白と黒の線が交わる部分
右エッジ走行 左側に黒、右側に白
がある状態で走行すること
左エッジ走行 左側に白、右側に黒
がある状態で走行すること
エッジ切り替え 走行中に右エッジ走行から
左エッジ走行に切り替えること

目標値に対する出力値

用語 意味
オーバーシュート 目標値を上側に突き抜けること
アンダーシュート 目標値を下側に突き抜けること
ハンチング オーバーシュートとアンダーシュートの
繰り返しで波打って安定しないこと

所感

数学の知識はほとんど失われているとわかったけれど、PID制御は難しくない。