ーーーー 入門講座ではライントレースは扱いません ーーーーーー
皆さんは工場などで荷物を自動的に運ぶロボットをご存知ですか?
初期の搬送用ロボット(AGV)は、床に描かれた線をたどって指定された場所まで移動していました。
この自動運転プログラミングをTiny:bitロボカーでやってみます。
写真は「ロボスタ」様から拝借させていただきました。
Tiny:bitの基盤先頭の裏側には左右1対ずつ、赤外線による反射率を調べるセンサーがあります。
装置は「赤外線障害物センサー」などと呼ばれ
・薄い青色が、赤外線を発射するLED
・黒っぽいのが、赤外線を受け取る部品
と、検出回路で構成されます。
受信した赤外線の強さによって、
・正面に高反射率の物がある
・低反射率あるいは何もない
ことを検知します。
早速ですが、簡単な実験プログラムを作ってみます。
センサーが何かを検知したらヘッドライトを点灯させます。
「論理」ブロック群から
もし<真>なら
・・
でなければ
・・
ブロックを
「ずっと」ブロックの中に組み込みます。
赤外線障害センサーをTiny:bitでは「ラインセンサー」と呼んでいます。
「Tinybit」ブロック群の
「左 ラインセンサーが 白」
を使用します。
「ラインセンサーブロック」を
「もし・・」ブロックの
<真>の中へ組み込みます。
Tiny:bitブロックから
「ヘッドライト 色 消」
「ヘッドライト 色 緑」
を使い、左図のように組み込みます。
もし白い紙がセンサー前にあれば「緑」ライト
もしセンサー前に何もなければライトを消す
という「IF文」を記述したことになります。
Tiny:bitカーを裏返しに置いて、白い紙をかざして実験してみてください。
実験プログラム(1)はこれで終わりです。
サンプルプログラムはこちらにあります。
https://makecode.microbit.org/_KP8MmW3XmWfW
今度は左右のセンサーを上手に組み合わせて、
白紙に書かれた黒い線をなぞって走る「ライントレース」と言われるプログラミングにチャレンジします。
左右のセンサーの白黒判別を上手く使って、どちらに舵を取れば線に沿って走れるかを考えていきます。
こういう考え方を「アルゴリズム」と呼んでいます。
Tiny:bitロボカーに搭載された左右センサーの状態は
左図のように、4つの状態が考えられます。
左のロボカーでは、ラインは真ん中にありますから、
左右のセンサーはいずれも「白」を検出しています。
なので、左右の車輪は同じように前進すればいいことになりますよね?
では、線がずれてしまった場合はセンサー値はどうなるでしょうか。
ロボカーを白紙の上に置き、
黒い紙をロボカーの下に通し
センサーの下を狙って動かし
その状態を表示するプログラムを作ってみます。
プログラム内容
・両方白なら「B」表示
・右センサーが黒を検知したら「R」表示
・左センサーが黒を検知したら「L」表示
・それ以外なら「S」表示
※「BRLS」は旋回方向等を意味しています。
Both / Right / Left / Stop
※ 以降は詳細なブロック組み立て手順は書きません。
まずは「ずっと」の中に
「論理」群から「もし<真>なら でなければ」
を組み込みます。
「論理」群から「< >かつ< >」ブロックを
「もし」ブロックの「<真>」の部分に組み込みます。
論理条件の「AND」ですね。
両方が成立した場合に何かを行う際に使用します。
左右2個の条件を記述する「< >」にセンサー条件を組み込みます。
「基本」文から文字表示ブロックを追加し「B」を表示させます。
続けてそれ以外の条件判断を追加します。
「もし」ブロックの左下にある「+」をクリックします。
すると
「でなければもし< >なら」が追加されます。
ここに”次の条件”を判定するロックを組み込みます。
(左画面下側の赤◯部分)
文字で書くと
if 条件
B表示
else if 条件2
R表示
こんな感じです。
1つ目の条件が外れた場合、直ちに次の条件判断を行い
更に別条件を判断する・・・(何回でも入れ子にできます)
さて、いよいよロボカーのモーターを動かして、実際に白地に黒色で書かれたラインをたどるプログラムに変更していきます。
前期のプログラムでは「BRLS」の4文字を表示しました。
これはロボカーの駆動状態を示しています。
「B」・・・両輪を駆動
「R」・・・その場で右旋回
「L」・・・その場で左旋回
「S」・・・停止
現在、文字表示しているブロックを、モーター駆動のブロックに置き換えます。
※文字表示を残していると、文字表示の分だけ動作が遅れ、正常に走ることができなくなります。(悩んだ)
以上でこのミッションは終わりです。
このプログラムはカクカクした走行動作をしますが、スムーズな走行を目指す場合は加速度や予測を取り入れるなど
高度なテクニックが必要になります。
Google検索で「ライントレース 高速化」で検索してみてください。参考サイト
4年前に作ったScratchでのライントレース こちら
AliExpressで同じ部品を売っていました。
1個14円+送料10円ですね。(ただし10個まとめ販売)
このロボカーのモーター+車輪のユニットも数百円で販売されています。
こういう部品系はAliExがかなり安いです。
が、完成品は国内Amazonとほぼ同額なので、リスクを負っての購入は微妙です。
(ですが、製品に問題があった場合返金された上、返送は要りません、となる可能性もあります。)