最初のステップとして、イメージしやすく、比較的取り組みやすい「オンオフ制御」によるライントレースにチャレンジしよう!!
前回「目指せETロボコン!! ライントレースとシステム制御」で触れたとおり、わたしたちは「教育用レゴ マインドストームNXT(以下、走行体)」のライントレースのための走行制御として、「オンオフ制御」と「PID制御」を取り入れることにしました。
とはいえ、システム制御になじみのなかったわたしたちが、いきなり両方を取り入れるのはさすがにハードルが高かったため、最初のステップとして、イメージしやすく、比較的取り組みやすいオンオフ制御についてチャレンジすることにしました。
今回は、わたしたちが走行制御としてオンオフ制御を取り入れ、実際に走行体を走行させるまでの過程を紹介していきます。
早速、本題に移りたいところですが、その前にライントレースについてもう少し詳しく説明しておきたいと思います。
前回、「目標とする光量に近づくために、走行制御を用いながら、走行体を前進させることが、走行体のライントレースである」と定義しました。文章としては、何となく理解していただけたと思いますが、実際に動作としてイメージすることは難しかったのではないでしょうか。ここでは、ライントレースを動作として、しっかりとイメージしていただきたいと思います。
走行体のライントレースには、「エッジ」というキーワードが欠かせません。わたしたちの普段の会話の中では、以下のように使っています。
え〜っと。新しいロジックを試してみたいんだけど、いまの設定は右エッジ? 左エッジ?
あっ!! 走行体がコースアウトしちゃった。エッジを間違えたからだ……。
いかがでしょうか? 上記の会話だけでも、ずいぶんとイメージできたのではないでしょうか。走行体のライントレースは、線上を走行するといっても、線の中心を走行するのではなく、“左右どちらか片側のエッジを走行”しています(図1)。
エッジを固定するのは、走行制御を容易にするという目的のためです。つまり、ライントレースでは、走行制御を用いながら目標とする光量へと近づけていきますが、エッジを固定することで、目標とする光量へと近づく方向は常に一定となり、走行制御が容易になります。
右側から近づく場合は「右エッジ走行」、左側から近づく場合は「左エッジ走行」となります。さらに、この考えを基にした走行手法の1つに「エッジ切り替え(例えば、走行中に右エッジ走行から左エッジ走行へと切り替える)」という手法が存在します(図2)。
さて、ここまでの説明で走行体のライントレースについて具体的なイメージを持っていただけたかと思います。ここからは、いよいよオンオフ制御を用いて走行体を走らせていきます。なお、今回のオンオフ制御を用いたライントレースは、特に断りがない限り、すべて右エッジ走行を前提として進めていきます。
それでは、ここからオンオフ制御について説明していきます。
前回、ヒータを例に「開ループ制御」について説明しましたが、まずは、これを走行体のライントレースとして置き換えてみましょう(表1)。
ヒータ | 走行体のライントレース |
---|---|
設定温度25度 | 目標とする光量680(注1) |
室温 | 光センサーから取得した光量 |
ヒータが動作 | 走行体が左旋回 |
ヒータが停止 | 走行体が右旋回 |
表1 走行体のライントレースでの開ループ制御 |
具体的には、走行体の目標とする光量を「680」にすることをイメージしてください。光センサーから取得した光量が680を超えるまで、走行体は左に旋回し続け、光センサーから取得した光量が680を超えると走行体は右に旋回します。そして、光センサーから取得した光量が680よりも下がると、再び走行体は左に旋回します。
いかがでしょうか。このままコーディングすれば、オンオフ制御を用いてNXTを走行させることができそうな気がしますよね。確かに、このままでもオンオフ制御の一側面としては間違いではありませんし、走行させることもできます。ただし、実際に、制御技術としてオンオフ制御を採用する場合には、目標値のみのオンオフ切り替えは、切り替えが頻発するため通常は行いません。
通常は“オンオフ領域をオーバーラップさせる”ことで、オンオフ切り替えの頻発を防ぎます。このオーバーラップさせた領域のことを「動作隙間(すきま)」といいます(図3)。
この動作隙間の幅は、制御対象により異なります。ここからは、実際に走行体を動かし、動作隙間の変化により走行体の走行がどのように変化していくのかを見ていきたいと思います。
Copyright © ITmedia, Inc. All Rights Reserved.