マイクロマウス製作六十一日目


こんにちは。

そういえば先日のマイクロマウスブログで、飼いはじめた魚の名前を”ないしょ”とか言いながら、
直後に暴露するというドジをしてしまい、あまりの恥ずかしさに修正しようにもできず悶々として土日を過ごした松崎です。

アモンくんは今日も元気です♪

本日のマイクロマウス研修、ついにプログラムを書いていきます。

Straight関数を流用して作り出したので、基本的な走行のプログラムに
壁を読んで切れ目を認識する部分を付け足す感じになります。
まず、
最短走行時、左折または右折をする直前の壁を読んで、超信地旋回までのマウスの走行距離補正を行う
ことを目標とする今回の壁切れ補正ですので、
2区画以上先に壁切れがあった場合にのみ壁切れ補正を行うこととします。

2区画以上走ると、おのずと減速地点の先で壁の切れ目を見るポイントが来ます。
(どのポイントでGenieちゃんが壁の切れ目を見ているかは実際にコースにGenieちゃんを置いて確認しましたね)
※よくわからなかったので、点をマウスの中心として2区画走る場合の図を書いてみました
(切れ目を読むところが実際より奥まっている気がしないでもない…)。 20130812_2

グラフにするとこんな感じでしょうか。
※これまた大雑把に書いたものなので、傾きや速度、時間についてはまったく正確に表していません。 20130812_1
ですから、まず
1、しかるべきタイミングで壁の切れ目を読むプログラムを入れる
2、冒頭でも書いたように、限定された条件化でのみ壁の切れ目を読むので、条件付けしてあげる
というふたつをやってみます。

1について。
マウスが走行しているところをイメージしてみると、スタートして、加速し一定距離間最高速度で走行した後(走るべき距離が短い場合は最高速度に至る前に)減速し、
減速中に、止まるべきポイントの1区画手前から壁を読み始めるようにします。
その直後あたりで壁の切れ目がやってくるはずなので、そのタイミングで各処理を入れます。
これは、コピペしたStraight関数を一行ずつ見たら大体イメージがつかめました。
ただ、難しかったのは2です…orz(←最近これあまり見なくなりましたね!) まずはif文で「2区画以上走るときのみ壁切れを発動!!」とします。

if(len > SECTION*2) //2区画以上走る場合

停止する1区画前から壁を読むので、


{
 while(len - STEP2LEN(step_r + step_l) > SECTION*1); //停止する1区間前まで走る

と、while文を書いて(これサンプルプログラム参考にしながらも自力で思いついたときすごく嬉しかったw)、
そののちに「壁を読む」というプログラムを書…

き…

… 書けない

…。

sen_r.is_wall = true;   //とかそういう感じのを使う気がする

本日の研修ではここまで書きました。

次回研修時に前回の研修の内容をすぐ思い出せるように、 コメントアウトには正直な気持ちを入れます…。
(もちろん後でわかりづらいようにはならないよう注意してます!!)
でも、なんだか楽しいですね!!

次の課題は、いよいよサンプルプログラムがやってくれてるからとあまり知らないまますごしてきた、
どういう風にプログラムを書けばマウスは「壁を読む」のか!?
とか、
センサの値がどう変化した状態を「壁切れ位置」とするのか!?!?
(壁があったのがなくなる、壁がなかったのが現れる、壁がなくて柱だけがある…などなどいろいろな壁切れがある、、、)
などなど、おそらくマイクロマウスの醍醐味に相当踏み込んだ愉快なものです♪

マイクロマウス研修は難しく、
「どういうことですか?」「どうやってやったらいいですか?」
と聞きたいことばかりですが、
一方、はんだづけにはじまり、プログラムや探索アルゴリズムまで、未知の世界を奥へ奥へ案内してくれるようで楽しいので、
「どうやってブログにしたらわかったことを伝えられるだろう~」「楽しいって伝わるだろう~」
ともよく思います。

最近お休みということもあり学生さんたちがよくアールティショップを訪れてくださいます。
二足歩行ロボットに取り組んでいらっしゃる方が多いようです。
お話しさせていただくと、マイクロマウスは初耳という方もいらっしゃいました。

みなさんも是非マイクロマウスの世界にいらっしゃってくださいw

※余談 そういえば本日いらっしゃったお客様(学生の方ではないです)が、
コミケの技術ブースで手に入れたマイクロマウス本(!)をお土産にくださいました!!!
世の中って不思議だなあw


Posted in Report on the assembly of Pi:Co Classic