沼津高専 電子制御工学科 | ||||||
|
||||||
改訂記録 | ||||||
---|---|---|---|---|---|---|
版数 | 作成日 | 作成者 | 承認 | 改訂内容 | ||
A01 | 2004.2.10 |
前田 |
前田 | 初版 |
table.1に行動制御系関数の一覧を示す(標準機と重なる部分も多々あるが、一応すべて示す)。
ソースファイル名 |
関数名 |
書式 |
戻り値 |
説明 |
---|---|---|---|---|
control1.c |
main |
int main(void); |
0 |
メイン(試技1回目) |
control2.c |
main |
int main(void); |
0 |
メイン(試技2回目) |
Post_data_NUM.c |
Post_data_NUM |
int Post_data_NUM(void); |
0 |
ポストデータ変換 |
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 |
ポスト探索 |
post_approach.c |
post_approach |
int post_approach(void); |
0 |
ポスト接近 |
post_find.c |
post_find | char* post_find(char*, int, int, int); | ポストが左右どちらにあるか |
ポスト発見 |
post_side.c |
post_side | int post_side(char*, char*); | 0 |
発見したポストに正対 |
post_through.c |
post_through | int post_through(char*, char*); | 0 |
ポスト素通り |
postnum_ref.c |
postnum_ref | int postnum_ref(int, int*, char*); | 0 |
指定したポスト情報獲得 |
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 |
ポスト接近時の距離補正 |
|
correct_vertical.c |
correct_vertical |
int correct_vertical(void); |
0 |
白線を利用した垂直補正 |
course_search.c |
course_search | int course_search(void); |
0 |
ポスト探索コースの探索 |
course_return.c |
course_return | int course_return(void); |
0 |
ポスト探索コースへの復帰 |
normal.c |
normal | int normal(void); |
0 |
正規ポスト獲得モード |
post_void.c |
post_void | int post_void(void); |
0 |
ポスト衝突時回避モード |
randam.c |
randam | int randam(void); |
0 |
ランダムポスト獲得モード(未完成) |
table.2に駆動系関数の一覧を示す。
ソースファイル名 |
関数名 |
書式 |
戻り値 |
説明 |
---|---|---|---|---|
arm.c |
arm_write | int arm_write(cmd); |
0 |
アーム動作 |
その他の駆動系関数、およびスレッド系関数の一覧は、標準機の関数リファレンス
http://www2.denshi.numazu-ct.ac.jp/mirsdoc2/mirsstnd/manu/num0002a/std-soft-reference.html
を参照せよ。
int main(void)
MIRS0402のメイン関数。
int Post_data_NUM(void)
ポストの取得したデータを、競技上の反対側から見たときのポストデータに変換する。
int initialize(void)
プログラムで使用する変数の初期化とFIFOやスレッドの生成を行っている。これはmain()を実行したときに一番初めに実行される関数である。
int post_get(int target_post)
これはpostの獲得動作を行う関数であり、引数のtarget_postには次にとるべきポストの番号が入る。この関数はpostに対して正対した状態から始まる。まず90度回転し、その後ポスト周回を始める。周回中に赤外線を検出したらコード判別を行い、target_postと同じなら獲得動作に移る。獲得動作については、まずアームでのポスト獲得を試み、獲得ができなかった時は体当りによるポスト獲得を行う。獲得後は、周回開始位置まで残りを周回する。もとの位置にもどってきたところでこの関数を抜ける。1回目の試技の場合、ポストのデータをファイルに出力する。なお、引数のポスト番号に9を与えると、ポストを強制獲得する。
int post_search(void)
これはポストの探索をする関数であり、決められたコースに沿ってMIRSを走らせながら、左右の超音波センサを使ってポストを認識し、正対、(ポスト番号の)獲得へと動作が推移していく。一番若い番号のポスト(初めは1番ポスト)であればその場で獲得する。獲得できなかったポストについては、normal()によって獲得する。
int post_approach(void)
これはポストへアプローチするための関数である。ポストまでの距離を超音波センサで測り、ポストに正対した後、ポストへ接近する。その際の補正はcorrect_direction2()やcorrect_distance()で行う。ポストから10cm離れたところで正対してこの関数を抜ける。
char* post_find(char* fb, int lmask, int rmask, int past_distance)
post_search(), normal()内で使用される関数。左右の超音波センサでポストを探し、発見したところでこの関数を抜ける。fbという文字列引数には"fore"または"back"といった文字列が入り、MIRSの前進・後進を指定する。戻り値には"left"または"right"の文字列が入り、発見したポストがどちら側にあるかを返している。lmask, rmaskはそれぞれ左、右の超音波センサをある一定期間中しようするかどうかを指定する引数で、1は使用、0は不使用である(ポストの二度見を防ぐため)。past_distance[mm]でその期間(MIRSが走る距離)を指定する。
int post_side(char* fb, char* side)
post_search(), normal()内で使用され、post_find()に引き続いて呼ばれる関数。発見したポストに垂直になるようにMIRSが移動し、ポストの方に90度回転して正対する。fbという文字列引数には"fore"または"back"といった文字列が、sideという文字列引数には"left"または"right"といった文字列が入り、それぞれMIRSが前進すべきか後進すべきか、ポストが左右どちらにあるか、を指定している。
int post_through(char* fb, char* side)
normal()内で使用される関数。指定したポストを素通りする。fbという文字列引数には"fore"または"back"といった文字列が、sideという文字列引数には"left"または"right"といった文字列が入り、それぞれMIRSが前進すべきか後進すべきか、ポストが左右どちらにあるか、を指定している。
int postnum_ref(int yval, int* postno, char* side)
normal()内で使用される関数。指定した座標値(yval;手前から見ていくつめのポストか)のポストの、ポスト番号と左右どちらにあるかを、それぞれポインタ変数で返す(戻り値とみなせる)。これらの情報はpost_search()で獲得したポストの情報に基づくものである。
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 correct_distance(void)
post_approach()内でポストに近づく時、前方の超音波を使用し、残り距離を補正する関数。
int correct_vertical(void)
角度誤差を補正する関数。競技場上の白線を利用して、競技場に対してMIRSを垂直に補正する。この関数はMIRSがいずれかの白線センサで白線を感知している状態で呼ばれる。例えば左後方のセンサが白線を感知している場合、右タイヤを白線がくるまでバック→左タイヤを白線を見失うまで進める→右タイヤも白線を見失うまで進める、といった流れで補正動作を行う。
int course_search(void)
競技動作に関係する関数の中では、一番最初に呼ばれる関数。MIRSを左右に移動させつつ、ポストが無いコースを探す。左右それぞれ30cmまで移動する。
int course_return(void)
これはポスト周回後のコース復帰移動の関数である。復帰後、正面を向いて、この関数を抜ける。
int normal(void)
正規ポスト獲得モード関数(MIRS0402ソフトウェア詳細設計書
http://www2.denshi.numazu-ct.ac.jp/mirsdoc2/mirs0402/soft/num0001a/fd_soft.html
を参照せよ)。
int post_void(void)
ポスト探索中、コース上にポストがあって、ポストに衝突してしまった場合、このポストを無条件で獲得した後、ポストを避けるプログラム。該当する関数内に組み込まれる。
int randam(void)
動作中、何らかの事情により、予期せぬ場面でMIRSが白線を踏んでしまったら、このモードに移行する。競技上を適当に走り回って、ポストに衝突すればそのポストを獲得しに行き、白線を踏めば、再帰的に呼び出される。該当する関数内に組み込まれる。
int arm_write(cmd)
アームを駆動させる。デバイスファイルを使わず、I/O Portに直接データを書き込む。