マイクロマウス「Pi:Co Classic」に挑戦!23 関数化


こんにちは。

アールティに入社して一ヵ月半。
ロボットのことはまだ詳しくない(と今までに何度言ったことか…)私ですが、
だからこそ楽しいことがたくさんあります。

昨日は、普通の人(ときどきアールティでは、ロボット業界に基本的に縁がない人をこう言う事がありますw)は私しかいない席で、
「ロボットが壊れたときの音ランキング」談義が始まりましたw

みな口々に、

「ウィーーーン、はまだいいほうw」
「一番やっかいなのは”サイレント系”だねwww」

などなどと大爆笑するなか、私はむしろその意味のわからなさに大爆笑してしまいましたw

いろいろなロボットにかかわる人とお会いしてお話を伺う機会が多いですが、
みなさん、ロボットを愛する気持ちと、好きだからこその詳細な知識を持ち合わせていらっしゃって、
たとえほとんど意味がわからないときでも、いつもおもしろいです。

みなさん、もし私に会うことがあったら、いろいろと教えてくださいね^^

**********

マイクロマウスの今日の研修のレポートをするその前に、
見てくださった方々からの「おいおい(笑)」という声が聞こえてきそうな、昨日のプログラムのミス。
ご指摘いただいて、ミスがわかりました。

↓これが昨日ミスしたプログラムです。
いざ走ろうとスイッチを入れても、まったく動きませんでした。

miss

みなさんはもうおわかりですよね。

(i = 1; i > 2; i++)という部分が間違っています。
iが2を上回らないと以下のプログラムが実行されないので、i = 1の時点で止まってしまっているわけです。
ですので、諸々を正すと、

20130516_3
こうなります。

たくさんの方々のご指導のおかげで、松崎は生まれて初めてfor文を作れました(;_;)

昨日アップした動画と実質的には走りに違いはありませんが、
思考回路は違うぜ!ということで、見てあげてください。

はい、本題。
今日のマイクロマウス研修は、
昨日の「サーキット」のプログラムをきれいにすることが課題です。

昨日は、「つまりこういうことでしょう?」をつらつらと書いただけの、長くてまどろっこしいプログラムでした。
今日、for文を使ったことによっていくらかよくなりましたが、
まだスマートにできるそうです。

circuit();

↑なんとこれだけ!
自分で関数を作って定義すると、この一行で呼び出すだけで済んでしまうそうです。
プログラムに対して難解で複雑なイメージを払拭できないので、
テキストと課題を前にしばらくポカーンとしてしまいました。

ですが、参照していたテキストに、とてもわかりやすい例えが載っていました。

普段、大きなバッグにいろいろな用途の日用品や文房具を入れて持ち運んでいますが、
間仕切り、あるいは小さなポーチ、インナーバッグ、ペンケース等々の小物入れに整理してバッグに入れることで、
欲しいものを探しやすいように、整理できます。

これと同じ発想で、よく操作するタブ(大きなバッグ)をスマートに整理するべく、
他のタブにごちゃごちゃしたものを整理して入れているという発想をするといいそうです。
大きなバッグには、わかりやすい見た目のものを入れておく。

そして、これがテキスト等を参照したり、のり先生に教えてもらいながら書いたもの。

20130516_3

※サーキットのプログラム以下にゴール後のナイトライダーに関するプログラムも書かれているため、
最後の中括弧は表示されていません。

こうして関数を定義します。

「戻り値や引数がある関数ではないから”int”じゃなくて”void”ですよね!?」

ということぐらいしか自分ひとりで理解にたどり着いたことはありませんでしたが、
プログラムは、いろいろと多層構造の発想になっているものが多いイメージをつかめました。
実際どんな構造になっていて、どう書くべきかはまだまだ難しいですが、

とりあえずちょっとずつは進んでいる…んでしょうか!?笑

<やりたいことリスト>
・すらろーむ
・ゴール後の、回転によるアピール(早苗さんいいなあ)
・迷路がなくてもパフォーマンスできるプログラムって何かできないかなあ(一般人への自慢用w)
・改造


Posted in Pi:Co Classic製作記