キットごとのライントレース(比例制御)の違い

ライントレースには色々な制御方法がありますが、簡単に作れて結構綺麗に走ることができる制御に比例制御という方法があります。

細かくは、下記の記事にまとめています。

関連記事

inventorはLEGO社のロボットキットです。反射光(センサーから当てた光の反射量)の強さを読み取れるカラーセンサーがありますし、モーターもかなり細かく制御できる上、ロボット本体が軽く、何よりLEGOなので形を自由に作り放題ということ[…]

今回は比例制御だけについてまとめています。ゆくゆくはPID制御の説明をしようと考えていて、その準備として必要になる考え方です。

比例制御の原理

比例制御とは、目標の値からのずれの割合に応じて制御の強さを変える方法です。目標より大きく離れているときは大きな力で修正し、目標に近いときは弱い力で制御して目標から外れないように動かす制御です。

比例制御のイメージ

よく、空調などの温度管理を例に説明されていますが、例えば夏の暑い季節、外から部屋に戻った直後はエアコンを強くして部屋を一気に冷やします。そして、快適な温度になったら強さを弱くして冷えすぎないようにします。このような調整というイメージを持てば、まずは問題ないと思います。

EV3での比例制御

EV3にはステアリングブロックという移動用のプログラミングブロックに優秀なブロックがあります。左右のモーターをある程度一定の割合で速度さをつけることができるので、このステアリングブロックを使ってプログラムを作れば簡単に作ることができます。

EV3での比例制御のライントレース(上がステアリング、下がタンク)

上段のプログラムがステアリングブロックを使った比例制御のライントレースのプログラムで、下段はタンクブロックを使った同様のプログラムです。パラメーターは同じにしていますが、挙動は変わると思います。

どちらがいいか

ステアリングブロックを使った方が、ロボットの移動速度を単体で検討できるので、調整が簡単だと思います。一方、スピードを限界近くまで上げていく場合、タンクブロックのやり方では、限界を超えてパワーが出ない数値になってくると、速度差の幅が変わることで揺れ具合が変わるだろうと想像ができます。とはいえ、EV3以外のプログラミングでは、タンクブロック系のプログラムを作ることになる方が一般的であるので、両方理解しておくことが応用力につながると思います。

spikeでの比例制御

spikeはver3のアプリを使っています。この時点で色々な変更が入りましたが、今後もアップデートが入ることで内容が変わると思います。

ステアリングブロックの挙動の違い

spikeにもステアリングブロック相当の方向を決めて制御するブロックがありますが、EV3とは挙動が違い、差がつきにくいことから係数での調整の感覚が狂います。EV3はステアリング値が50でピボットターンをしますが、spike系は90でピボットターンをします。spike系はピボットターン以下の幅が広いため、係数の扱いが変わりますが、それが理解できていれば調整はできると思います。

移動拡張ブロックの変更

上記の理由でタンクブロックでと思ったら、spikeのアプリがバージョンアップされて、移動拡張も含め、パワーでの移動制御ができなくなってしまったようです。

spikeの移動拡張ブロック

これだけしか残っていません。

オンモードにできるタンクブロックとブレーキ制御、加速度の変更(項目は減っているようです)だけになりました。

すっきりしましたけど、これなら拡張自体無くしてしまってもいいような気がします。

spikeでのプログラム

改めて、spikeでの比例制御でライントレースをするプログラムです。

パワーで制御

モーターを単体で動かせばパワーで制御できます。この場合、モーターの回転方向に注意が必要です。

コースによりますが、ロボットの挙動自体に問題はなさそうです。

スピードで制御

スピードで制御する場合は、移動拡張のブロックを使うと一つのブロックにまとめることができます。

同じパラメーターで同じコースを走行させましたが、パワーと比べてわずかにブレていました。

パワーの方が安定する理由は、スピードは状況に応じてモーターのパワーを再調整してくれるので、その結果、制御に遅れがでることでブレるのだと想定しています。余分な制御をする分、ライントレースの精度が落ちる、ということです。

これは、EV3で色を探しながら反射光でライントレースをする(発光のタイプを切り替えながら走行する)ことになった時に精度が落ちるのと似ている現象です。

inventorでの比例制御

inventor側はパワーの制御ができるブロックが残っています。

パワーで制御

挙動はspikeの時と同じような感じで、安定しています。

スピードで制御

間違い探しのようになりますが、移動をスピードで制御しています。

直線であっても、まともにライントレースができないくらい不安定です。

spikeとinventorでスピードで動かすプログラムは全く同じ見た目ですが、内部の動作は違うようです。ターンのときに挙動がおかしくなる(途中で加速することがある)のも、スピードで制御するときに何かバグがあるのかもしれません。もしくは、inventorの方がより余分な制御をしているのか、切り替えが遅いのか。

プログラムの実行速度そのものはハブ同士の仕様上の差はなかったはずですし、個体差というレベルの違いではないくらい挙動が違います。

どちらにしても、spike同様、inventor側もアプリがアップデートすることで挙動が変わる可能性を考えておいた方が良さそうです。

実際の動きの違い

EV3はそもそもプログラムの形式が違いますし、ロボットの重さ、モーターの仕様など色々と違うので、比較が難しいところですが、どこかでタイムや調整の違いなどをまとめてみたいと思っています。

まとめ

どれが優秀かという判断はこれだけではできません。

基本的に、残ったポートを使って何をするか(しないといけないか)によって、EV3かそれ以外のキットを使うかが分かれると思います。たくさんのポートを持つEV3か自由にモーターとセンサーを搭載できるspikeやinventorかなど。どちらでも可能なときは、プログラミングしやすい方という選択肢も出てきます。

ライントレースだけに限定した場合、どのキットを使っても正しく制御すれば綺麗に走行できます。その上で、さらに精度を上げるためにPID制御や、2個のカラーセンサーを使った制御などもあり、まだまだ奥の深い話が待っています。

ライントレースは主にロボット競技の基本になるテクニックではありますが、ロボットの挙動を見ながら調整していく練習は、試行錯誤の練習としては良い素材でもあります。目に見えて改善して行ったり、攻めすぎて失敗したりは、ロボットならではの手軽さと楽しさで経験できるからですね。

体験授業を実施中です

枚方ロボットプログラミング学習塾では無料で体験授業を実施しております。

興味を持たれた方はお気軽にお申し込みください。事前の問い合わせも可能です。

メール(info@hrktrpg.com)への問合せもお待ちしております。