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


こんにちは♪

今日はちょっと暑いようですが、ひところに比べたらとても過ごしやすい朝でしたね。
猛暑のなごりで毛布しか出していないのですが、そろそろ布団の出番かなあと思っています。

と、すがすがしいお天気に快さを感じながら通勤中、
「今日はマウス研修何やろうかな~」と考えているわけですw

課題が明確なときは解決の手段がわからなくてもわくわくするのですが、
課題を見失っているときは悩ましいです。

今日は課題が明確な、マイクロマウス研修です。
※昨日のブログのおさらい

昨日ただただ成り立つように書いてみたプログラムのどこに問題があって走りが上手くいかないのかを確認して修整します。
プログラムをよくよく確認してみたら、問題点が判明しました。

右(もしくは左)に壁が「ない」場合にどう走るべきかをGenieちゃんにきちんと指示してませんでしたw
ですから、そこを書き足したら、とりあえず上手く走った~^^!

と、珍しく自力で問題点を発見・修整して上手く走ったので、
松崎はすっかり浮かれてのり先生に自慢しに行きました♪

すると、のり先生はおもむろにあるページを見せてきました…。

写真 2013-08-28 10 25 26

それは、マイクロマウス関西支部のページの下部。

———-

マイクロマウス大会で泣かないために.加藤さんのマウス十則を知っておきましょう.

  1. 練習で1割の確率で発現するトラブルは、本番では9割の確率で発現する
  2. 練習で動かないマウスが、本番で急に動けるようになることはない
  3. 設計時に「これくらい、大丈夫だろう」と思ったことの9割は大丈夫でない
  4. 理論的には効果的であるはずのことの3割程度が実際に有効である
  5. 理論的に問題となることの10割が実際に問題となる
  6. ある欠陥は、その欠陥の全体に占める割合に関係なく全体を駄目にする
  7. ハードウェアの欠陥をソフトウェアでカバーすることはできない
  8. ソフトウェアの欠陥をハードウェアでカバーすることはできない
  9. 探索の安定性>最短の安定性>最短の速度>探索の速度 の順で優先される
  10. これらの法則を知らないと負けるが、知っていても別に勝てるわけではない

———-

ぐあーーー!

きびしい!!!

ですが、今まで大会や各種イベントに参加させていただいたり、みなさんとお話ししたりして、
上記の十則のようなことを何度もいろいろな形で伺ったので、説得力が半端ないです。
(先日頂いたアドバイスもまさにこれですね><)
これ印刷して部屋に貼ろうかな…。

ということで、慢心を振り払い、
思いつきうるいろいろな場面を想定してテストテストテスト!!

うりゃー
写真 2013-08-28 10 28 07

これはどうだ!?
写真 2013-08-28 10 28 39

とうっ!
写真 2013-08-28 10 31 04

これはいけるか!?
写真 2013-08-28 10 51 26

むむ、大丈夫そうだ!!!
やりました^^

さて、ひとつ課題が解決したらもうちょっと冒険したくなってみるのがマイクロマウスの妙味(ですよね?)w

以前佐倉さんが
壁切れを読んだ瞬間にブザーやLEDでデバックをするといいですよ
と教えてくださったのを思い出して、
いたずら心の延長で作ってみました。

以前ブザーでいろいろ遊んで試していたときを思い出しながら、
こんな風にプログラムに組み込みました。


	//最短走行時の超信地旋回前 壁切れ補正
	
	if(len > SECTION*2)												//3区画以上走る場合
	{
		while(len - STEP2LEN(step_r + step_l) > SECTION*1);			//停止する1区間前まで走る
		
		if(sen_r.is_wall == true)									//右壁がある場合☆
		{	
			kabekire_music();										//壁切れデバック用
			while(sen_r.is_wall == true)							//右壁が切れるまで走る
			step_r = step_l = 0;									//ステップ数カウントのリセット
			while((step_r + step_l) < LEN2STEP(len_remains));		//あと走るべき距離走る
			
		}
		
		else
		{
			while((step_r + step_l) < obj_step);
		}
	
	}
	
	else
	{
		while((step_r + step_l) < obj_step);
	}
	
	
	MTU2.TSTR.BIT.CST3 = 0;							//モータのカウントをストップ
	MTU2.TSTR.BIT.CST4 = 0;							//モータのカウントをストップ
	
}

※ちなみにどうでもいいことですが「straight_for_fast_right」という名前を「straight_right」に修整しました。すっきり。

では、走らせてみます!

ちなみに動画で走っているコースはこちら。

行きではこのようになるはず。
行き

帰りはこのようになるはず。
帰り

どうでしょう?

おおっ!成功!!!!

思わずのり先生に自慢してしまいましたw

上位陣みた~い!!!
と小学生並みの感想を述べつつ大興奮して喜んだのち、
さきほどの厳しい十則を思い出して、いろいろ試行することにしました。

すると…

スタート時若干中心よりも前のめりな位置にGenieちゃんを置いてスタートさせたとき、
こんな走りをポロリしましたよ…?

出た!!牛歩バグ!!
※牛歩バグとは、減速後無駄に走り続けさせるような指示を誤って書いてしまうために、減速終了後最低速度で走行を続けてしまうというバグです。(松崎命名)

しかも、ブザーによるデバックの情報を加味するに(早速大活躍!)、
どうも壁がないのに壁を読んでいるようだ。

ぐぬぬ。

どうなる壁切れ実装大作戦…。


Posted in Report on the assembly of Pi:Co Classic