沼津高専 電子制御工学科 |
||||||||
|
||||||||
改訂記録 |
||||||||
版数 |
作成日 |
作成者 |
承認 |
改訂内容 |
||||
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 |
構成要素 |
正対補正 |
関数名 |
main1() |
モード名 |
main2 |
構成要素 |
正対補正 |
関数名 |
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 |
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 |