名称 | MIRS1603 ソフトウェア詳細設計書 |
---|---|
番号 | MIRS1603-SOFT-0001 |
版数 | 最終更新日 | 作成 | 変更点 | 承認 | 改訂記事 |
---|---|---|---|---|---|
A01 | 2016.12.09 | 石田智士、遠藤大河、橋本宗汰郎 | 初版 | ||
A02 | 2016.12.16 | 石田智士、遠藤大河、橋本宗汰郎 | レビューで指摘された点を修正 | 承認 | 第二版 |
本ドキュメントは、MIRS1603のソフトウェア詳細設計について記したドキュメントである。
モジュール構成を以下に示す。
fig.1 モジュール構成
モジュール一覧を以下に示す。
モジュール名 | 機能概要 | 開発要素 | 開発・改良概要 | 担当者 |
---|---|---|---|---|
pilot | MIRS1603の動作全体を制御する | 新規作成 | 現場急行・数字認識、巡回、怪盗機確保の3状態の制御を行う | 橋本 |
device | デバイスファイルを Open/Closeする | 改良 | エンコーダに関する部分を削除する | 遠藤 |
mirsak_* | 動作に応じたモジュールを作成する | 新規作成 | 現場急行・数字認識、怪盗機発見、怪盗機確保の3状態に対応したモジュールを作成する | 下表参照 |
comm | 数字認識で得たデータをサーバーに送信する | 既存 | - | - |
io | ON/OFF IOデバイスのデータを読む | 既存 | - | - |
number | 数字認識を行う | 既存 | - | - |
run_ctrl | 直進・回転の制御を行う | 新規作成 | 超音波センサとジャイロセンサを用いた走行制御に変更する | 橋本、遠藤 |
direction | 正対補正を行う | 改良 | 超音波センサによる走行制御への対応 | 遠藤 |
motor | モータを動かす | 既存 | - | - |
state | 機体の状態を管理する | 新規作成 | serial_ctrlからの値を用いて機体の傾き、道の中心からのずれなどを算出する | 橋本、石田 |
serial_ctrl | CPU-Arduino間のシリアル通信を行う | 新規作成 | CPU-Arudino間のUSBポートを通じたシリアル通信を管理する | 遠藤、石田 |
device_ctrl | Arduinoに接続センサ類を管理する | 新規作成 | Arudinoに接続されるジャイロセンサ、超音波センサ、赤外線センサを制御しserial_ctrlにデータを渡す | 石田 |
gyro | ジャイロセンサの信号を処理する | 新規作成 | ジャイロセンサから取得される角加速度を角度に変換する | 石田 |
uss | 超音波センサの信号を処理する | 新規作成 | 超音波センサから取得される計測時間を距離に変換する | 石田 |
infrared | 赤外線センサの信号を処理する | 新規作成 | 赤外線センサの反応を監視する | 石田 |
モジュール名 | 機能 | 機能概要 | 改良する点 | 担当者 |
---|---|---|---|---|
mirsak_rush | 現場急行・数字認識 | 直進走行と回転動作を使って、数字ボードがあるところまで走行する | シーケンス内容の変更 | 橋本 |
mirsak_patrol | 巡回 | 展示室内を周回運動し、怪盗機を探す | シーケンス内容の変更 | 石田 |
mirsak_chase | 怪盗機確保 | 赤外線センサからの情報を元に怪盗を追跡し、確保する | 赤外線データから、走法(直進・回転)と走行量(距離・角度)を決定する関数を追加する | 遠藤 |
使用するモジュールの仕様について示す。
参考:MG3S 標準プログラム 関数レファレンス
関数名 | 引数 | 戻り値 | 機能 |
---|---|---|---|
void run_ctrl_create() | なし | なし | 走行制御スレッドを生成する |
void run_ctrl_cancel() | なし | なし | 走行制御スレッドをキャンセルする |
void run_ctrl_stop() | なし | なし | 機体を停止する |
int run_ctrl_get_endflag() | なし | 走行終了のフラグ | 走行終了のフラグを取得する |
void run_ctrl_set(int mode,float speed) | 走行モード、距離[m]または角度[deg] | なし | 走行モードと壁との距離または回転角度をセットする |
関数名 | 引数 | 戻り値 | 機能 |
---|---|---|---|
void serial_ctrl_create() | なし | なし | Arduino管理スレッドを生成する |
void serial_ctrl_cancel() | なし | なし | Arduino管理スレッドをキャンセルする |
int serial_ctrl_infoget() | なし | 回転角度、超音波の計測結果、反応のあった赤外線ポート番号 | Arduinoデバイスのディスクリプタ番号を取得する |
関数名 | 引数 | 戻り値 | 機能 |
---|---|---|---|
int gyro_get() | なし | 角度[deg] | 回転角度を計測する |
void gyro_clean() | なし | なし | 回転角度を初期化する |
関数名 | 引数 | 戻り値 | 機能 |
---|---|---|---|
int uss_get(int uss_port) | センサ番号 | 計測距離[cm] | 指定した超音波センサで距離を計測する |
関数名 | 引数 | 戻り値 | 機能 |
---|---|---|---|
int infrared_get(int infrared_port) | センサ番号 | 反応の有無 | 赤外線の反応があった場合1、なかった場合0を返す |
以下の5つのスレッドが動作する。
メインスレッド以外のスレッドは、20ms周期でloop処理を行い、優先度を20に設定する。
上記のスレッドの動作の関連をシーケンス図に示す。
fig.3 スレッド構成
今回のプログラムの機能試験の内容を以下に示す。
既存のテストプログラムがあるものは、それを実施する。
モジュール名 | テスト内容 | 備考 |
---|---|---|
pilot | 統合試験の際に正常に動作をするかを確認する | |
direction | 正対補正が正常に行われるか確認する | |
run_ctrl | 走行制御が仕様の通りに行われるか確認する | |
state | Arduinoから送られてくる値が仕様の通りに処理されるかを確認する | |
serial_ctrl | シリアル通信において正常に受信することができるかを確認する | |
device_ctrl | 仕様通りにデバイスからの値を処理することができるかを確認する | |
uss | 超音波センサが正常に測定を行うかを確認する | |
gyro | ジャイロセンサが正常に測定を行うかを確認する | |
comm | server_info_send_test.cを使用してサーバ通信の動作を確認する | |
infrared | 赤外線センサが正常に測定を行うかを確認する |
競技会での各状態でのプログラムの統合試験の内容を以下に示す。
また、各モジュールごとの統合試験が完了し次第pilotを使用して競技会全体の動作を確認する。
モジュール名 | テスト内容 | 備考 |
---|---|---|
mirsak_rush | 0.5m幅のフィールドを4.5m直進することができる 90°回転することができる 数字ボードと0.7mの距離を保つことができる 正対補正をすることができる 数字認識をし、サーバに送信することができる |
|
mirsak_patrol | 両側の壁との距離を0.75mに保ちながらフィールドを巡回できる | |
mirsak_chase | 怪盗機の方向に回転できる 怪盗機に接触するまで直進できる 巡回ルートに復帰できる |