沼津高専 電子制御工学科 |
||||||
|
||||||
改訂記録 |
||||||
版数 |
作成日 |
作成者 |
承認 |
改訂内容 |
||
A01 |
2007.9.18 |
紅林 |
平田 |
初版 |
||
A02 |
2008.2.18 |
紅林 |
平田 |
回転板を回転盤に変更 モジュールという表現を関数に変更 作成プログラムの追加と削除 新規に定義する外部変数・配列の追加 |
1. ソフトウェアの構成
2. 作成プログラム概要
3. 作成プログラム分割
4. グローバル変数
5. 動作モード概要
6. フローチャート
基本的な構成は標準プログラムを元にする。
また標準プログラムの他に【異常走行補正関数】【無限ループ脱出関数】【最短ルート算出関数】【7seg LED制御関数】【回転盤制御関数】を追加、標準プログラムを必要に応じて変更し、MIRS0702のシステムを満たすことを目標とする。
以下に作成するプログラムの概要を示す。また、標準プログラム、標準プログラム変更内容については省略する。
関数名 |
異常走行補正関数 |
書式 |
int abnormal() |
引数 |
駆動系ロータリーエンコーダの値 |
戻り値 |
正常動作で0、異常動作で-1 |
概要 |
エンコーダの値から角速度を算出し、基準となる角速度と比較。 近似であれば正常動作とする。異常であれば補正を行う。 |
関数名 |
最短ルート算出関数1 |
書式 |
int route1() |
引数 |
なし |
戻り値 |
なし |
概要 |
ポスト探索の結果、2つ以上のポストを発見した場合の最短ルートの算出を行う。算出結果は外部配列に出力する。 |
関数名 |
最短ルート算出関数2 |
書式 |
int route2() |
引数 |
なし |
戻り値 |
なし |
概要 |
動作1回目の最後に使用する。 動作1回目で得られたポストの座標から、ポストを番号順に獲得する最短ルートを求める。ルートの情報は外部配列に出力する。 |
関数名 |
最短ルート算出関数3 |
書式 |
int route3() |
引数 |
なし |
戻り値 |
なし |
概要 |
現在の位置情報から次のルートを選択する。 |
関数名 |
最短ルート算出関数4 |
書式 |
int route4() |
引数 |
ポストの距離情報 ポストの角度情報 |
戻り値 |
なし |
概要 |
得られたポスト情報が競技場内の物かどうかの識別する。 |
関数名 |
最短ルート算出関数5 |
書式 |
int route5() |
引数 |
なし |
戻り値 |
なし |
概要 |
例外処理動作を行う。 1つもポストを発見しなかった場合の動作と、選択したポスト情報が偽者(審判等)だった場合の動作を行う。 |
関数名 |
LED制御関数 |
書式 |
int 7seg() |
引数 |
なし |
戻り値 |
なし |
概要 |
実行中の関数に対応する点灯パターンでLEDを点灯する。 |
関数名 |
回転盤制御関数1 |
書式 |
int rot1() |
引数 |
パルスを発生させる秒数、回転方向の信号 |
戻り値 |
なし |
概要 |
回転盤の制御を行う。回転させる角度に応じてパルスを発生させる。主にポスト探索に使用する。 |
関数名 |
回転盤制御関数2 |
書式 |
int rot2() |
引数 |
パルスを発生させる秒数 回転方向の信号 |
戻り値 |
なし |
概要 |
回転盤の制御と同時に超音波を起動させ、回転盤によるポスト探索を行う。 |
関数名 |
ポスト情報選別関数1 |
書式 |
int select_post() |
引数 |
なし |
戻り値 |
なし |
概要 |
周回中に獲得した超音波データから、ポスト情報を選別する。 |
関数名 |
ポスト情報選別関数2 |
書式 |
int select_post2() |
引数 |
なし |
戻り値 |
なし |
概要 |
周回中に獲得した超音波データから、ポスト情報を選別する。ただし、回転直交座標系でポスト探索を行った場合に用いる。 |
関数名 |
main2 |
書式 |
int main2(void) |
引数 |
なし |
戻り値 |
なし |
概要 |
動作2回目のメイン関数。 動作1回目で得られたルート上を移動する。 |
新規に作成する関数は次のファイルに分割して作成する。
ファイル名 |
関数名 |
main.c |
main1 |
main2 |
|
abnormal.c |
abnormal |
escape.c |
escape |
route.c |
route1 |
route2 |
|
7seg.c |
7seg |
rot.c |
rot1 |
rot2 |
新規に作成するグローバル変数(配列)を以下に示す。これらの関数の宣言は全てcontrol.h内で行う。
変数名 |
宣言方法 |
使用用途 |
post_number_code |
int post_number_code[5] |
ポスト番号を発見した順に記録 |
post_dis |
double post_dis[5] |
動作の直線距離の記録 |
post_ang |
double post_ang[5] |
動作の移動角度の記録 |
short_dis[5] |
double short_dis[5] |
スタート地点と各ポストを結ぶ直線の距離情報の記録 |
short_ang[5] |
double short_ang[5] |
スタート地点と各ポストを結ぶ直線の角度情報の記録 |
m_s_dis[5] |
double m_s_dis[5] |
最短ルートの距離情報の記録 |
m_s_ang[5] |
double m_s_ang[5] |
最短ルートの角度情報の記録 |
dis_now |
int dis_now |
今の移動量の距離情報の一時保存 |
ang_now |
int ang_now |
今の移動量の角度情報の一時保存 |
dis_before |
int dis_before |
ひとつ前の移動量の距離情報の一時保存 |
ang_before |
int ang_before |
ひとつ前の移動量の角度情報の一時保存 |
ang_now_1st |
int ang_now_1st |
最初に移動したときの角度情報の記録 |
search_try_count |
int search_try_count |
ポスト探索回数の記録 |
kosuu |
int kosuu |
探索時の超音波情報の個数の記録 |
search_post |
int search_post |
発見したポストの個数の記録 |
angle_now |
int angle_now |
回転盤の現在の角度の記録 |
dis_info[1000] |
double dis_info[1000] |
ポスト探索時の距離情報の保存 |
ang_info[1000] |
double ang_info[1000] |
ポスト探索時の角度情報の保存 |
dis_select[100] |
int dis_select[100] |
発見したポストの距離情報の保存 |
ang_select[100] |
int ang_select[100] |
発見したポストの角度情報の保存 |
dis_approach |
int dis_approach |
ポスト間移動時の距離情報の保存 |
ang_approach |
int ang_approach |
ポスト間移動時の角度情報の保存 |
warning_point |
int warning_point |
例外処理実行の判断 |
以下に分類した動作モードを示す。
1.回転盤ポスト探索モード
1回目の動作開始直後に行うポスト探索。
回転盤を180度回転させ、回転盤に取り付けてある超音波センサによりポストを探索する。
ポストを発見した場合、その距離と移動角を記録する。
探索エリア内に少なくとも1つポストが発見できた場合、終了する。
2.ポスト間移動モード
目標ポストへ接近する。このとき、回転盤に取り付けてある超音波センサをMIRS後方へ向ける。
「MIRS前方の超音波センサの値+MIRS後方の超音波センサの値+MIRS本体の直径=移動する距離」を満たすように動作する。
満たさない場合(ルートから外れた等)は、フィードバックさせ補正する。
目標ポストに正対補正を行い、終了する。
3.ポスト周回モード
その場で右に90度回転し、ポストを周回、MIRS側面の赤外線センサにより信号を探索する。
周回中MIRS側面の超音波センサを起動させポスト探索を同時に行う。ポストを発見した場合、その距離と移動角を記録する。
1周し、元の場所に戻ったら終了。
4.ポスト番号判別モード
MIRS側面の赤外線センサでポストからの信号を受信、判別、記録する。
5.ポスト獲得モード
その場で左に90度回転し、正対補正を行う。その後タッチセンサが反応するまで前進、前面の赤外線センサでポスト獲得の判断をする。
ポスト獲得後、元の位置まで後進し、右に90度回転、終了する。
6.ルート計算モード
動作中に得たポストの情報を元に、競技開始点(または任意のポスト)と各ポストとの最短距離と移動角を求め、外部ファイルに格納する。
7.ポストデータ記憶モード
動作1回目で得たポストの位置データ、番号を外部ファイルに保存する。
正常に保存し終えたら終了。
8.ポストデータ読み取りモード
ポストデータ記憶モードで記録したデータを読み取り、対応する変数に格納する。
格納し終えたら終了。
ここでは 5.動作モードの概要 で述べたモードについてフローチャートを示す。
1.回転盤ポスト探索モード
2.ポスト間移動モード
3.ポスト周回モード
関連文書 |
MIRS0702 システム提案書(MIRS0702-DSGN-0001)
MIRS0702 技術調査書(MIRS0702-TECH-0001)