沼津高専 電子制御工学科 |
||||||
|
||||||
改訂記録 |
||||||
版数 |
作成日 |
作成者 |
承認 |
改訂内容 |
||
A01 |
2005.2.10 |
蛭ヶ谷 |
蛭ヶ谷 |
初版 |
本ドキュメントは、MIRS0502で使用するプログラムの関数について、その使用法および機能の一覧を示すものである。
ソースファイル名 |
関数名 |
書式 |
戻り値 |
説明 |
main1.c |
main |
int main(void); |
0 |
メイン(試技1回目) |
main2.c |
main |
int main(void); |
0 |
メイン(試技2回目) |
initialize.c |
initialize |
int initialize(void); |
0 |
初期化 |
post_get.c |
post_get |
int post_get(int); |
0 |
ポスト周回及び獲得 |
post_search.c |
post_search |
int post_search(int); |
0 |
ポスト探索 |
move_position.c |
move_position |
int move_positon(void) |
0 or 999 |
ポスト位置移動 |
post_approach.c |
post_approach |
int post_approach(void); |
0 or 9999 |
ポスト接近 |
functions.c |
irs_code_get |
int irs_code_get(int); |
赤外線コード or 0 |
赤外線のコード判別 |
uss_get |
int uss_get(int); |
測定データ |
超音波による距離測定 |
|
correct_direction1 |
int correct_direction1(void); |
0 |
ポスト接近前の角度補正 |
|
correct_direction2 |
int correct_direction2(void); |
0 |
ポスト接近後の角度補正 |
|
correct_distance |
int correct_distance(void); |
0 |
ポスト接近時の距離補正 |
|
course_search.c |
course_search |
int course_search(void); |
0 |
ポスト探索コースの探索 |
course_return.c |
course_return |
int course_return(void); |
0 |
ポスト探索コースへの復帰 |
data_w.c |
data_w |
int data_w() |
0 |
距離・ポスト番号・方向のデータを書き込む |
data_r.c |
data_r |
int data_r() |
0 |
データを読み出す |
その他の駆動系関数、およびスレッド系関数の一覧は、標準機の関数リファレンス
http://www2.denshi.numazu-ct.ac.jp/mirsdoc2/mirsstnd/manu/num0002a/std-soft-reference.html
を参照せよ。
int main(void)
MIRS0503のメイン関数。競技1,2回目用で区別される。
int initialize(void)
プログラムで使用する変数の初期化とFIFOやスレッドの生成を行っている。これはmain()を実行したときに一番初めに実行される関数である。
int post_get(int post_count)
これはpostの獲得動作を行う関数であり、引数のpost_countには何個目のポストかの情報が入る。この関数はpostに対して正対した状態から始まる。まず90度回転し、その後ポスト周回を始める。周回中に赤外線を検出したらコード判別を行い、獲得動作に移る。獲得後は、周回開始位置まで残りを周回する。もとの位置にもどってきたところでこの関数を抜ける。
int post_search(void)
これはポストの探索をする関数であり、決められたコースに沿ってMIRSを走らせながら、左右の超音波センサを使ってポストを認識する。見つけたポストまでの距離が一番短い方から獲得しに行くように、距離の短い方から配列に代入されるように距離を並び替え、外部配列に代入する。
int post_approach(int post_count)
これはポストへアプローチするための関数である。ポストまでの距離を超音波センサで測り、ポストに正対した後、ポストへ接近する。その際の補正はcorrect_direction1()(遠での補正)やcorrect_direction2()(近くでの補正)で行う。ポストから10cm離れたところで正対してこの関数を抜ける。
int irs_code_get(int dumy)
これは赤外線センサのコードを読み取る関数である。引数であるdumyには使用する赤外線センサの番号が入る。戻り値として赤外線センサのコードが1〜6で返る。何もないときは0が返る。
int uss_get(int uss_no)
これは超音波センサによる距離測定をする関数である。引数のuss_noには使用する超音波センサの番号が入る。戻り値は測定データが[mm]で返る。反応しないときは-999である。
int correct_direction1(void) or intcorrect_direction2(void)
角度誤差を補正する関数。ポストまでの距離が二つとも同じになるときがポストの中心を向いているときであるから、前方の二つの超音波センサの測定データの差から左右の角度誤差の補正を行う。
int course_search(void)
競技動作に関係する関数の中では、一番最初に呼ばれる関数。MIRSを左右に移動させつつ、ポストが無いコースを探し、そこまで移動し最終的な移動距離を保存する。左右それぞれ最大1mまで移動する。
int course_return(void)
これはポスト周回後のコース復帰移動の関数である。復帰後、コースに並行になるように補正し、この関数を抜ける。
int move_position(int post_count)
これは、post_search()のあとに呼ばれる関数である。一番近いポストのコース上の位置まで移動する。見つけたポストの個数に応じてこの動作を繰り返す。
int data_w()
これは、2回目の競技に備えて、ポストデータを保存するための関数。ポストの番号順になるように、ポストまでの距離、ポスト番号、ポストのある方向(右左)がそれぞれ組になって保存される。
int move_position()
これは、2回目の競技のときに、駆動系では一番初めに呼び出される関数である。data_w()で保存されたデータを呼び出して、ポスト番号順にポストを獲得しに行く。
5. カメラ用デバイスドライバ
結局一度も試せなかったが、カメラ用のデバイスドライバを作成したので、公開します。
以下のファイルをダウンロードし、解凍してください。ソースファイルには、各モジュールのテストプログラム(choice)もあります。
makeの実行手順
1. はじめにmake all_oを実行
2. 次にmake。main1が作成される。
3. 次にmake main2。main2が作成される。
4. <補足>make choiceを実行すると、choiceが作成され、標準機のsystem_check()のようにモジュール毎にプログラムを実行できる。