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

2020-06-13

Scratch で ライントレースをつくってみました。

ライントレースとは

ロボットが、床に引かれたラインをセンサで読み取り、それに沿って走行すること。

もともとは、リアルなロボットで行われているものを、スクラッチで再現してみます。

Webで検索した感じでは、ラインを読み取るセンサの数は、1つから3つのものが多い模様。4つや、それ以上のものもあるようです。

まずは、1センサのものを作ってみます。

考え方

リアルの場合 1 (ジグザグ走行)

センサ自体の仕組みは、光を出して跳ね返ってきた光の量が、多いなら白の上にいる、少ないなら黒い線の上にいる、と判断する。

センサをラインの境目に起き

  • 白→ 左にずれているので右折する。(図左)
  • 黒 → 右にずれているので左折する。(図右)

で、ジグザグに前進していく。

リアルの場合 2 (直進あり)

センサをラインの境目に置くと、白と黒の中間ぐらいの光が返ってくる。その明るさを覚えておいて、どう変化したかで判断する。

  • 中間の光 → 正しい位置なので、まっすぐ進む。(図中央)
  • 明るくなった → 左にずれているので右折する。(図左)
  • 暗くなった → 右にずれているので左折する。(図右)

Scratchの場合

センサの代わりにする色を決めて、 ラインにどう触れているかで判断する。

リアルのセンサのようにアナログ的な判断はできないので

「白に触れている」「黒に触れている」「両方に触れている」の3パターン。(「どちらにも触れていない」は今回は無視)

作成

組み合わせとしては、上に書いた以外に「白にも黒にも触れていない」が考えられますが、とりあえず無視で。

背景

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

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

スプライト

既存のものだと「cat2」が、ちょうど真ん中にある鼻だけ違う色なので、センサにしやすいです。

プログラミング 1 (ジグザグ走行)

Scratchの場合、「○どまわす」だけでは前進しないので、「1ほうごかす」を追加しました。

  • 鼻が白に触れている → 左にずれているので右回転して進む。
  • 鼻が黒に触れている → 右にずれているので左回転して進む。

※ このプログラムを本物で実行すると、おそらくトレースカーは全然動かないと思います。(前進と旋回という別の命令が高速に送られても、モーターが反応できない為)

ただ、上のように「1どまわす」「1ほうごかす」では、動き大回りになって鋭角をうまく曲がれませんでした。「3どまわす」「1ほうごかす」で、そこそこトレースできるようになりました

プログラミング 2 (直進あり)

  • 鼻が白にも黒にも触れている → 正しい位置なので、まっすぐ進む
  • 鼻が白にだけ触れている → 左にずれているので右回転する。
  • 鼻が黒にだけ触れている → 右にずれているので左回転する。

で、プログラムを組みました。

こっちは、ラインからずれた時は回転だけして直進はしないので、鋭角でもうまくトレースできました。

気になる点

センサが1つだと、ラインではなくラインの縁をトレースしているので、細長い円をトレースしているようなもの。端に到達したことは判断できず、Uターンして戻ってきます。

次回

2センサをつくってみます。