iRobotのRootでぶつかったら左右交互に進むプログラムを作る方法

Rootで色んなプログラミングを作って楽しんでいますか?

またカッパがRootのプログラミングに幅を持たせるプログラムを思いつきました!

Left Caption
やるやん
Left Caption
ありがと

ではさっそく紹介したいと思います!

今回はRootが壁にぶつかったら左右交互に進むプログラムの作り方をシェアしていきます。

プログラム実行の順番

Left Caption
ぶつかったら右に、次は左に・・・
は?なんで同時に実行されるんだよ!

こんな状態に陥ってませんか?

僕もそうなったので気持ちは分かります。

ただ、のちのちやり方が分かった後に思い返してみると、

Left Caption
あの頃の俺はバカだったなぁ…

と懐かしく感じてしまいます。

Left Caption
プログラムにいいから左右交互にやれよ!

と言っても理解はしてくれません。

きちんとルールに沿って指示をしなければいけません。

 

僕の間違ったプログラム

僕が書いた「左右交互プログラム」を見てみましょう。

「バンパーが押されたとき」ブロックが2つ置いてあります。

一見1回目は上の「バンパーが押されたとき」のブロックが実行されて、次に下、という感じでうまくいきそうです。

ですが、これはプログラミング初級者が陥りやすい状間違いなんです!(僕もしっかり陥りました)

人間から見れば、上から順に実行するだけの簡単なお仕事です。

しかし!

コンピュータからすれば、バンパーが押された時に右回転と左回転を同時にやるプログラムになってしまいます。

こういった動きになってしまいました。

同じプログラムでも、人間とコンピュータでは全くとらえ方が違うんですね!

なので、ロボットも含めコンピュータに指示を出す時は、コンピュータのルールに従わなければいけません。

 

左右交互に曲がるプログラム

ということで実際に左右の切り替えをする方法を書いていきたいと思います。

コンピュータに分かるように、「交互に」を指示するには「セットへんすうmy_logic falseへ」ブロックを使います

 

「セットへんすうmy_logic falseへ」ブロック

このブロックも取扱説明書レベルの説明では使い方は全くわからないものの1つです。

この「my_logic」ブロックはtrueかfalse、YesかNo、で場合分けできるブロックです。

コンピュータっぽくいうと1か0、ONかOFFですね!

今回はこのブロックを使っていきます。

まずは「セットへんすうmy_logic falseへ」ブロックをプログラム画面にもっていきましょう。

すると、セットで「ロジックvar my_logicをつぎのあたいでさくせいtrue」というブロックが一番上に追加されます。

「my_logic」だと何のlogicなのかわかりにくいので、名前を変更します。

変更は「my_logic」をクリックして、「なまえをへんこう」をクリック。

 

今回は「trueで右へ曲がる、falseで左へ曲がる」プログラムを作るので、「true_right_false_left」としておきます。

 

POINT今後難しいプログラムを組むようになると、1つのプログラムに変数を大量に使うことになります。

その時に名前を付け忘れると大変です。

今のうちから名前を付ける癖をつけておきましょう!

 

まずはプログラムが開始されたら、「true_right_false_left」をtrueにして、秒速10㎝で前進します。

このままだとへんすうを作った意味が全くありません。

 

「もしtrue」ブロック

場合分けをするときに必ずと言っていいほど登場するのが、「もしtrue」ブロックです。

if elseですね!

これはもし○○なら××しろ。それ以外は△△しろ。

と条件を分けるために使います。

 

99%以上の確率で「もし」と「あてはまらないとき」はセットで使います。

今回は左と右の2つで分ければいいので、「もし」と「あてはまらないとき」だけでOKです。

3つ以上の条件で分ける場合もし~なら○○、あてはまらないときもし~なら△△、あてはまらないとき××的な感じで分けます。

「もし」「あてはまらないとき」ブロックの使い方

まずは場合分けの条件をプログラムしましょう!

このブロックの使い方が分かりづらいんですが、やっていきます。

まずもしの隣にあるtrueをクリックしてみましょう。

「もしtrueなら、もしfalseなら」を切り替えられます。

 

ここはtrueにしたまま「my_logic」を持っていきます。

このtrueの部分に条件式をはめ込むことができます。

ここがtrueの状態で条件式をはめ込むと、条件式がtrueの場合という意味になります。

そのあと「my_logic」ブロックをはめ込んで、「true_right_false_left」に変えます。

これで、「true_right_false_left」がtrueの場合、あてはまらないとき(false)の場合という場合分けができました!

 

実行されるプログラムを作る

場合分けが完成したので、実行されるプログラムを作っていきましょう。

Left Caption
次は中身を作るのか

・trueの場合右に回転

・falseの場合左に回転

なので、こうですね!

これで完成かと思いきや、実行してみると…

右を向いて終わりましたね?

Left Caption
はい

右を向いた後どうするかを指示していないからです。

「そくどをセット:ひだり10みぎ10センチ/びょう」のブロックを足してあげましょう

これで回転した後前進するという指示ができました!

さっそく実行してみると・・・

Left Caption
あれ?
次は右にしか曲がらない・・・

そうですよね。

大事なことを忘れています。

 

条件を交互に実行する

場合分けはできましたが、これでは交互に実行されません。

今のままだと、へんすうは常にtrueのままです

trueの場合しか実行されません。

なので、trueが実行されたら、最後に「セット:へんすう「true_right_false_left」をfalseへ」ブロックを加えましょう。

逆に当てはまらないときの方には「セット:へんすう「true_right_false_left」をtrueへ」ブロックを加えます。

このブロックの意味trueが実行されると、へんすうをfalseに変更

falseが実行されると、へんすうをtrueに変更

これで、何かにぶつかった時に左右交互に曲がって進むプログラムが完成しました!!!

さっそくデモ画面で実行してみましょう。

Left Caption
デモ画面に障害物ないよ

デモ画面に障害物を置くときは、画面を縮小してみてください。

そうすると、上の方に障害物や色がついたシールが置いてあります。

これを置いてから実験しましょう。

しっかりと左右交互に曲がって進んでますね!

これで、Rootが障害物にぶつかると左右交互に曲がるプログラムの完成です!

 

まとめ

どうでしたか?

場合分けの使い方は理解できたかな?

実はロボットやゲームを作る時に、この場合分けというのはめちゃくちゃ使われてます。

しっかりと理解しておきましょう!!!

他にもいくつかRoot用の難しめのプログラムを紹介してるので見ていってね!

雑記

Posted by カッパ