名称 |
ソフトウェア詳細設計書MIRS0501-SOFT-0001 |
番号 |
版 数 |
最終更新日 |
作 成 |
承 認 |
改 訂 記 事 |
A01 |
2005.10.31 |
伊沢・木村・杉山 |
伊沢 |
初版 |
l
Contents
1.
はじめに
2.
動作モード
−メインモード
−初期動作モード
−最高速モード
−左折モード
−ポスト探索モード
−判定モード
−ポスト接近モード
−ポスト番号確認
−ポスト獲得モード
−復帰モード
3.
標準機から使用する関数
4.
新たに自分たちで作る関数
5.
デバイスドライバ
6.
標準機より用いるモジュールとモードの相関図
本ドキュメントでは、MIRS0501システムステム基本設計書に規定されたシステムの動作規定、状態遷移を実現する各タスクの開発(コーディング、試験等)に必要な事項を述べる。
u 初期動作mode
プログラムが起動してから最初に行うモード。ポスト情報が書き込まれたファイルがない場合には競技1回目として開始し、ある場合には2回目としてファイルからポスト情報を読み込む。(競技中ポスト情報を取得した際自動でファイルを作成し、ポスト情報を書き込む)
u 最高速mode
外周移動時にポスト探索を行わない場合に使用。ポスト探索を行わない、向かい合う2辺で用いる。並列に3つの関数を実行する。1つ目は、直進するもの。コーナー突入時に慣性により、MIRSが白線からはみ出てしまわないように、3/4進んだら半分に減速。さらに3/4進んだら、さらに半分に減速を行うようにする。二つ目は、WS3,4をチェックして、白線からMIRSがはみでるようなら、はみ出ないように補正を加える(MIRSが競技場から落ちないようにするため)。3つ目は、WS1をチェックして、左折するべき場所かどうかを判断して、左折するべきなら、左折modeに移行する。
u 左折mode
外周移動時に角を曲がるときに使用。角を曲がった回数を覚えておき、それが偶数なら最高速modeへ、奇数ならポスト探索modeへ移行する。
u ポスト探索mode
外周移動時にポスト探索を行う場合に使用。ライントレースと角の探知は最高速modeと同様である。ただし、直進中はポストの探知と判別をおこなう。
判別ではまずこのポスト番号を知っているかを確認し、知らないならポスト接近modeへ、知っているならば次に取るべきポストかどうかを確認する。取るべきポストでない場合にはポスト探索modeへ戻り、取るべきならばポスト接近modeへ移る。
u 判定 mode
ポスト番号を知っているかを確認し、知らないならポスト接近modeへ、知っているならば次に取るべきポストかどうかを確認する。取るべきポストでない場合にはポスト探索modeへ戻り、取るべきならばポスト接近modeへ移る。次のモードへ移るのは変数の値によって分ける。
u ポスト接近mode
ポスト接近時に使用。まずポストに対して正面を向きポストに向かって直進する。
ポストから約20cm手前で停止し、ポスト番号を知っているならポスト獲得modeへ、知らないならポスト番号確認modeへ移る。
u ポスト番号確認mode
ポスト番号確認時に使用。ポストに向かってゆっくりと直進し、ミルス正面のタッチセンサが反応したら停止する。白線センサにより、ポスト番号を確認する。このときポスト情報をファイルに書き込む。その後約20cm後退し、これが取るべきポストならばポスト獲得modeへ、そうでなければ180°回転し、復帰modeへ移る。
u 獲得mode
ポスト獲得時に使用。まず90°回転し、ポストに対して、円の動きを行う。このとき赤外線センサでスイッチ部を探知したら、アームを出してポストを獲得する。ポスト獲得を正常に終え、回り始めの位置まで戻ったら、ポストに対して後ろを向き復帰モードへ移行する。
u 復帰mode
ポスト接近後、外周移動に戻る際に使用。
l 動作モード詳細(フローチャート)
Ø メインモード
Ø 初期動作モード
Ø 最高速モード
Ø 左折モード
Ø ポスト探索モード
Ø 判定モード
Ø ポスト接近モード
Ø ポスト獲得モード
Ø 復帰モード
フローチャート内で白線センサ、超音波センサの判定を行っているので、その位置を次の外観図に示す。
Ø メインモード void
main(void)
Ø 初期動作モード void
start(void)
※velocity : 最高速modeで用いる変数である。角から走り始める場合と初期位置から走り始める場合では走るべき距離が違うため、
あらかじめMIRSに進んでいるように認識させる必要がある。この変数は、自分が現在初期位置にいるかどうかを判断するときに用いる。
Ø 最高速モード void
Vmax(void)
※encoder:最高速modeではミルスが外周の一辺を走った距離を表す変数として使用する。
※velocity : 最高速modeで用いる変数である。角から走り始める場合と初期位置から走り始める場合では走るべき距離が違うため、あらかじめMIRS
に進んでいるように認識させる必要がある。この変数は、自分が現在初期位置にいるかどうかを判断するときに用いる。
Ø 左折モード void
left(void)
※corner:曲がった角の回数を表す変数。フィールドを一周したら値を0にする。
※Pzyunvan:ポストの順番を記録する変数。
Ø ポスト探索モード void
search(void)
Ø 判定モード void
judge(void)
Ø ポスト接近モード void
approach(void)
Ø ポスト番号確認モード void
identify(void)
Ø ポスト獲得モード void
get(void)
※encoder:獲得modeではポストの周りを移動した距離を表す変数として使用する。
Ø 復帰モード void
leave(void)
l モード遷移表
|
初期動作mode |
最高速mode |
左折mode |
ポスト探索mode |
ポスト接近mode |
番号確認mode |
獲得mode |
復帰mode |
初期動作mode |
× |
動作後 |
× |
× |
× |
× |
× |
× |
最高速mode |
× |
× |
白線探知後 |
× |
× |
× |
× |
× |
左折mode |
× |
角を曲がった回数が偶数の場合 |
× |
角を曲がった回数が奇数の場合 |
× |
× |
× |
× |
ポスト探索mode |
× |
× |
× |
× |
発見したポストの番号が取るべき番号か又は番号がわからない場合。 |
× |
× |
× |
ポスト接近mode |
× |
× |
× |
× |
× |
接近したポストの番号が判らない場合 |
接近したポストが取るべき番号の場合 |
× |
番号確認mode |
× |
× |
× |
× |
× |
× |
確認した番号が取るべき番号の場合 |
確認した番号が取るべき番号でない場合 |
獲得mode |
× |
× |
× |
× |
× |
ポストを獲得できなかった場合、動作終了後 |
× |
ポストを獲得できた場合、動作終了後 |
復帰mode |
× |
× |
× |
動作終了後 |
× |
× |
× |
× |
ソースファイル名 |
関数名 |
書式 |
戻り値 |
説明 |
行動系 |
||||
functions.c |
uss_get |
int uss_get(int); |
測定データ |
超音波による距離測定 |
correct_distance |
int correct_distance(void); |
0 |
ポスト接近時の距離補正 |
|
correct_direction1 |
int correct_direction1(void); |
0 |
ポスト接近前の角度補正 |
|
correct_direction2 |
int correct_direction2(void); |
0 |
ポスト補正後の角度補正 |
|
post_approach.c |
post_approach |
int post_approach(int); |
0 |
ポスト接近 |
both.c |
pwm_enco_start |
void pwm_enco_start(int); |
なし |
RTタスクスレッドを開始 |
pwm_enco_stop |
void pwm_enco_stop(void); |
なし |
RTタスクスレッドを停止 |
|
pwm_enco_restart |
void pwm_enco_restart(void); |
なし |
RTタスクスレッドを再開 |
|
駆動系 |
||||
encoder.c |
encoder_data |
void encoder_data(float *lm, float *rm, float *lv, float *rv, int *br); |
なし |
100[ms]ごとの左右のタイヤの回転距離,速度を返す |
encoder2.c |
encoder_data2 |
void encoder_data2(float *la, float *ra,
int *br); |
なし |
100[ms]ごとの左右のタイヤの回転距離,速度を返す |
encoder3.c |
encoder_data3 |
void encoder_data3(float *la, float *ra,
int *br); |
なし |
左右のタイヤの回転角度の合計を返す |
pwm.c |
pwm_both_data |
void pwm_both_data(int, int); |
なし |
Duty比指定移動 |
pwm_lqr_straight |
void pwm_lqr_straight(int, int); |
なし |
LQR制御による直進移動 |
|
pwm_lqr_rotate |
void pwm_lqr_rotate(int, int); |
なし |
LQR制御によるその場回転 |
|
pwm_lqr_circle |
void pwm_lqr_circle(int, int, int); |
なし |
LQR制御によるポスト周回 |
|
functions.c |
lqr_straight |
int pwm_lqr_straight(int, int); |
0 |
pwm_lqr_straightのマクロ |
lqr_rotate |
int pwm_lqr_rotate(int, int); |
0 |
pwm_lqr_rotateのマクロ |
|
lqr_circle |
int pwm_lqr_circle(int, int, int); |
0 |
pwm_lqr_circleのマクロ |
|
スレッド系 |
||||
thread_func.c |
irs_ts_ws |
void *irs_ts_ws(void *t); |
なし |
赤外線,タッチセンサ,白線センサ読み取りスレッド |
|
encoder |
void *encoder(void *t); |
なし |
エンコーダデータ読み取りスレッド |
|
uss_read |
void *uss_read(void *t); |
なし |
超音波センサ測定スレッド |
標準動作プログラム関数レファレンス
http://www2.denshi.numazu-ct.ac.jp/mirsdoc2/mirsstnd/manu/num0002a/std-soft-reference.html より
関数名 |
書式 |
戻り値 |
説明 |
main |
void main(void) |
なし |
メイン関数 |
start |
void start(void) |
なし |
初期動作、初期値を設定 |
Vmax |
void Vmax(void) |
なし |
最高速走行 |
left |
void left(void) |
なし |
左折 |
search |
void search(void) |
なし |
ポスト探索 |
judge |
void judge(void) |
なし |
ポストへ行くか、探索を続行するか判定 |
approach |
void approach(void) |
なし |
ポストへ接近 |
identify |
void identify(void) |
なし |
ポスト番号を確認 |
get |
void get(void) |
なし |
ポスト獲得動作 |
leave |
void leave(void) |
なし |
ポストから外周の白線へ復帰 |
「白線センサデバイスドライバ」「赤外線センサデバイスドライバ」
「赤外線コード判別デバイスドライバ」「超音波デバイスドライバ」
「PWMデバイスドライバ」「ロータリーエンコーダデバイスドライバ」は標準機のものを使用する。
l 標準機より用いるモジュールとモードの相関図
|
初期動作mode |
最高速mode |
左折mode |
ポスト探索mode |
ポスト接近mode |
番号確認mode |
獲得mode |
復帰mode |
RT起動 |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
RT停止 |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
RT再起動 |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
移動距離 |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
速度獲得 |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
タイヤ回転角獲得 |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
タイヤ回転角合計獲得 |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
LQR制御前進 |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
LQR制御自転 |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
LQR制御公転 |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
白線センサ |
○ |
○ |
○ |
○ |
× |
○ |
○ |
○ |
超音波距離測定 |
× |
× |
× |
○ |
○ |
× |
× |
× |
正対補正 |
× |
× |
× |
× |
○ |
× |
× |
× |
赤外線センサ |
× |
× |
× |
× |
× |
× |
○ |
× |