名称 | MIRS1501 ソフトウェア詳細設計書 |
---|---|
番号 | MIRS1501-SOFT-0001 |
最終更新日:2015.12.14
版数 | 最終更新日 | 作成 | 変更点 | 承認 | 改訂記事 |
---|---|---|---|---|---|
A01 | 2015.12.11 | 河合将和・高橋元太・中村勇吾 | 初版 | ||
A02 | 2015.12.14 | 河合将和・高橋元太・中村勇吾 | レビューで指摘された箇所の変更 | 第2版 | |
A03 | 2015.12.14 | 河合将和・高橋元太・中村勇吾 | レビューで指摘された箇所の変更 | 牛丸先生 | 第3版 |
本ドキュメントは、MIRS1501のソフトウェア詳細設計について記したドキュメントである。
モジュール構成を以下に示す。
fig.1 モジュール構成
モジュール一覧を以下に示す。
モジュール名 | 機能 | 開発要素 | 使用段階 | 担当者 |
---|---|---|---|---|
pilot | MIRSの動作全体を制御する。 | mirsak_*モジュール全てを統括する。 | 第1段階 | - |
mirsak_* | 動作シーケンスを管理する。 | 動作に応じたモジュールを作成する。 | 第1段階 | 下表参照 |
device | デバイスファイルを Open/Close する。 | Arduinoを追加する。 | 第1段階 | 中村 |
io | ON/OFF IOデバイスのデータを読む。 | 既存のものを使用する。 | 第1段階 | - |
infrared | Arduinoと通信を行う。 | 新規に作成する。 | 第1段階 | 中村 |
revise | 位置補正をを行う。 | 新規に作成する。 | 第2段階 | - |
search | 赤色認識を行う。 | 新規に作成する。 | 第2段階 | - |
number | 数字認識を行う。 | 距離に応じてパラメータを変更する。 | 第1段階 | 高橋 |
run_ctrl | 直進・回転・YUGOカーブを行う。 | 精度を向上させる。 | 第1段階 | 高橋 |
vel_ctrl | モータの速度制御を行う。 | 既存のものを使用する。 | 第1段階 | - |
position | 位置情報を管理する。 | 新規に作成する。 | 第2段階 | - |
distance | 走行距離を管理する。 | 既存のものを使用する。 | 第1段階 | - |
uss | 超音波計測を行う。 | 精度を向上させる。 | 第2段階 | - |
encoder | エンコーダ値を管理する。 | 既存のものを使用する。 | 第1段階 | - |
motor | モータを動かす。 | 既存のものを使用する。 | 第1段階 | - |
モジュール名 | 機能 | 概要 | 改良する点 | 担当者 |
---|---|---|---|---|
mirsak_demo | 現場急行 | 直進走行とYUGOカーブを用いて、数字ボードがあるところまで走行する。 | シーケンス内容の変更 | 高橋 |
mirsak_num | 画像処理 | 現場急行時、数字認識の画像処理を行う。 | 認識距離によるパラメータの変更 | 高橋 |
mirsak_patrol | 巡回 | 展示室内を周回運動し、怪盗機を探す。 | シーケンス内容の変更 | 河合 |
mirsak_chase | 怪盗機確保 | 赤外線センサからの情報を元に怪盗を追跡し、確保する。 | 赤外線データから、走法(直進・回転)と走行量(距離・角度)を決定する関数を追加する | 中村・河合 |
第1段階で使用するモジュールの仕様について示す。
既存のモジュールは、変更点がある部分のみ示す。
参考:MG3S 標準プログラム 関数レファレンス
関数名 | 引数 | 戻り値 | 機能 |
---|---|---|---|
int device_arduino_open() | なし | なし | Arduinoデバイスをオープンする |
int device_arduino_close() | なし | なし | Arduinoデバイスをクローズする |
int device_arduino_get() | なし | なし | Arduinoデバイスのディスクリプタ番号を取得する |
関数名 | 引数 | 戻り値 | 機能 |
---|---|---|---|
void infrared_create() | なし | なし | 赤外線データ処理スレッドを生成する |
void infrared_cancel() | なし | なし | 赤外線データ処理スレッドをキャンセルする |
void infrared_get() | (int *)赤外線センサのポート番号 、 (int *)赤外線の強さ | なし | 赤外線センサのポート番号と赤外線の強さを得る |
int infrared_run_set() | (int *)走法 、 (float *)走行量 、 (int *)赤外線センサのポート番号 、 (int *)赤外線の強さ | なし | 赤外線データから、走法(直進・回転)と走行量(距離・角度)を決定する |
第1段階では、以下の5つのスレッドが動作する。
メインスレッド以外のスレッドは、20ms周期でloop処理を行い、優先度を20に設定する。
上記のスレッドの動作の関連をシーケンス図に示す。
fig.3 スレッド構成
全体の動作シーケンスを管理するモジュール(mirsak_*)が、走行制御が必要になったところで、走行制御モジュールに対して走行モード(直進,回転,YUGOカーブ)と速度の指定を行い、走行制御(run_ctrl)スレッドを生成する。
走行制御スレッドは、全体の動作シーケンスの途中で必要になった場合に生成され、左右のタイヤの回転距離から、直進・その場回転またはYUGOカーブに必要な左右のモータの速度指定値を計算し、その指令値を速度制御モジュールに送る。
以下にその様子をシーケンス図で示す。
mirsak_*はctrl_endflagが1になるのを待って、走行制御スレッドをキャンセルする。
fig.4 走行制御の動作仕様
既存のテストプログラムがあるものは、それを実施する。
その他のモジュールで第1段階で使用するものについて以下に示す。
モジュール単体試験では、各モジュールが正常に動作するかを試験する。
機能試験では、一部のモジュールを組み合わせた時に正常に動作することを確認する。
統合試験では、すべてのモジュールを組み合わせて、本番で行う一通りの動作が正常に動作することを確認する。
この試験の合格をもって、第一段階のプログラムを完成とする。