名称 |
MIRS0803 関数リファレンス |
||||
番号 |
MIRS0803-SOFT-0003 |
||||
版 数 |
最終更新日 |
作 成 |
承 認 |
改 訂 記 事 |
|
A01 |
2008.2.23 |
鈴木 |
鈴木 |
初版 |
|
|
|
|
|
|
|
1.
関数リファレンス
以下にMIRS標準機から追加した関数とその詳しい動作内容を示す
int search_error_check1( r_value)
control_test内に追加した関数
ポストが発見できなかったら(ussの値が9999だったら)r_valueにその数をカウントしていて、r_valueの数値をチェックし、
15以上になったら、中心に戻る。
int search_error_check2( )
control_test内に追加した関数。
前回のpost_searchの結果と今回のpost_searchの結果を比較し、ポストの位置があまりにも異なっていた場合、
(角度誤差30度以上か距離誤差300以上)post_searchをやり直す。
誤ったcorrect_centerを行うのを防ぐ。
int post_sort( )
post_search内に追加した関数
post_searchで取得したpost.dis[] post.ang[]を角度順にsortする
int post_select(int center_count)
main 内に追加した関数
center_countの数を引数にして、近い方からcenter_count 番目のポストの(post.dis,post.ang)配列の添え字を返す。
つまり、ポストを近いほうから取っていく。
これは2回目の競技のときにも採用しており、currect_centerで角度修正を失敗していたとしても、同じポストに向かう可能性を減らす。
int post_select2( )
main 内に追加した関数
post_searchで取得した情報(距離、角度)の配列を距離の近い順にsortして、近い方から2つのポストの配列の添え字を返す。
遠いポストを対象にcorrect_centerを行ってしまい、補正ミスを起こすことを防ぐ。(遠いポストは位置の誤差が大きい)
int correct_direction3( target_post)
correct_direction1とcorrectdirection2の間の距離の時に行う補正。
correct_direction1, 2, 3 による3段の補正を行っている。
動作は2つの関数と同様であるが、左右の補正量と条件は異なる。
ポストに近づくにつれ補正量は小さく、条件が厳しくなっている。
また、ポストの距離を測る際、3回uss_getを行い、平均を取ることで誤差を減らしている。
角度の補正を行ったら、その分の補正量をpost.angに加えている。
そのため、大きな角度補正をおこなっても中心に帰る際、誤差が小さくてすむ。
int post_get(int target_post)
target_postには次に取るポストの配列の添え字が入る。
タッチセンサーが動作するまで前進し、タッチセンサーがonになったら白線センサーでポスト番号を読み取る。
その後、ギャラクティカドーナツ(GD)を降ろして、絞めて、少し下がり、ポストを獲得。緩めて、GDを戻す。
タッチセンサーをを上下2つ付け、MIRSがポストに接触した際に獲得した場合はGDを動作させないようにしている。
int arm_start( )
ISAパスのアドレスH’160’に制御信号を送ることでGDを動作させる。詳しくはエレクトロニクスのドキュメント参照