MIRS1802 管理台帳へ戻る

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

版数 最終更新日 作成 承認
A05 望月・西島 牛丸先生

ドキュメント目次

  1. はじめに
  2. 状態遷移図
  3. モジュール仕様
  4. 主要動作
  5. スレッド構成
  6. コーディングルール
  7. 統合試験
  8. 追加購入物品

1.はじめに

本ドキュメントは、MIRS1802班のソフトウェア詳細設計書である。

2.状態遷移図

状態遷移図をFig.1に、その詳細をTable.1に示す。

Table.1.状態定義表

名称 詳細
停止中 休み時間が来るまで停止する
通常走行中 長方形上を走行する
障害物回避中 障害物を回避する
ごみ処理中 接近中 ゴミに接近する
捨てる人待ち中 ゴミがカメラに映らなくなるまで待機する
蓋閉じるの待ち中 ユーザーの蓋の開閉終了まで待機する
満杯中 ゴミ箱が満杯でなくなるまで待機する
戻り中 巡回ルートまで戻る
帰宅中 待機場所まで戻る
状態遷移図

Fig.1.状態遷移図

3.モジュール仕様

3.1.全体構成

モジュールの全体構成をそれぞれ以下に示す。新規作成モジュールを赤字で表す。

raspiモジュール

Fig.2.Raspberry Piモジュール

arduinoモジュール

Fig.3.Arduinoモジュール

3.2.Raspberry Piモジュール詳細

以下に新規追加・追記Raspberry Piモジュールの詳細を表にして示す。

Table.2.新規・追記Raspberry Piモジュール

モジュール名(.c) 概要 関数 関数の機能 戻り値 備考
pilot 全体動作を管理する int main() 全体動作を管理する
LINE通知を行う
0 or -1
routine 廊下を長方形上に走行する
int routine_search() 長方形の縦、横を受け取り走行する 0
int routine_avoid(int avoid_flag) 受け取った値によって前方または後方に回避する
一定時間経過後、人がいなくなったと判断してから元の位置に戻る
0
int routine_trash_detection() ゴミ発見後ゴミの手前まで移動し、一定時間経過後元の位置に戻る 0
int routine_home() 待機場所へ戻る 0
timer 起動時間、停止時間を管理する void timer_std() 時間を計測し休み時間中と授業中で走行を変化させる
休み時間中か授業中かによって計測する時間を変更する
なし state
休み時間中:1~7
授業中:0 or 8
trash_detection カメラでゴミを検知する int trash_detection_create() 認識スレッドを開始する 0 or -1 風船認識モジュールを一部書き換えて作成する
void trash_detection_cancle() 認識スレッドを終了する なし 風船認識モジュールを一部書き換えて作成する
void trash_detection_set_device(int device) 認識で使用するカメラのデバイス番号を設定する なし 風船認識モジュールを一部書き換えて作成する
void trash_detection_get_cg(int *x_g, int *y_g, int *ratio_g, int *radius_g) 色エリアの割合と重心座標を取得する なし 風船認識モジュールを一部書き換えて作成する
speak 音声を出力する void speak(int speak_no) 入力された値に応じて音声を出力する なし 音声出力
uss 超音波センサ読み取り int uss_open() 4方向の超音波センサをオープンする 0 or -1 元のモジュールから統一
void uss_get_val(int *usd_f, int *usd_b, int *usd_l, int *usd_r) 4方向の超音波センサの測定値を取得する なし 元のモジュールから統一
int detection_uss(int *usd_f, int *usd_b, int *usd_l, int *usd_r) 超音波の値から障害物の有無を判断する 0:なし 1:前方 2:後方
light 光センサ読み取り int light_get(int fd) 光センサの測定値を読み取る 光センサの測定値
int light_detection() 光センサの値から蓋の開閉を判断する 0 or 1
io ioピン読み取りを行う int io_open() 各種デバイスに使用するピンの設定を行う 0 or -1
void io_get_sw(int *sw_1, int *sw_2, int *sw_3, int *sw_4, int *sw_5, int *sw_6, int *sw_7, int *sw_8) タッチスイッチの値を取得する なし

3.3.Arduinoモジュール詳細

以下に新規追加・追記Arduinoモジュールの詳細を表にして示す。

Table.3.Arduinoモジュール

モジュール名(.ino) 概要 関数 関数の機能 戻り値 備考
infrared 赤外線の値を取得する int infrared_open() 各種デバイスに使用するピンの設定を行う 0 or -1
void infrared_set_led(int val) LEDのON/OFF操作を行う なし
int infrared_get() センサの値を取得する 0 or 1

4.主要動作

主要動作を以下のフローチャートに示す。

基本走行フローチャート

Fig.4.基本走行フローチャート

カメラフローチャート

Fig.5.カメラフローチャート

5.スレッド構成

スレッド化するモジュール名をRaspberry Pi用プログラム、Arduino用プログラムに分けて以下に箇条書きで示す。

6.コーディングルール

7.統合試験

Raspberry Pi、Arduino、統合試験の内容を以下に示す。

Table.4.Raspberry Pi

モジュール 試験内容
timer 時間を計測する
trash_detection ゴミの位置を見つけ、ターゲットの中心座標を定める。
speak 音声を出力する
compass 機体の角度を正しく取る
uss 超音波の値を正しく取る
light センサの値を正しく返す
io スイッチの値を取る

Table.5.Arduino

モジュール名 試験内容
infrared 赤外線の値を取る

Table.6統合試験

試験内容
正対補正を行う
カメラで発見し、近寄って音声を発する
センサの値に沿って移動する + 音声出力
巡回ルートから外れた後、復帰する
時間が来たら待機場所へ戻る
すべての一連の動作を行う

8.追加購入物品

追加購入物品を以下に示す。

Table.7.追加購入物品

物品名 型番 調達先 単価[円] 購入数[個] 小計[円] URL 備考
光センサ TSL2561デジタル光センサボード スイッチサイエンス 702 1 702 https://www.switch-science.com/catalog/2498/

MIRS1802 管理台帳へ戻る