名称 MIRS1504 ソフトウェア詳細設計書
番号 MIRS1504-SOFT-0001

最終更新日:2015.12.14

版数 最終更新日 作成 承認 改訂記事
A01 2015.11.16 志村 秀 初版
A02 2015.12.04 志村 秀、原 圭汰、川崎 悠輔 Table1を追加した。
A03 2015.12.08 志村 秀、原 圭汰、川崎 悠輔 Table1に追記した。フローチャートを追加した。
A04 2015.12.09 志村 秀、原 圭汰、川崎 悠輔 シーケンス図とコーディングルールを追加した。
A05 2015.12.14 志村 秀、原 圭汰、川崎 悠輔 牛丸先生 レビューで指摘されたところを修正した。

目次

  1. はじめに
  2. モジュール構成
  3. フローチャート
  4. スレッド構成
  5. テスト項目
  6. コーディングルール

1.はじめに

本ドキュメントは、MIRS1504が開発をするMIRSのソフトウェア詳細設計についてのドキュメントである。
記載内容は、目次の通りである。

2.モジュール構成

2.1モジュール構成図


MIRS1504 システム基本設計書でも示したものに変更を加えたモジュール構成図を下のFig.1に示す。

Fig.1 モジュール構成図

2.2モジュール構成表


このプログラムの全てのモジュールの概要はMIRS1504 システム基本設計書の5-3.ソフトウェア構成を参照のこと。
全モジュールの中で、新たに開発・改変を行うモジュールは下のTable1のとおりである。ただし、mirsakモジュール群以外の関数は他のモジュールから利用されるもののみ示す。
Table1 モジュール構成
モジュール名 役割 動作概要 変更内容 関数 担当者
関数名 役割 引数 戻り値
司令塔(pilot) 各モジュールの統合、全体の制御 デバイスのオープン・クローズ、現場急行、巡回、怪盗発見後の追跡動作を管理する 既存のモジュール(pilot)を変更する int main() 全体の制御を行う なし 正常にプログラムを終了したら0、異常終了したら-1 川崎
現場急行(mirsak_goto_db) 現場急行 スタートからDBまで急行する 新規に作成する void mirsak_goto_db() 現場急行を行う なし なし
static void direction_gate(int dist,int dirfr) 正体補正をするかどうかの判断を行う int dist:壁との距離、int dirfr:使用する超音波センサ(正面の超音波センサは1、右側は2) なし
static void run_correction(int mode) 直進時に壁に衝突したときの走行軌道の補正を行う int mode:一回目の直進では0、二回目の直進では1 なし
巡回(mirsak_patrol) 展示室の巡回 展示室を巡回し、怪盗機を発見したら捕獲モジュールを呼び出す 新規に作成する void mirsak_patrol() 巡回を行う なし なし
確保(mirsak_catch) 怪盗の確保 怪盗を確保する 新規に作成する int mirsak_catch() 怪盗機を確保する なし 捕獲フラグ(捕獲成功:1、捕獲失敗:0)
static float mirsak_catch_calc(float s,float x,float *a_array) 怪盗確保時に使用する距離値と角度値を計算する float s:θの値[°]、float x:x[cm]の値、float *a_array:関数が返すα[°]、l[cm]、β[°]、x'[cm]の値を格納する配列 rの値[cm]
画像認識(picture) 怪盗機の発見 webカメラを使い怪盗機を発見する 新規に作成する int picture_detect(int camnum,int *area) カメラで撮影し、撮影した画像の赤色の占める面積を計算する int camnum:カメラ番号(正面は0、左側は1)、int *area:赤色の面積 画像処理に成功:1、失敗:-1 川崎
赤外線計測(infrared) 赤外線センサの確認 各赤外線センサの値を取得する IO Readモジュール(io)を参考に、新規に作成する int infrared_get(int *inred) 8方向に設置された赤外線センサのON/OFFの値を読み取り、引数の配列に代入する int *inred:赤外線センサの値(要素数8の配列) 取得に成功:1、失敗:-1
超音波計測(uss) 超音波センサの確認 各超音波センサの値を所得する 既存のモジュール(uss)を変更する(MIRS1403の超音波センサモジュールを参考に、ハードウェアの変更に対応する) int uss_get(int uss_port) 超音波センサを使い、超音波センサとの距離を計測する int uss_port:センサ番号 計測距離[cm] 志村
LED制御(led) LEDの制御 LEDを制御する 新規に作成する void led_ctrl(int pattern) LEDを指定したパターンで発光させる int pattern:LEDの発光パターン なし 志村
通信(server) サーバとの通信 サーバへデータを送信する 新規に作成する int server_thief(int num) サーバから送信されてくるデータの読み取りおよびサーバーへの送信を行う(MIRSからサーバへの情報送信はSSHによるファイルコピーによって行われる) int num:送信する数字 送信に成功:1、失敗:-1

3.フローチャート

現場急行モジュールと巡回モジュールのフローチャートはMIRS1504システム基本設計書のFig.1とFig.2と同じで、捕獲モジュールのフローチャートを下のFig.2に示す。

Fig.2 司令塔モジュールのフローチャート(捕獲モード)

Table1およびFig.1において、r、α、l、β、x'の値の意味を下に示す
r[cm]:怪盗機を見つけてθ[°]回転した後に進む距離
α[°]:怪盗機を確保できなかったときに回転する角度
l[cm]:α[°]回転した後に進む距離
β[°]:l[cm]進んだ後に回転する角度
x'[cm]:巡回軌道に戻った後に補正する距離計の値

またFig.2において、巡回軌道の戻り方を下に示す。

Fig.3 巡回軌道に戻るときの動き

4.スレッド構成

スレッド構成は、標準プログラムと同じである。
起動時に生成するスレッド:エンコーダスレッド、速度制御スレッド
必要なときに生成するモジュール:走行管理スレッド

下のFig.4に捕獲モード時の主な動作をシーケンス図で示す。

Fig.4 捕獲モード時の主な動作の流れ

5.テスト項目

今回のプログラムの試験は、下のTable2に従い実施する。
Table2 テスト内容一覧
モジュール名 テスト内容 備考
司令塔(pilot) 統合試験の際に正常に動作をするかを確認する。
現場急行(mirsak_goto_db) 現場急行を仕様通りに行えるか確認する。
巡回(mirsak_patrol) 巡回を仕様通りに行えるか確認する。
確保(mirsak_catch) 怪盗機確保を仕様通りに行えるか確認する。
画像認識(picture) 画像の処理を正常に行えるかをテストプログラムで確認する。
赤外線計測(infrared) 受信を確認するプログラムを作成して、確認を行う。
超音波計測(uss) こちらのプログラムを使用して測定が行われるかの確認を行う。
LED制御(led) LED制御ボードへ番号を送り、指定されたパターン通りに点灯されるかを確認する。
通信(server) server_info_send_test.cを使用してテストを行う。

6.コーディングルール

MIRS1504のコーディングルールは以下のようになる。

・プログラムの更新・統合手順 ・ファイル分割基準 ・関数名・変数名のつけ方 ・その他

MIRS1504ドキュメント管理台帳