沼津高専 電子制御工学科 | ||||||
| ||||||
改訂記録 | ||||||
---|---|---|---|---|---|---|
版数 | 作成日 | 作成者 | 承認 | 改訂内容 | ||
A01 | 2009.2.13 | 浦田 | 浦田 | 初版 |
本ドキュメントは、MIRS0804 ソフトウェア詳細設計書(MIRS0804-SOFT-0001)を元に作成したプログラムで使用する関数について取りまとめたドキュメントである。
なお、本ドキュメントに記載する関数は、MIRSSTND 標準プログラム(Ver.2.1)(MIRSSTND-SOFT-0003)より変更のあったものに限る。したがって、標準機と同様の関数については、MIRSSNTD 標準動作プログラム関数レファレンス(MIRSSTND-SOFT-0002)を参照のこと。
table.1に、標準プログラムより変更のあるヘッダファイルの一覧を示す。
ファイル名 | 変更点 |
---|---|
control.h | define文・グローバル変数・post構造体メンバの追加 |
func_exturn.h | 新しく定義した関数のextern宣言の追加 |
control.h
control.hには、以下のdefine文・グローバル変数・post構造体メンバを追加した。
名称 | 値 | 書式 | 説明 |
---|---|---|---|
POST_NUM | 2→5 | #define POST_NUM 5 | 総ポスト数 |
USS_MAX | 1500→1850 | #define USS_MAX 1850 | 最大計測可能距離 |
USS_MIN | 300→280 | #define USS_MIN 280 | 最小計測可能距離 |
MCENTER_USS3_DIS | 138→35 | #define MCENTER_USS3_DIS 35 | MIRS中心からUSS3までの距離 |
MCENTER_USS12_DIS | 120→75 | #define MCENTER_USS12_DIS 75 | MIRS中心からUSS1,2までの距離 |
USS12_DIFF | 0→-23 | #define USS12_DIFF -23 | USS1と2の誤差 |
AROUND_ANG | 360-10→360 | #define AROUND_ANG 360 | ポスト一周分のアングル |
STADIUM_DIS | 1340 | #define STADIUM_DIS 1340 | 競技場中心線上での競技場中央からポスト中心までの最大距離: 1800(競技場の1辺/2)-450(競技場外周からポストまでの距離)-10(ポスト半径)[mm] MIRS2007 競技規定(MIRS07SF-CURR-0001)準拠 |
POST_TO_POST | 450 | #define POST_TO_POST 450 | ポスト間の最低距離 MIRS2007 競技規定(MIRS07SF-CURR-0001)準拠 |
名称 | 書式 | 利用される関数 | 説明 |
---|---|---|---|
trust_level | int trust_level[POST_NUM+1] | get_num(functions.c) | get_numにより取得したポスト番号の信頼度 |
table.4に標準プログラムより変更のある関数の一覧を、table.5に追加する関数の一覧を示す。
ソースファイル名 | 関数名 | 書式 | 戻り値 | 説明 |
---|---|---|---|---|
control_test.c | main | int main(void); | 0 | メイン関数 |
post_get.c | post_get | int post_get(int); | 0 | ポスト獲得 |
post_check.c | post_check | void post_check(int); | 0 | ポスト確認 |
post_approach.c | post_approach | int post_approach(int); | 0 | ポスト接近 |
functions.c | correct_direction1 | int correct_direction1(void); | 0 | ポスト接近前の角度補正 |
irs_code_get (削除) | int irs_code_get(int); | 赤外線コード or 0 | 赤外線のコード判別:必要がないため削除 |
ソースファイル名 | 関数名 | 書式 | 戻り値 | 説明 |
---|---|---|---|---|
post_search_0.c | post_search_0 | int post_search_0(int); | 0 | 開始位置でのポスト探索 |
functions.c (既存) | get_num | int get_num(void); | ポストのラインの数 | ポストの黒色ライン読み取り |
change | int change(void); | 0 | ポスト位置データの座標変換 | |
arm_move | int arm_move(void); | 0 | アーム動作 | |
judg | int judg(int); | 0 | 有効範囲内のポストか否かの判定 |
変更、追加のある関数の詳細を、以下に記述する。
int post_get(int target_post)
アームを使用してポストを獲得する為に大幅の改良を加えた。
関数が始まる位置は標準機と同様である。なお、アームを動作させるタイミングでは、arm_moveを呼出している。
void post_check(int center_count)
center_countが0(post_search_0の実行後)の場合に、ポスト再確認のための回転を逆向きに行うように変更。対象に遠回りせずに向き合えるようにした。
int post_approach(int target_code)
標準機ではポストの角度(post.ang)を+180度〜-180度の間で計算している。センサ取り付け位置が逆になったため、角度に180度を加算して計算するように修正。
また、MIRS0804は周回動作はせずにアームによってポストを獲得するため、ポスト正対後の停止位置をアーム展開の邪魔にならないよう調整した。
int correct_direction1(void)
動作試験の正対動作時に、向き直る角度が足りないことが多かったため、片方のセンサが完全にポストから外れている場合(9999を返した場合)の移動量を増やした。
int irs_code_get(int dumy)
赤外線センサは使用しないため、削除。
int post_search_0(int center_count)
競技開始位置からポスト探索を行う関数。center_countが0のとき(競技場中心に移動前)に実行される。まず、超音波センサを使いながら左に180度回転し、その後180度右回転して正面に向き直る。右回転の際、超音波センサは使用しない。ポストを発見した場合には、そのデータをpost構造体に入れる。
int get_num(void)
ポスト獲得後、ポストから300[mm]離れた地点でpost_getより呼出される。
この関数は、白線センサタワー(製造時仕様書(MIRS0804-MECH-000)参照)を使用してポスト番号を取得する。
以下の手順でポストへアプローチする。
ポスト番号識別の手順
get_numでは、以下の手順でポスト番号の識別を行う。なお、白線センサの番号は、白線センサタワーの上に取り付けられているものから順にws[3]→ws[2]→ws[1]→ws[0]として扱っている。
fig.1 白線センサの番号とポスト番号
1でポスト番号を獲得できた場合、この番号の信頼度をtrust_level1とする。同様に、手順2,3でポスト番号を獲得した場合は、trust_level2,3とする。信頼度はtrust_level1>2>3の順で高い。
ただし、白線センサに反応がない場合、白線センサはすべて1を返す(黒と判断する)ため、5番は常にtrust_level3となる。
獲得したポスト番号が以前獲得したものと重複した場合、trust_levelの高いものを正しいと判断し、該当ポストの番号には未取得のものを割り当てる。これで割り当てられた番号の信頼度はtrust_level3とする。
int arm_move(void)
get_numから呼び出される。デバイスドライバを通じてPICへ信号を送り、アームを動作させる。アームの動作はPICが制御しているため、異なる動作を行う場合でも同様の信号を送信するのみである。
ハンドシェアリング機能はついているが、現在例外動作を組み込んでいないため、PICから反応がない場合は反応を待ち続ける仕様である。
int change(void)
post_search_0で探索を行ったときに、ポストの判定、post構造体への書き込み等は標準機のものを使用しているため、得られたデータは全て「MIRSが競技場中央で右回転を行い」取得したものとして記録される。それを、三角関数を用いて正しいデータに直すための関数。
int judg(int target_post)
取得したポストデータが正しいものかどうかを判断する関数。競技場の範囲、競技場縁からポストまでの最小距離等、規定を基にして有効なポストであるか否かを決める。発見しても場外と思われる対象のデータは、post構造体から削除される。
名称 | ファイル名 (ファイル容量) | download |
---|---|---|
MIRS0804プログラムパッケージ (contorlディレクトリのみ) | mirs_std_v2.1_0804.zip (64,136 byte) | ■ |
関連文書 |