MIRS2009 ソフトウェア詳細設計書 |
MIRS0901-SOFT-0001 |
版数 |
最終更新日 |
作成 |
承認 |
改訂記事 |
A01 |
2009/2/28 |
坂代 |
武藤 |
初版 |
1.目的
2.概要
3.まとめ
1 目的
本ドキュメントは、MIRS0901のソフトウェアの詳細仕様・内容についてまとめたものである。なお、各種動作についての詳細は別ドキュメントにて説明している。
2 概要
MIRS0901の競技プログラムの構成は、通常通路動作を基本動作とし、センサーの状態やDBの読み取り結果などに応じて各種仕掛け通過動作・例外動作に切り替えるといったものである。
プログラムの記述方法でいえば、switch-case文をwhile文でループし、各種センサーやDBの状況に合わせてcaseを切り替えるといったものである。
なお、1回目で競技クリアできれば、同じ要領で2回目もクリアできるだろうと考え、マッピングなどの行動は行わない。
以下に、MIRS0901のプログラム構成を簡単に表したフローチャートを示す。
fig.1
競技プログラムの簡易フローチャート
各種仕掛け通過動作については、それぞれ別のドキュメントにてまとめているのでここでは省略する。
基本動作・例外動作についても、通路通行動作のドキュメントにて詳しく説明しているのでここでは省略する。
初期化について
初期化では、マクロの定義、変数・構造体の宣言、各種変数の初期値の代入、スレッドの起動を行う。
スレッドは、メインとは別に、以下の3つを立ち上げている。なお、どのスレッドもwhile文で無限ループしており、メインプログラムの終了とともに終了するようにする。
超音波センサー監視スレッド:
計3つの超音波センサーの値を読み取り、それをそれぞれグローバル変数に代入する。
on/off
IOセンサー監視スレッド:
計12個(使用しているのはもう少し少ない)のセンサーの値を読み取り、それをそれぞれグローバル変数に代入する。
電子コンパス監視スレッド:
電子コンパスの値を読み取り、それをそれぞれグローバル変数に代入する。
以下に、各種動作を行う関数を示す。
table.1
各種行動関数郡
関数 |
概要 |
void act_normal() |
通路通行動作を行う |
void act_rota() |
ロータリー通過動作を行う |
void act_kobeya() |
小部屋通過動作を行う |
void act_hakusen() |
白線動作を行う |
void act_key() |
鍵と扉通過動作を行う |
void act_DB() |
DBの読み取り(画像処理)を行う |
void act_goal() |
ゴール動作を行う |
void act_ikidomari() |
行き止まり回避動作を行う |
以上の関数を、switch-case文を使って切り替えることで使い分ける。
3 まとめ
むやみにスレッドを立ち上げると、実行権がいろいろ動き、予期せぬエラーや不具合が発生する可能性がある。そのため、スレッドの立ち上げには十分注意しなくてはならない。
また、メインスレッドにはあまり処理の長い動作を入れないように気をつけなくてはならない。プログラムの1周の速度が落ちると、その文センサーが反応してから行動に移るための時間が長くなってしまう。
そのため、数学関数などの使用には注意をした。他にも、各種計算方法も工夫をした。
これら細かい作業の積み重ねで競技の結果が大きく変わることもあるので、なるべく効率のよいプログラムを作成することを心がけるべきである。
関連文書 |