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

版数 最終更新日 作成 承認 改訂記事
A01 2020.12.2 榊原里樹 初版
A02 2020.12.4 榊原里樹 牛丸先生 初版

目次


  1. 本ドキュメントについて

    本ドキュメントは、ソラシ♬プロジェクトのソフトウェア詳細設計書である。



  2. 基本機能

    Table1に基本機能を示す。

    Table1 基本機能
    機能名 目的 詳細 記述言語
    音楽再生機能 音楽を鳴らす スピーカーから音楽を鳴らす
    音声入力で曲の変更を可能にする
    音声入力によって会話機能に切り替え可能
    Python
    会話機能 特定の言葉に反応して返事をする マイクが特定の音声を拾った場合それに合わせた返事をする
    音声入力によって音楽再生機能に切り替え可能
    Python
    ライントレース機能 病院内をライントレースで移動する 病院の床に専用のラインを引いてそのラインに沿って移動する
    ラインは白のマスキングテープの上に黒のビニールテープを貼り付けたものを使う
    移動は待合室から診察室までの間で行う
    カメラを用いてライントレースを行う
    C++
    ライン二重認識機能(ライントレース①) ラインが二重にひかれたところ(マーカー)を認識する ラインを二重にしたところ(マーカー)を判断できるようにする
    操作待機やアピールの目印とする
    C++
    遠隔操作機能 スマートホンのBluetooth機能で特定の操作を遠隔で行う 専用アプリを用いてソラシのraspberry piとBluetooth通信を行う
    発進・停止などの特定の操作を遠隔で行えるようにする
    C/Python/html
    接近探知機能 人や障害物が接近した場合走行を停止する 超音波センサを用い人や障害物の接近を検知して危険な場合に走行を停止する C言語
    緊急停止機能 問題が起きた際に緊急停止する 緊急停止ボタンを押すことですべての機能が停止する
    アプリからの遠隔停止も可能にする
    C言語


  3. モジュール構成

    各機能を実現するためのモジュール構成を示す。

    1. Arduinoモジュール構成

      Arduinoのモジュール構成をFigure1に示す。
      水色のモジュールは新規作成する
      また、Figure1のモジュールの詳細をTable2にまとめる。



      Figure1 arduinoモジュール構成



      Table2 使用モジュール詳細
      モジュール 機能 関数名 引数 戻り値 備考
      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ポートの操作 参照
    2. Raspberry Piモジュール構成

      Raspberry piにはメイン処理用のC言語プログラムと音声認識用のPythonプログラムを実装する。それぞれのモジュール構成を以下にまとめる。

      1. C言語モジュール構成

        C言語プログラムのモジュール構成をFigure2に示す。
        水色のモジュールは新規作成する。
        また、Table3にモジュールの詳細をまとめる。



        Figure2 C言語プログラムモジュール構成

        Table3 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 画像撮影する 参照
      2. Pythonモジュール構成

        Pythonモジュールの構成図をFigure3に示す。
        モジュールはすべて新規作成する。
        また、Table4にモジュールの内容をまとめる。



        Figure3 Pythonモジュール図



        Table4 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) 発声する言葉の文字列 無し 引数の言葉を発声する
      3. アプリケーションのモジュール構成

        アプリケーションの構成図をFigure4に示す。
        モジュールはすべて新規作成する。
        また、Table5にモジュールの内容をまとめる。



        Figure4 アプリケーションのモジュール図



        Table5 アプリケーションのモジュール構成
        モジュール名 機能 関数名 引数 戻り値 備考
        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からの返り値で動作する


  4. 動作フローチャート

    1. 動作モード

      ソラシは保護者の操作する専用アプリからの操作によって動作モードが切り替わる。
      動作モードをTable6にまとめる。

      Table6 動作モード一覧
      番号 動作モード 内容
      1 アピール 待合室で待つ子供が興味を持つように、音声、音楽を用いて興味を引く
      2 子供乗車待機 子供がソラシに乗るように音声で促し、保護者のアプリからの乗車確認を待機する
      3 ライントレース往路 病院の床に敷かれたラインのマーカーからマーカーまでをライントレースで移動する
      4 子供降車待機 子供がソラシから下りるように音声で促し、保護者のアプリからの降車確認を待機する
      5 注射 保護者アプリからの注射モードにする
      6 ライントレース復路 病院の床に敷かれたラインのマーカーからマーカーまでをライントレースで移動する
      7 終了 お別れをして再び認識待ちの状態に戻る
      9 緊急停止モード 全ての動作を停止する
      再起動を音声で促す
    2. 動作手順

      保護者アプリからの操作の順序をFigure5にまとめる。



      Figure5 基本動作フローチャート

    3. プログラムの動作フローチャート

      プログラムの動作フローチャートをFigure6に示す。



      Figure6 プログラムの動作フローチャート





  5. コーディングルール

      コーディングルールを以下に示す。
    • 基本的にモジュール名と関数名を一致させる
    • 大文字「C」はC言語を表し、それ以外はすべて小文字を使用する
    • C言語のコメントは対象の上か右横に書く
    • 上に書いた場合コメントは「/**/」を、右横に書いた場合コメントは「//」を使用する
    • Pythonのコメントは対象の上か右横に書き、「#」を使用する
    • 「Python」の略を「py」、「receive」の略を「recv」、「execution」の略を「exec」、「template」の略を「tmp」、「application」の略を「app」とする
    • アプリケーションモジュールの頭文字は大文字を用いる
    • インデントはtabを用いる




  6. 各パートへのリンク

    各パートのドキュメントへのリンクを以下に示す。
    メカニクス詳細設計書
    エレクトロニクス詳細設計書






MIRS 2005