名称 |
MIRS1201 SOFT詳細設計書 |
番号 |
MIRS1201-SOFT-0003 |
最終更新日:2012.12.14
版数 |
更新日 |
作成 |
承認 |
改訂記事 |
A01 |
2012.12.14 |
鈴木雄太 |
出川教員 |
初版 |
これはMIRS1201オリジナルのソフトウェアについてのドキュメントである。
目次
- 方針
- 関数表
- 構造図
- フローチャート図
- 試験
方針
1つの関数にとどまらないようにしthreadを最大限利用することで、緊急事態に素早く対応するプログラムを目指す。
また、直進制御にPD制御を用いることで、精度の良い走行を目指す。
関数表
構造図
フローチャート図
今回の攻略プログラムの主要な関数のフローチャート図を載せる。本番では実現できなかったが、本来は以下のようなプログラムを成功させる予定だった
赤枠および緑枠は、それぞれthread間で同期している。mutex_lockを用いてどれかが行われているとき他は動作を停止している。
main()
各初期化とスレッドの生成、motor_restartの見張りとその後の処理を行っている。
main_thread()
各迷路攻略関数(直進,DB,ロリータ,小部屋,ゴール)への状態遷移を行うスレッド関数。状態遷移の前に、センサ値と状態変数を更新している。
uss_l_thread(),uss_f_thread(),uss_r_thread(),uss_l2_thread()
各超音波センサの値を取得するスレッド関数。値が大きすぎたり,エラー値だった場合の取得し直し処理も行っている。
左encoder_thread()
エンコーダの値を読み取り、走行距離に計算するスレッド。
右ts_ws_rs_thread()
タッチセンサ,白線センサ,赤外線センサのon-offを読み取るスレッド。今回、左前右3つのタッチセンサと、左右2つの白線センサの読み取りを行った。
rotary()
ロータリーを攻略するための状態遷移方式の関数。侵入判断と右左折を行き来し、侵入検知したら角度調整,ローテーション出口検知へ移る。その後退出処理と終了に遷移する。
cosmo()
小部屋を攻略するための状態遷移方式の関数。侵入判断と右左折を行き来し、侵入検知したら侵入場所判断から右左折(左端なら省略)、左壁伝い走行&出口検知へ移り、出口検知後に退出処理,終了へ移動する。
DB()
ダイレクションボードの数字認識とその方向への右左折を行うための状態遷移方式の関数。白線検知後にこの関数に移る。正対補正→数字検知→右左折→コース決定,終了の順に遷移していく。
goal()
ゴール判断して止まる関数。白線検知によるゴール判断と、右左折処理を行き来する
cosmo()における状態CON(侵入場所判断)のモジュール
左端にいた場合はDETECTへ状態変数を更新し、それ以外なら、左折処理を行うためにTURNに状態変数を更新する。
DB()における状態DETECT(数字検知)のモジュール
number_detect()による数字認識後、優先度の設定と進路方向と攻略コースの決定。取得できなかった場合、やり直しも行う。
cosmoとrotaryにおける状態ENTER(侵入判断)のモジュール
侵入検知にはwall_flag()により壁検知を行い、それに応じて直進または右折左折を決定する。
試験
状態遷移をscanfにより設定して試験を行う。試験用の処理を付け加えるのと、コメントアウトのみで試験が行える仕様になっている。※なお今回、試験は行えず失敗に終わった。
沼津工業高等専門学校 電子制御工学科