目次
1. 本ドキュメントについて2. 設計コンセプト
3. 実現方法
4. 開発日程
1. 本ドキュメントについて
-
ソフトの肝である統合プログラムの詳細設計書をつくる。
このドキュメントでは、統合プログラムの設計コンセプト、実現方法、開発日程の3点についてまとめる。
2. 設計コンセプト
-
4班の統合プログラムの設計コンセプトは、
- 汎用性のある、きれいなプログラムであること
- 競技中に発生するズレを修正できること
- 動作試験をしながらの開発、修正が行いやすいこと
汎用性について
ロータリーで45度ずつ回転して出口か確認する、小部屋で50cmずつ動いて出口を確認する、というような競技場のパラメータに依存したプログラムはつくらない。また、極力タッチセンサの使用を控え、超音波センサをたよりに課題をクリアする。
競技中のズレについて
競技中に、MIRS本体の姿勢角がずれると、MIRSが直角に曲がっても通路に対して斜めになる場合がある。こうなるとクリアが難しくなるので、MIRSに常に自分の姿勢角を計算させ、通路に対して水平な状態を保てるようにする。
開発、修正について
各課題をクリアするプログラムを作っても、実際の競技のように数字認識をして曲がって課題に入り、抜けて数字認識をして・・・という状況ではまた別の問題が発生する。また、各課題ごと洗練している時間もないため統合プログラムに課題用のプログラムを組み込み、統合プログラム中で編集できるようにする。
3. 実現方法
汎用性について
4班のプログラムは超音波センサ、他のセンサ、モーターの3つのスレッドを使う。また、各スレッドにフラグのような外部変数をつくり、mainプログラムからスレッドの終了や条件の変更などの操作が行えるようにする。
また、pthread_cancel()のようなスレッドの同期を失うようなコマンドは用いず、外部変数による条件分岐とpthread_join()でスレッドを扱う。
モーターを動かすプログラム中にも、フラグによって緊急停止ができるようにしておく。これにより壁に近づいたときにすぐ停止できる。その後の細かい調整はスレッドではなくポーリングで行う。
競技中のズレについて
競技開始時の姿勢角を0度とし、現在のMIRSの姿勢角を計算するプログラムをつくる。これは短い一定時間ごとに左右のタイヤのロータリセンサの値を取得し、姿勢角を計算する。直角(90度)に曲がりたいときには、90度と姿勢角の差を、実際に回転しなければならない角度とすればよい。
開発、修正について
各課題をクリアするプログラム自体は、それ単体で実行しアルゴリズムが正しいことを確認する。その後、分割コンパイルでなく統合プログラム中に組み込んでしまう形で統合プログラムを作る。モーターを動かす、超音波センサの値を取得するといったような変更が起きにくいプログラムは分割コンパイルする。課題クリアのような変更が起きやすいプログラムは統合プログラム中に関数プロトタイプ宣言し入れておくことで、開発や修正を統合プログラム内のみで行えるようにする。
4. 開発日程
1月頭から競技会当日まで、開発、試験、修正を繰り返す。
関連文書 統合プログラム説明書