沼津高専 電子制御工学科

 

詳細設計書(S)

 

MIRS0502-SOFT-0001

改訂記録

版数

作成日

作成者

承認

改訂内容

A08

2005.10.20

田中

天野

初版

B08

2006.2.13

田中

天野

フローチャートの訂正

 

1.はじめに

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

2.概要

MIRS0502 ソフトウェアは、RT-Linux上で動作するプログラム群で構成される。プログラムはC言語でかかれ、Linux の標準の API とともに、行動モードに対応したプログラム、一つの機能を複数のプログラム群で提供する機能モジュール、および、RTタスク、ドライバと、補助関数と独自に定義したヘッダファイルから構成される。

3.動作モード

 

1.中央移動モード      center_first

スタート位置から競技場中央まで移動するモード(戻り値0)。その際、前方の超音波センサを用いて、競技場中央までの間にポストを発見したら、その場で停止してポスト接近モードに移行する(戻り値1)。

 

2.ポスト接近モード   post_approach_custom

前方の超音波センサを用いて、正面方向にあるポストに正対し、ポストから規定の距離まで前進し停止する。その後ポストに対して正対補正をする。(標準のpost_approachを改造する)

 

3.基準点設定モード   set_datum_point

基準ポストを周回して、左側面にあるIRSの反応のあるところ(赤外線発信部)で停止する。そこを原点とし、IRSでポスト番号を記録する。

 

4.ポスト探索モード1           post_search1

その場で回転しながら、超音波を使って一番近いポストの方向を向く。その際その角度を記録。(標準のpost_searchを改造する)

 

5.ポスト探索モード2 post_search2

基準ポストを周回しながら、右側面の超音波センサで他のポストを探索する。ポスト位置データ[基準点からの角度,距離]を記録する。IRSを使って基準点まで周回する。

 

6.ポスト位置確認モード        check_position

基準ポストを周回しながら、ポスト探索モード2で記録したポスト位置データの場所に本当にポストがあるかどうか確認する。ポスト番号記録モードから復帰後、この動作をIRSを使って基準点まで繰り返す。

 

7.ポスト番号記録モード        record_postnum

ポスト番号判別部のタッチセンサに反応があるまでゆっくり前進し、停止する。WSからのデータを取得し、ポスト番号を記録する。その後、後退して180°回転する。

 

8.ポスト獲得モード1 post_gain1

記録したポストデータ・ポスト番号から、獲得しにいく順番を決める。その後、獲得すべきポストの角度を計算し、その角度まで基準ポストを周回して、獲得すべきポストへ移動する。

 

9.ポスト獲得モード2 post_gain2

ポストを周回してIRSの反応がある場所で停止して、右に90°回転する。後方のIRSとタッチセンサでポストを獲得できたか確かめながら、後退してポストを獲得する。その後周回軌道上に復帰し、残りの周回動作を行い、元の位置に戻る。

 

10.基準ポスト帰還モード     return_datum_point

その場から右90°付近で、かつ基準ポストまでの距離と、ほぼ同じくらいの距離にあるポストが見つかるまでその場で回転する(角度・距離の許容誤差、最大回転数はプログラム上で定義する)。見つけたらそのポストへ前進し、規定距離で停止する。

 

11.データ保存モード data_w

1回目の競技で保存した構造体データを2回目の為にtxtファイルとして保存するモード。

 

12.データ読み取りモード dara_r

data_wで保存したtxtファイルを読み取り、そのデータを構造体に格納するモード。

 

13.基準ポスト方向モード     direct_datum_point

競技場の中心から、ポスト探索モード1で記録したデータを元に、1回目基準ポストにしたポストの方を向く。

 

14.フェイルセーフモード     faile_safe

エラーが起こったときに、一番近いポストに移動し獲得する。その後、そのポストを周回しながら他のポストを探し、見つけたらすぐに獲得しにいく。

 

 

4.モード区分

競技1回目で使用するモード

l        中央移動モード

l        ポスト接近モード

l        基準点設定モード

l        ポスト探索モード1

l        ポスト探索モード2

l        ポスト位置確認モード

l        ポスト番号記録モード

l        ポスト獲得モード1

l        ポスト獲得モード2

l        基準ポスト帰還モード

l        データ保存モード

l        フェイルセーフモード

 

競技2回目で使用するモード

l        中央移動モード

l        基準ポスト方向モード

l        ポスト接近モード

l        基準点設定モード

l        ポスト獲得モード1

l        ポスト獲得モード2

l        基準ポスト帰還モード

l        データ読み取りモード

l          フェイルセーフモード

 

 

5.モード遷移表

           競技1回目      main1

 

