Scratchでライントレース(センサ2つ)
Scratchでライントレース。
前回は、センサ1つで作ったので、今回はセンサ2つに作ってみたいと思います。
コース
前回の1センサでも、とりあえずラインをトレースすることはできた訳で。なぜセンサを増やすかというと、コースを正確に早く走れるようにする為であり。その為にはコースのルールがはっきりしていないといけない訳で。
リアルのライントレース競技では、大会ごとにいろいろなルールの違いがあるようです。違いとしては、十字路、直角コーナー、鋭角コーナーなどのありなし、など。そのなかでも多く見かけた、「ラインは、直線と円弧の組合せで構成。ラインは交差することがある。」の条件でコースを作ります。
と思ったけど、ヴイストン株式会社さんのビュートレーサーというライントレースカー用のコースがダウンロードできたので、使わせてもらいました。(ヴイストンさんには、掲載許諾をもらっています)
なので、コース条件は、「ラインは、直線と円弧と直角と鈍角と鋭角(ジグザグ部分がそれにあたる?)の組合せで構成。ラインは交差することがある。」になりました。

ただ、このデータはラインの一部がグレーになっていて、とりあえず今回はトレース処理だけをやりたかったので、その部分を黒に変更。ついでにラインそばにあったコーナーの説明の文字を削除しました(リアルなら文字の黒はしきい値の調整で無視できるのだろうけど、Scratchの場合は色に触れたかどうかで判断するので、文字で誤動作するかもしれないから)。
仕様
リアルのセンサ2つの場合、3通りのセンサ設置がある模様。境界線上か外側の事例が多そう。
- ライン内に入るようにセンサを設置
- ラインを外から挟むようにセンサを設置
- ラインの境界線上にセンサを設置
今回のコースの場合、ラインの幅が一定でないので、境界線上に置くのは除外。
センサ | ライン内 | ライン外 |
鋭角コーナー | 大丈夫(だと思う) | 別の線を誤認識してしまう? |
十字路 | 認識できない | 認識できる |
コースアウト、途切れたライン | 認識できる | 認識できない |
作る前の予想では、こんな違いで出そうな気がします。
でも、ビュートレーサーはラインの外側にセンサがついてるみたいです。
作成
とりあえず、鋭角コーナーが大丈だと予想したライン内センサーで作ります。
背景
コースの画像ファイルをアップロードします。
スプライト

今回も「cat2」を使います。目を、左は緑色、右は青色にして、センサの代わりに。もとの目の位置だとラインの内側に収まらないので、鼻の真横に移動して寄り目にします。
コード

右左のセンサともライン(黒)に触れている → 正しい位置なのでまっすぐ進む
左センサがラインからはみ出した(白に触れた) → 左にずれているので右回転する。
右センサがラインからはみ出した(白に触れた) → 右にずれているので左回転する。
ジグザグする幅を小さくしたいので、「センサがラインから離れたら(黒に触れてないなら)」でなく「ラインからはみ出したら(白にふれたら)」にしました。
テスト走行
直角コーナ直後の十字路はなんとかトレースできたけど、その後のジグザグでセンサが先のラインに触れて、逆方向に回りだし逆走してしまいました。
改善策
スプライトの回転軸を後ろにずらしてみる
リアルのライントレースカーは、駆動輪(ということは回転軸も?)が後ろの方にあって、センサが前の方にあります。
cat2 の回転軸は、前足の付け根ぐらいにあるので、後ろ足の付け根ぐらいに変更してみました。
× さっきは通過できた1つめの鈍角コーナーでセンサが誤動作してコースアウト。曲がり始めのときに、左センサがラインの右側にはみ出して、逆走してしまいます。
スプライトの回転軸を前にずらしてみる
逆に、両目(センサ)の間ぐらいにしてみました。
× ジグザグする幅がかなりおおきくなってしまいました。「色に触れた」があまり反応していない感じ。なぜだろう?
もっと寄り目にする
よく見ると、ジグザグの部分のラインの太さが両目の幅よりも狭かったので、さらに寄り目にしました。回転軸は最初の前足の付け根あたりに戻して。
× 回転軸を後ろにずらしたときと同じように、第一鈍角コーナーで逆走。
回転の判断条件を変える
「ラインからはみ出したら(白にふれたら)」から「センサがラインから離れたら(黒に触れてないなら)」にしました。寄り目、回転軸前足で。
×十字路を左折、ジグザグは最後のコーナーまでいったけど逆走。
コースとスプライトの比率
ふと、コースとスプライトとの比率は合っているのかが気になりました。

ヴイストン株式会社のビュートレーサーのサイズは長さ81mm。鼻先からおしりまでを同じサイズ(しっぽは含めない)にするには、写真の部分と同じ長さにすればいいので、スプライトの「おおきさ」を80にしました。センサは寄り目のまま。
×十字路を左折、ジグザグは最後から2番めのコーナーで左右のループに入りました。
あきらめる
プログラムの変更や、センサー位置の調整で完走できるとは思うけど、いったん諦めて、ライン外側センサをためしてみます。
ディスカッション
コメント一覧
まだ、コメントがありません