目次
1. 本ドキュメントについて2. 本プログラムの機能
3. ソースプログラム
1. 本ドキュメントについて
-
本ドキュメントでは迷路攻略プログラム(メインプログラム)の作成に関して記す。
2. 本プログラムの機能
2.1. 競技回数による分岐
-
1回目:
センサーや画像処理を用いて順次迷路を攻略する。
2回目:
デジタルマップを用いて攻略する。(1回目で攻略できた場合)
→デジタルマップのファイルを全部読み終えたら、1回目と同じ処理に戻る。
1回目と同様に迷路を攻略する。(1回目で攻略できなかった場合)
→デジタルマップのファイルが存在しない場合はこちらの処理になる。
2.2. 1回目
-
処理の流れは、MIRS0905-SOFT-0003のFig.2を参照のこと。
ただし、Direction Boardの指示の優先度は
ゴール(6)>鍵(3)>小部屋(2)>ロータリー(1)>DB(0)>行き止まり(4)
と変更されている。
main関数の中では主に白線や壁の検知を行い、数字認識や各障害物の対処はそれぞれの関数で行う。
2.3. 2回目
-
デジタルマップのデータ(文字)を1つずつ読み込み、それに対応した動きをする。
この動作をファイルの終わりまで繰り返し、ファイルが終わったら1回目と同様の動作に戻る。
2.4. 関数
-
char *d_route(FILE *fp1)
-
競技2回目で、デジタルマップを読み込みそれに対応した動きを指令する。
-
超音波センサーで壁を検知するスレッドのための関数。
3.8秒(1マス進む時間)ごとに壁の有無を検知し、壁までの距離および壁の有無の判断をグローバル変数に渡す。
-
白線センサとタッチセンサを監視するスレッドのための関数。
0.1秒ごとにそれぞれのセンサのON/OFFを監視し、その状態をセンサに対応するグローバル変数に渡す。
-
画像処理によりDBに書かれた数字を認識する。0901班のプログラムを引用。
詳細は、MIRS0901-SOFT-0002(MIRS0901 ドキュメント管理台帳)を参照。
-
画像処理により認識された数字を引数で受け取り、次にどの障害物に向かうかの判断を行う。
この関数は左右のどちらに進むかの決定だけを行い、障害物に対応した戻り値をもつ。
その戻り値をもとにmain関数で各障害物攻略用の関数を呼び出す。
-
DBで次がゴールだとわかった場合、直進しながら白線センサでゴールを探す。
前の2つと後ろの1つの計3つの白線センサがONになったら、移動をやめゴール到達のパフォーマンスをする。
3. ソースプログラム
-
作成したソースプログラムを掲載する。
main0905.c