ドキュメント情報

名称

ソフトウェア詳細設計書

MIRS0501-SOFT-0001

番号

 

版 数

最終更新日

作 成

承 認

改 訂 記 事

A01

2005.10.31

伊沢・木村・杉山

伊沢

初版

 


 

l        Contents

1.       はじめに

2.       動作モード

−メインモード

−初期動作モード

−最高速モード

−左折モード

−ポスト探索モード

−判定モード

−ポスト接近モード

−ポスト番号確認

−ポスト獲得モード

−復帰モード

3.       標準機から使用する関数

4.       新たに自分たちで作る関数

5.       デバイスドライバ

6.       標準機より用いるモジュールとモードの相関図

 

l      はじめに

本ドキュメントでは、MIRS0501システムステム基本設計書に規定されたシステムの動作規定、状態遷移を実現する各タスクの開発(コーディング、試験等)に必要な事項を述べる。

 

l      動作モード

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

×

×

×

動作終了後

×

×

×

×

 

 

l      標準機から使用する関数

 

ソースファイル名

関数名

書式

戻り値

説明

行動系

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 より

 

 

l      新たに自分たちで作る関数

 

関数名

書式

戻り値

説明

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)

なし

ポストから外周の白線へ復帰

 

 

l      デバイスドライバ

「白線センサデバイスドライバ」「赤外線センサデバイスドライバ」

「赤外線コード判別デバイスドライバ」「超音波デバイスドライバ」

PWMデバイスドライバ」「ロータリーエンコーダデバイスドライバ」は標準機のものを使用する。

 

l       標準機より用いるモジュールとモードの相関図

 

 

初期動作mode

最高速mode

左折mode

ポスト探索mode

ポスト接近mode

番号確認mode

獲得mode

復帰mode

RT起動

RT停止

RT再起動

移動距離

速度獲得

タイヤ回転角獲得

タイヤ回転角合計獲得

LQR制御前進

LQR制御自転

LQR制御公転

白線センサ

×

超音波距離測定

×

×

×

×

×

×

正対補正

×

×

×

×

×

×

×

赤外線センサ

×

×

×

×

×

×

×