中央移動モード

ポスト接近モード

基準点設定モード

ポスト探索モード1

ポスト探索モード2

ポスト位置確認モード

ポスト番号記録モード

ポスト獲得モード1

ポスト獲得モード2

基準ポスト帰還モード

中央移動モード

×

途中にポストがある(a)

×

途中にポストがない

×

×

×

×

×

×

ポスト接近モード

×

×

(a,b)動作終了後||(d)動作終了後全ポスト発見済

×

×

(d)動作終了&全ポスト未発見

(c)動作終了後

×

×

×

基準点設定モード

×

×

×

×

動作終了後

×

×

(e)動作終了後

×

×

ポスト探索モード1

×

動作終了後(b)

×

×

×

×

×

×

×

×

ポスト探索モード2

×

×

×

×

×

動作終了後

×

×

×

×

ポスト位置確認モード

×

動作終了後©

×

×

×

×

×

×

×

×

ポスト番号記録モード

×

動作終了後(d)

×

×

×

×

×

×

×

×

ポスト獲得モード1

×

×

×

×

×

×

×

×

ポストへ移動後

×

ポスト獲得モード2

×

×

×

×

×

×

×

×

×

動作終了後

基準ポスト帰還モード

×

×

×

×

×

×

×

動作終了後

×

×

 

 

           競技2回目      main2

 

中央移動モード

基準ポスト方向モード

ポスト接近モード

基準点設定モード

ポスト獲得モード1

ポスト獲得モード2

基準ポスト帰還モード

中央移動モード

×

途中にポストがない

途中にポストがある

×

×

×

×

基準ポスト方向モード

×

×

動作終了後

×

×

×

×

ポスト接近モード

×

×

×

動作終了後

×

×

×

基準点設定モード

×

×

×

×

動作終了後

×

×

ポスト獲得モード1

×

×

×

×

×

ポストへ移動後

×

ポスト獲得モード2

×

×

×

×

×

×

動作終了後

基準ポスト帰還モード

×

×

×

×

動作終了後

×

×

 

 

6.モード詳細

 

モード名

main1

構成要素

正対補正
超音波距離測定
RTタスク起動
RTタスク停止
RTタスク再起動
移動距離
速度獲得
タイヤ回転角度獲得
タイヤ回転角合計獲得
LQR制御前進
LQR制御自転
LQR制御公転

関数名

main1()

 

 

 

モード名

main2

構成要素

正対補正
超音波距離測定
RTタスク起動
RTタスク停止
RTタスク再起動
移動距離
速度獲得
タイヤ回転角度獲得
タイヤ回転角合計獲得
LQR制御前進
LQR制御自転
LQR制御公転

関数名

main2()

 

 

 

 

モード名

中央移動モード

関数名

center_first

 

 

 

モード名

基準点設定モード

関数名

set_datum_point

 

 

 

 

モード名

ポスト探索モード2     

関数名

post_search2

 

 

 

モード名

ポスト位置確認モード 

関数名

check_position

 

 

 

モード名

ポスト番号記録モード 

関数名

record_postnum

 

 

 

モード名

ポスト獲得モード1     

関数名

post_gain1

 

 

 

モード名

ポスト獲得モード2     

関数名

post_gain2

 

 

 

モード名

基準ポスト帰還モード 

関数名

return_ datum_point

 

 

 

 

モード名

基準ポスト方向モード 

関数名

direct_datum_point

 

 

 

 

モード名

フェイルセーフモード 

関数名

faile_safe

 

 

 

 

 

 

table.1  関数一覧

ファイル名

関数名

書式

戻り値

main1.c

main1

int main1(void);

0

main2.c

main2

int main2(void);

0

center_first.c

center_first

void center_first (void);

0

post_approach_custom .c

post_approach_custom

int post_approach_custom (void);

0 または 9999

set_datum_point.c

set_datum_point

int set_datum_point (void);

0 または 9999

post_search1.c

post_search1

void post_search1(void);

0

post_search2.c

post_search2

int post_search2 (int);

0 または 9999

check_position.c

check_position

int check_position (int);

0

record_postnum.c

record_postnum

void record_postnum(void);

0

post_gain1.c

post_gain1

int post_gain1(int, int);

0 または 9999

post_gain2.c

post_gain2

int post_gain2(void);

0

return_ datum_point.c

return_ datum_point

int return_datum_point(int);

0 または 1

data_w.c

data_w

void data_w(void);

0

dara_r.c

dara_r

void data_r(void);

0

direct_datum_point.c

direct_datum_point

int direct_datum_point(void)

0 または 9999

faile_safe.c

faile_safe

void faile_safe(void)

0