2018年1月13日土曜日

あけましておめでとうございます。

こんにちは、みねさんです。
皆さん おそくなりましたが、あけましておめでとうございます。

今、僕たちのサークルではNHK1次審査用のビデオ撮影を行っています。
今年はセンター試験と同じ日に撮影をしています。受験生と同じくこちらも審査に向けて全力を尽くせればと思います。
少し不安なのが、今部員が次々と風邪をひいてしまい、人手が不足していることですね。
最近は冷え込みがさらにひどくなってきましたので、風邪には皆さんもお気を付けください。

僕は制御班なのですが、今までNHK用の自動ロボットのプログラムの作成と同時にPID制御関数の作成を主にしてきました。PID制御とは、例えば、モーターをある回転数だけ回したいといったときに目標値に対して今どれだけ離れているか(偏差)に比例してスピードを下げていき、最終的にはぴったり目標値にくっつける制御です。
この偏差に比例してというのがP(比例)制御といわれるものです。これだけでも、ある程度目標値の近くまで行くのですが、途中で止まってしまいます。
なぜかというと、maxスピードを100、比例係数を0.3とした場合、目標値に近付いていけばいくほど偏差は小さくなっていきます。この偏差が小さくなりすぎてしまうと目標値の手前でモーターのスピードが0になってしまうのです。
この現象を解決するために次に導入するのがI(積分)制御です。
ここからは説明が長くなるので簡単に説明していきます。I制御とは、止まってしまったモーターを最後に少し動かし目標値にピタっと引っ付けて上げる動作をします。高校で習った積分を思い出してみてください。積分とは微小面積の累積をだしてある区間の面積を求めていましたね。その面積部分の値を計算式に足し算してあげることで、P制御式の値が0になった後でも、モーターは動き続けることができるというものです。
この2つを組み合わせたものをPI制御といいます。
このPI制御でも十分目標値に合わせることができるのですが、目標値に合わせるスピードが遅いと感じた時にスピードを上げてくれる、D(微分)制御というものがあります。
これは単位時間あたりに(現在の偏差)ー(前回読み取った偏差)の値をだし、PI制御式に足し合わせます。そうすることで、モーターのスピードをPI制御以上の値で出力できます。

PID = (比例制御)+(積分制御)+(微分制御)

といった感じになります。
文字だけの大まかな説明でしたので、わかりずらいかもしれません。そこはご了承ください。
また、間違いなどがあったらすいません。

これは内輪の内容となってしまうのですが、PID制御実行中にcprintf()を使用した場合、処理が重くなってしまうのか、反応が遅くなってしまうみたいです。


長々となってしまいましたが、これからもNHKロボコン出場を目指して頑張っていきたいと思います。







0 件のコメント: