Scratchでライントレース(センサ1つ)

Scratch で ライントレースをつくってみました。
ライントレースとは
ロボットが、床に引かれたラインをセンサで読み取り、それに沿って走行すること。
もともとは、リアルなロボットで行われているものを、スクラッチで再現してみます。
Webで検索した感じでは、ラインを読み取るセンサの数は、1つから3つのものが多い模様。4つや、それ以上のものもあるようです。
まずは、1センサのものを作ってみます。
考え方

リアルの場合 1 (ジグザグ走行)
センサ自体の仕組みは、光を出して跳ね返ってきた光の量が、多いなら白の上にいる、少ないなら黒い線の上にいる、と判断する。
センサをラインの境目に起き
- 白→ 左にずれているので右折する。(図左)
- 黒 → 右にずれているので左折する。(図右)
で、ジグザグに前進していく。
リアルの場合 2 (直進あり)
センサをラインの境目に置くと、白と黒の中間ぐらいの光が返ってくる。その明るさを覚えておいて、どう変化したかで判断する。
- 中間の光 → 正しい位置なので、まっすぐ進む。(図中央)
- 明るくなった → 左にずれているので右折する。(図左)
- 暗くなった → 右にずれているので左折する。(図右)
Scratchの場合
センサの代わりにする色を決めて、 ラインにどう触れているかで判断する。
リアルのセンサのようにアナログ的な判断はできないので
「白に触れている」「黒に触れている」「両方に触れている」の3パターン。(「どちらにも触れていない」は今回は無視)
作成
組み合わせとしては、上に書いた以外に「白にも黒にも触れていない」が考えられますが、とりあえず無視で。
背景

初期状態では、透明(グレーのチェック)になっているので、白い四角で塗りつぶします。

そして、ロボットがトレースするラインを引きます。細すぎると、センサが反対側にはみ出して、動きがおかしくなってしまうので、ある程度の太さで。今回は40にしてみました。
スプライト

既存のものだと「cat2」が、ちょうど真ん中にある鼻だけ違う色なので、センサにしやすいです。
プログラミング 1 (ジグザグ走行)

Scratchの場合、「○どまわす」だけでは前進しないので、「1ほうごかす」を追加しました。
- 鼻が白に触れている → 左にずれているので右回転して進む。
- 鼻が黒に触れている → 右にずれているので左回転して進む。
※ このプログラムを本物で実行すると、おそらくトレースカーは全然動かないと思います。(前進と旋回という別の命令が高速に送られても、モーターが反応できない為)

ただ、上のように「1どまわす」「1ほうごかす」では、動き大回りになって鋭角をうまく曲がれませんでした。「3どまわす」「1ほうごかす」で、そこそこトレースできるようになりました
プログラミング 2 (直進あり)

- 鼻が白にも黒にも触れている → 正しい位置なので、まっすぐ進む
- 鼻が白にだけ触れている → 左にずれているので右回転する。
- 鼻が黒にだけ触れている → 右にずれているので左回転する。
で、プログラムを組みました。
こっちは、ラインからずれた時は回転だけして直進はしないので、鋭角でもうまくトレースできました。
気になる点

センサが1つだと、ラインではなくラインの縁をトレースしているので、細長い円をトレースしているようなもの。端に到達したことは判断できず、Uターンして戻ってきます。
次回
2センサをつくってみます。
ディスカッション
コメント一覧
まだ、コメントがありません