スポンサーリンク
Scratch

Scratchで自立歩行するロボットを作ろう

Scratch

自分で進む道を選んで、勝手に動き回るとボットのプログラムを作ってみます。
ステージ上に青い線を描いておくと、その上を歩くロボットです。
工場なんかで働くロボットによくあります。
今回は画面上でスプライトが動くだけですが、本物のロボットも同じようなプログラムで動いています。

スポンサーリンク

プログラムの概要

マップ上に青い線を描いておくと、その上を進むプログラムを作ります。
分かれ道があれば、ランダムに進む方向を決めて進みます。
今回はプログラムを単純にするために、曲がり角は直角のみにします。

Scratchでは細かいプログラムができないため実現が難しいことがあり、何個かの制約があります。
・動かすロボット用スプライトの大きさ
・道を示す青い線の太さ
・センサー用スプライトの大きさ
これらの大きさのバランス調整が必要です。大きさのバランスが悪いと、動かなくなったり、道からはみ出したりします。

プログラム

スプライト

用意するものはスプライト2つとステージ1つです。

ロボット

 ステージの青い線の上を移動するロボットのスプライトです。
 Scratchで用意されている絵を使います。
 このロボットの場合、大きさを30ぐらいにしておきます。

センサー

 ロボットが次に進む道が、どの方向に続いているのか調べるための周防ライトです。
 正方形の絵を描いて用意しておきましょう。
 8×8で作って、大きさ100で使っています。

ステージ

四角と直線を使って、道を作ります。

線の太さは15にしています。

ロボットの動き

ロボットに作りこんでいるプログラムは少しです。

一応、主役はロボットなので、プログラムの起動とセンサーの起動はロボットに持たせておきます。
センサーを起動して、行き先が決まったらセンサーの場所まで移動します。
これだけです。

センサーの動き

今回のプログラムはほとんどセンサースプライトの中に作っています。


大きく2つの仕事をしています。

一つ目(左の塊プログラム)
今のセンサーの位置から、15歩前、15歩右、15歩左の位置を調べて、青の道があるかを調べます。



二つ目(右の塊ブロック)
センサーが調べた情報から、進む先を決定します。
前、右、左に進む道が無ければ、進んできた道を戻ります。

リスト変数「方向」には複数の値を入れることができます。
前と右に道があれば1と2の値を入れます。
変数の中身は次の表ののようなパターンになります。

道が見つからない前に道がある前、右に道がある前、左に道がある右に道がある右、左に道がある前、右、左に道がある
1つ目
2つ目
3つ目

進む先の調査

前、右、左を順番に調べていきますが、この塊で一つの方向を調べます。

まず、15歩先に動かします。
動いた先が青色だったらリスト変数「方向」に数字を追加します。
数字は、前方向に青い道があったら、1
    右方向に青い道があったら、2
    左方向に青い道があったら、3
を追加することにします。

調査が終わったら元の位置に戻します。
元の位置を起点に次に調査する方向に向きを変えます。

次に右側を調査して、その次に反対側を向いて左側の調査をしています。

進む先の決定

進む方向を決定します。

まず、前、右、左に道が無ければ反対方向を向いて、来た道を戻るようにします。

リスト変数「方向」に何も値が入っていなければ(「方向」の長さがゼロ)、道がなかったという事になします。

リスト変数に入っている値の個数をMAXにして乱数を作ります。
ランダムに進行方向を決めるためです。

1方向のみに道があるなら長さは1、2方向に道があれば2、3方向なら3の長さになっているはずです。

リスト変数に入っている値をランダムに取り出した結果、進む方向が決まるので向きを変えています。

最後に、15歩進めています。

進む方向がなかった場合もここできた道に15歩進めています。

このプログラムが終わったら、ロボットスプライトのプログラムに戻って、ロボットをセンサーまで移動させます。

後は、これを繰り返すことでロボットが動き続けます。

コメント

タイトルとURLをコピーしました