名称 | MIRS2005ソフトウェア詳細設計 |
---|---|
番号 | MIRS2005-SOFT-0001 |
版数 | 最終更新日 | 作成 | 承認 | 改訂記事 |
---|---|---|---|---|
A01 | 2020.12.2 | 榊原里樹 | 初版 | |
A02 | 2020.12.4 | 榊原里樹 | 牛丸先生 | 初版 |
本ドキュメントは、ソラシ♬プロジェクトのソフトウェア詳細設計書である。
Table1に基本機能を示す。
機能名 | 目的 | 詳細 | 記述言語 |
---|---|---|---|
音楽再生機能 | 音楽を鳴らす |
スピーカーから音楽を鳴らす 音声入力で曲の変更を可能にする 音声入力によって会話機能に切り替え可能 |
Python |
会話機能 | 特定の言葉に反応して返事をする |
マイクが特定の音声を拾った場合それに合わせた返事をする 音声入力によって音楽再生機能に切り替え可能 |
Python |
ライントレース機能 | 病院内をライントレースで移動する |
病院の床に専用のラインを引いてそのラインに沿って移動する ラインは白のマスキングテープの上に黒のビニールテープを貼り付けたものを使う 移動は待合室から診察室までの間で行う カメラを用いてライントレースを行う |
C++ |
ライン二重認識機能(ライントレース①) | ラインが二重にひかれたところ(マーカー)を認識する |
ラインを二重にしたところ(マーカー)を判断できるようにする 操作待機やアピールの目印とする |
C++ |
遠隔操作機能 | スマートホンのBluetooth機能で特定の操作を遠隔で行う |
専用アプリを用いてソラシのraspberry piとBluetooth通信を行う 発進・停止などの特定の操作を遠隔で行えるようにする |
C/Python/html |
接近探知機能 | 人や障害物が接近した場合走行を停止する | 超音波センサを用い人や障害物の接近を検知して危険な場合に走行を停止する | C言語 |
緊急停止機能 | 問題が起きた際に緊急停止する |
緊急停止ボタンを押すことですべての機能が停止する アプリからの遠隔停止も可能にする |
C言語 |
各機能を実現するためのモジュール構成を示す。
Arduinoのモジュール構成をFigure1に示す。
水色のモジュールは新規作成する
また、Figure1のモジュールの詳細をTable2にまとめる。
Figure1 arduinoモジュール構成
モジュール | 機能 | 関数名 | 引数 | 戻り値 | 備考 |
---|---|---|---|---|---|
follower.ino (新規作成) |
raspberry pi からの命令を取得し実行する。 | void follower() (一部変更) |
なし | なし | スイッチ文にカーブ機能用のケースを追加し、run_ctrl_set()に走行状態(カーブ)と左右のモータの速度を引数として渡す。 |
raspi.ino | raspberry piとのシリアル通信で受信したデータをcommand_data_t型のcommand_dataで取得する | 参照 | カーブ走行用の引数は標準プログラムで取得する。 | ||
run_ctrl.ino | 走行系制御 | run_ctrl_execute() (一部変更) |
なし | なし | run_ctrl_execute()のスイッチ文にカーブの処理を追加し。vel_ctrl_set()に左右のモータの速度を渡す。 |
void run_ctrl_set(run_state_t state, double speed, double dist) | run_state_t state, double speed, double dist | なし | 標準機のものをそのまま使用。 | ||
void run_ctrl_get(run_state_t *state, double *speed, double *dist) | run_state_t *state, double *speed, double *dist | なし | 標準機のものをそのまま使用。 | ||
vel_ctrl.ino | 速度制御 | 参照 | |||
motor.ino | モータ制御 | 参照 | |||
distance.ino | 距離計測 | 参照 | |||
encorder.ino | エンコーダ読み取りモジュール | 参照 | |||
io.ino | I/Oポートの操作 | 参照 |
Raspberry piにはメイン処理用のC言語プログラムと音声認識用のPythonプログラムを実装する。それぞれのモジュール構成を以下にまとめる。
C言語プログラムのモジュール構成をFigure2に示す。
水色のモジュールは新規作成する。
また、Table3にモジュールの詳細をまとめる。
Figure2 C言語プログラムモジュール構成
モジュール | 機能 | 関数名 | 引数 | 戻り値 | 備考 |
---|---|---|---|---|---|
pilot.c | 初期設定 | int main() | 無し | 通常終了:0 異常終了:-1 |
python main.py を実行 app.cをスレッド化 |
C_main.c | C言語のメインプログラム | int C_main(int *mode) | int型ポインタ | 通常終了:0 異常終了:-1 |
app.cで動作モードの変数を変更したものを使用 |
app.c |
アプリからの命令の処理を行う アプリとの通信を行う |
void app(void *mode_recv) | void型ポインタ | 無し | Bluetooth通信を行う pilot.cでスレッドとして動作 |
stop.c | 緊急停止スイッチの押下を読み取る | int stop_open() | 無し | WiringPiのセットアップが正常:0 WiringPiのセットアップが異常:-1 |
緊急停止スイッチのGPIOピンをセットアップする |
void stop(void *mode_recv) | void型ポインタ | 無し | |||
C_send.c | Pythonに動作モードを送信する | void C_send(int mode) | int型変数:動作モード | 無し | |
line.cpp | ライントレースを行う | void line() | 無し | 無し | ライントレース時スレッドとして動作 |
request.c | Arduinoへ命令を送る | 参照 |
|||
arduino.c | Arduinoへ命令を送る | 参照 |
|||
uss.c | 超音波センサ読み取り | int uss_open_lf() int uss_open_rf() long uss_get_lf() long uss_get_rf() を追加 |
それぞれ既存の物と同じ | それぞれ既存の物と同じ | 参照 |
get_img.c | 画像撮影する | 参照 |
Pythonモジュールの構成図をFigure3に示す。
モジュールはすべて新規作成する。
また、Table4にモジュールの内容をまとめる。
Figure3 Pythonモジュール図
モジュール名 | 機能 | 関数名 | 引数 | 戻り値 | 備考 |
---|---|---|---|---|---|
main.py | Pythonのメインプログラム | main() | 無し | 正常終了:0 異常終了:-1 |
|
py_recv.py | C言語から動作モードを取得する | py_recve() | 無し | 動作モードをint型で返す | |
mode_judje.py | 動作モードの変化を確認する | mode_judje(mode) | int型変数:動作モード | 新たに取得した動作モードを戻り値としてint型で返す | 動作モードが変更された場合のみ動作を終了する |
appeal.py | アピールで使う動作をまとめたモジュール julius.pyをスレッド化しmode_judje.pyを実行する |
appeal(tmp) | int型変数:tmp | 動作モードを戻り値としてint型で返す | py_recv → mode_judje → appealという順で動作モードが渡される julius()をスレッド化する |
julius.py | モジュールモードのJuliusから認識した言葉を取得する 認識した言葉に対する音楽を再生する |
julius_on() | 無し | 無し | Juliusを起動する |
julius(mode,tmp) | int型変数:mode,tmp | 無し | tmp = 0:会話モード tmp = 1:音楽再生モード appeal()でスレッドとして動作する |
||
voice.py | Juliusで認識した言葉に対する音声を発する | voice(t) | 発声する言葉の文字列 | 無し | 引数の言葉を発声する |
アプリケーションの構成図をFigure4に示す。
モジュールはすべて新規作成する。
また、Table5にモジュールの内容をまとめる。
Figure4 アプリケーションのモジュール図
モジュール名 | 機能 | 関数名 | 引数 | 戻り値 | 備考 |
---|---|---|---|---|---|
Run.py | アプリケーションを実行する | App() | 無し | 無し | |
Bluetooth.py | Bluetoothデバイスを検出する | Bluetooth_device_search() | 無し | デバイスのアドレス | |
Bluetoothデバイスを接続する | Bluetooth_connect(add, mode) | デバイスのアドレスと動作モード | 無し | 動作モードの送信を行う | |
App.py | アプリケーションの根幹 WEBページを操作に応じ動作を行う |
@app.route(“HTMLのパス”) | 無し | 遷移先のURLとそのURLのページで使うための情報 | ブラウザ上でURLに応じて動作を行う |
Models.py | データベースを利用するためのテーブルを作成する | 無し 情報を格納しているのみ |
無し | 無し | |
Database.py | データベースとの直接的な接続の情報を格納する | 無し 情報を格納しているのみ |
無し | 無し | |
Key.py | 暗号化キーを扱う | 無し 情報を格納しているのみ |
無し | 無し | |
Index.py | MIRSと接続し操作するための画面 | 無し | 無し | 無し | App.pyからの返り値で動作する |
Top.html | ログイン時の画面 | 無し | 無し | 無し | App.pyからの返り値で動作する |
ソラシは保護者の操作する専用アプリからの操作によって動作モードが切り替わる。
動作モードをTable6にまとめる。
番号 | 動作モード | 内容 |
---|---|---|
1 | アピール | 待合室で待つ子供が興味を持つように、音声、音楽を用いて興味を引く |
2 | 子供乗車待機 | 子供がソラシに乗るように音声で促し、保護者のアプリからの乗車確認を待機する |
3 | ライントレース往路 | 病院の床に敷かれたラインのマーカーからマーカーまでをライントレースで移動する |
4 | 子供降車待機 | 子供がソラシから下りるように音声で促し、保護者のアプリからの降車確認を待機する |
5 | 注射 | 保護者アプリからの注射モードにする |
6 | ライントレース復路 | 病院の床に敷かれたラインのマーカーからマーカーまでをライントレースで移動する |
7 | 終了 | お別れをして再び認識待ちの状態に戻る |
9 | 緊急停止モード |
全ての動作を停止する 再起動を音声で促す |
保護者アプリからの操作の順序をFigure5にまとめる。
Figure5 基本動作フローチャート
プログラムの動作フローチャートをFigure6に示す。
Figure6 プログラムの動作フローチャート
各パートのドキュメントへのリンクを以下に示す。
メカニクス詳細設計書
エレクトロニクス詳細設計書