名称 | MIRS1802 ソフトウェア詳細設計書 |
---|---|
番号 | MIRS1802-SOFT-0001a |
版数 | 最終更新日 | 作成 | 承認 |
---|---|---|---|
A05 | 望月・西島 | 牛丸先生 |
本ドキュメントは、MIRS1802班のソフトウェア詳細設計書である。
状態遷移図をFig.1に、その詳細をTable.1に示す。
Table.1.状態定義表
名称 | 詳細 | |
---|---|---|
停止中 | 休み時間が来るまで停止する | |
通常走行中 | 長方形上を走行する | |
障害物回避中 | 障害物を回避する | |
ごみ処理中 | 接近中 | ゴミに接近する |
捨てる人待ち中 | ゴミがカメラに映らなくなるまで待機する | |
蓋閉じるの待ち中 | ユーザーの蓋の開閉終了まで待機する | |
満杯中 | ゴミ箱が満杯でなくなるまで待機する | |
戻り中 | 巡回ルートまで戻る | |
帰宅中 | 待機場所まで戻る |
Fig.1.状態遷移図
モジュールの全体構成をそれぞれ以下に示す。新規作成モジュールを赤字で表す。
Fig.2.Raspberry Piモジュール
Fig.3.Arduinoモジュール
以下に新規追加・追記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) | タッチスイッチの値を取得する | なし |
以下に新規追加・追記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 |
主要動作を以下のフローチャートに示す。
Fig.4.基本走行フローチャート
Fig.5.カメラフローチャート
スレッド化するモジュール名をRaspberry Pi用プログラム、Arduino用プログラムに分けて以下に箇条書きで示す。
Raspberry Pi、Arduino、統合試験の内容を以下に示す。
Table.4.Raspberry Pi
モジュール | 試験内容 |
---|---|
timer | 時間を計測する |
trash_detection | ゴミの位置を見つけ、ターゲットの中心座標を定める。 |
speak | 音声を出力する |
compass | 機体の角度を正しく取る |
uss | 超音波の値を正しく取る |
light | センサの値を正しく返す |
io | スイッチの値を取る |
Table.5.Arduino
モジュール名 | 試験内容 |
---|---|
infrared | 赤外線の値を取る |
Table.6統合試験
試験内容 |
---|
正対補正を行う |
カメラで発見し、近寄って音声を発する |
センサの値に沿って移動する + 音声出力 |
巡回ルートから外れた後、復帰する |
時間が来たら待機場所へ戻る |
すべての一連の動作を行う |
追加購入物品を以下に示す。
Table.7.追加購入物品
物品名 | 型番 | 調達先 | 単価[円] | 購入数[個] | 小計[円] | URL | 備考 |
---|---|---|---|---|---|---|---|
光センサ | TSL2561デジタル光センサボード | スイッチサイエンス | 702 | 1 | 702 | https://www.switch-science.com/catalog/2498/ |