名称 | MIRS1502 ソフトウェア詳細設計書 |
---|---|
番号 | MIRS1502-SOFT-0001 |
版数 | 最終更新日 | 作成 | 承認 | 改訂記事 |
---|---|---|---|---|
A01 | 2015.12.11 | 飯田俊也、奥一貴、金指真之介、平田和奏 | 初版 |
本ドキュメントはソフトウェア詳細設計書である。
基本設計で示した全体のモジュール構成をFig.1、Fig.2に示す。
Fig.1 モジュール構成図(CPU)
Fig.2 モジュール構成図(Arduino)
モジュール構成(CPU)をTable1に示す。
モジュール名 | 説明(役割、動作概要、変更内容など) | 関数名 | 引数 | 戻り値 |
---|---|---|---|---|
Device | デバイスドライバの有効化 | int device_motor_open() int device_motor_close() int device_motor_get() |
無し | エラーが発生した場合は-1を、問題がなければ0を返す。 |
Pilot | 全体の制御を行うモジュール | int main(void) | 無し | エラーが発生した場合は-1を、問題がなければ0を返す。 |
Mirsak_patrol | 怪盗追跡を行うモジュール。 競技会用にプログラムを開発する |
void mirsak_patrol() | 無し | 無し |
Omni_ctrl | 壁との距離を一定に保ちながら直進制御を行うモジュール | void omni_ctrl(int uss_stop, int uss_ctrl) |
int uss_stop int uss_ctrl |
無し |
Motor | モータを制御するモジュール。モータの数が2個から4個に増えたため、それに対応する。 | void motor_drive(int u_rf, int u_rb, int u_lf, int u_lb) | int u_rf int u_rb int u_lf int u_lb |
無し |
Number | ボードの数字認識を行うモジュール | 標準のプログラム参照 | 標準のプログラム参照 | 標準のプログラム参照 |
DeviceDriver | Arduinoとの通信を司るデバイスドライバー | int device_ioポート名前_open() int device_ioポート名前_close() |
無し | エラーが発生した場合は-1を、問題がなければ0を返す。 |
Serial_ctrl | デバイスドライバーを制御するモジュール | int serial_create() | 無し |
赤外線…強度:int ir_strength(0~100), 方向:int ir_angle(-179~180) 超音波…int uss_distance[8] 単位はcm タッチセンサ…int touch_io[個数未定] 電子コンパス…int compass_angle(-179 ~ 180) カメラ回転…int cam_angle |
re_route | 巡回ルートに復帰する際の動作を決めるモジュール | void re_route() | 無し | 無し |
モジュール構成(Arduino)をTable2に示す。
モジュール名 | 説明(役割、動作概要、変更内容など) | 関数名 | 引数 | 戻り値 | 起動条件 |
---|---|---|---|---|---|
Main | 各センサから送られた値から距離や角度を計算するモジュール | void main() | 無し | 無し | 常時実行 |
Rot_camera | カメラの回転の制御を行うモジュール | void rotate_camera(uint16_t angle) | angle…角度 | 無し | 呼ばれたとき |
Touch | タッチセンサの信号処理を行うモジュール | void touch() | 無し | 無し | 定時割り込み(1秒で30回) |
Ultrasonic | 超音波センサの信号処理を行うモジュール | void Ultrasonic() | 無し | 無し | 定時割り込み(1秒で30回) |
Infrared | 赤外線センサの信号処理を行うモジュール | void Infrarad() | 無し | 無し | A/D変換の終了による割り込み |
Compass | 電子コンパスの信号処理を行うモジュール | void Compass() | 無し | 無し | 定時割り込み(1秒で30回) |
I2C_ctrl | I2Cの通信制御 | int8_t I2C_ctrl(uint8_t addr,uint8_t mode,uint8_t data[],uint8_t elem) | addr…アドレス mode…送信か受信か data…送受信データ elem…データ数 |
エラーが発生した場合は-1を 問題がなければ0を返す。 |
呼ばれたとき |
Serial | CPUとの通信を制御するモジュール | void serial_ctrl() | 無し | 無し | 定時割り込み(1秒で30回) |
タッチセンサ、カメラ回転が無い場合のMirsak_patrolのフローチャートをFig.3に示す。
角度は-179°から180°までを考え、0°の方向を向いたとき、左側を正、右側を負とする。
スタート時、進行方向を180°とする。
fig.3 フローチャート
起動時は以下の2つのスレッドを動作させる。
pilot:メインスレッド。deviceとserial_ctrlを呼び出したのち、全体の動作シーケンスを管理するmirsak_patrolを呼び出す。
Serial_ctrl:Arduinoとの通信を司るスレッド。データを送信し、また受信データの更新を行う。
fig.4 スレッド構成
テスト項目と判定基準を以下に示す。