CoSpace Rescue のプログラムを作っていて、最初につまずくのが・・・
「シーケンシャルな動きはどうやって実現すればいいのだろう!?」だと思います。
シーケンシャルな動きというのは、たとえば、収集箱に入ったら、3秒間停止したあとに、ちょっとバックして90度左回転する・・・というような一連の動作のことです。
M&Yも、2011年に CoSpace Rescue に参加したときに、この課題に悩みました。
当時は、収集箱が袋小路の奥にあるマップが多かったので・・・
収集箱に行く ⇒ オブジェクトを格納する ⇒ 180度回転 ⇒ 収集箱を出る
こんな、一連の動作が必要でした。
で・・・これをどうやって解決したのか・・・
当時は、変数を使っていました。
例えば i という変数を定義します。
普段は i=0 で、収集箱に入ったら(左右のカラーセンサーがオレンジ色を検知したら)オブジェクトを格納する動作(Deposit)をする。その後に i=1 にする。
i=1 であれば、180度回転する動作をさせる。その後に i=2 にする。
i=2 であれば、ちょっと(ロボットがオレンジ色の領域から完全に出る位)前進する。その後に i=0 にする。
というように、一連の動作を3行のステートメントで実現し、変数の値によって、どのステートメントを実行するのかを制御していました。
まあ、今でもこの技は使えると思います。
さて・・・上のやり方を書いたのは、もっと簡単なやり方があったからです。
前にも、紹介した CoSpace Rescue Flashcaed - 4 Feb 2015.pdf の中に
Deposit and Leave があります。
つまり、収集箱で格納した後に、収集箱を出る一連の動作です。
収集箱に入ったことを検知するのは、普通に左右のカラーセンサーで判断しています。ここまでは普通ですよね。で、右下の Advanced Action のところに、5行のコードを書いています。
if(Duration<=10)
if(US_Front<50)
{Wheel_Left=-5;Wheel_Right=-3;}
else
{Wheel_Left=5;Wheel_Right=5;}
確かに、この設定で、収集箱に入る ⇒ オブジェクトを格納 ⇒ 収集箱を出る の一連の動作ができます。
なぜ、これで出来るのか、の説明は次の記事で・・・