MIRS1805 管理台帳へ戻る
名称 MIRS1805 ソフトウェア詳細設計書
番号 MIRS1805-SOFT-0001

最終更新日:2018.11.07

版数 最終更新日 作成 承認 改訂記事
A01 2018.11.07 佐野、杉山、渡邊 初版
A02 2018.11.15 佐野、杉山、渡邊 第二版
A02 2018.11.16 佐野、杉山、渡邊 牛丸先生 第三版

目次

  1. はじめに

    本ドキュメントはMIRS1805のソフトウェアの詳細設計書について記述したものである。




  2. 機能概要

    機能概要をtable1に示す。

    table1:機能概要
    機能 内容
    スケジュール管理 タッチディスプレイからスケジュールを入力し、ディスプレイ上のスケジュール読み上げボタンが押されたときと設定された時刻になったときに読み上げる。
    会話 会話開始ボタンを押すことで、会話をすることが出来る。会話終了時に同様のボタンを押す。また会話できる内容に限りがあるので、キーワードとそれに対する返答を以下に示す。
    キーワード:明日の予定を教えて。/
    こんにちは。/おはよう。/こんばんは。/今日の天気を教えて。/明日の天気を教えて。/君は誰(君の名は)。/
    返答:明日は授業交代でAがBになります。○○の小テストがあります。○○の宿題があります。/
    こんにちは。/おはよう。/こんばんは。/今日の沼津市の天気は○○です。/明日の沼津市の天気は○○です。/私はロボメイトです。/
    ウェブサービス カメラで授業を撮影して学外用ウェブサイトでライブ配信することにより、欠席してしまった学生も授業に参加できる。
    このウェブサイトではパソコンのキーボードで入力した、テキストと座標番号の送信が可能であり
    テキストを送信するとそのテキストを読み上げ、座標番号を送信するとその座標番号に伴った場所へ移動する。
    遠隔ログインしている場合は休み時間も撮影とライブ配信をする。
    ライブ配信とテキスト読み上げにより質問や会話をすることもでき、Googleドライブに配信した動画を保存することで他の学生も授業を見返すこともできる。
    首の伸縮 設定された時刻になるとロボメイトの首のモータが動き、首が伸縮する。
    登下校 設定された時刻に登校し所定の位置についたら挨拶する。
    設定された時間に次の日の予定を言い下校する(廊下に行く)。
    呼ばれた座席まで移動 学内用ウェブサイトを開いてロボメイトへ座席番号を送信すると、その座席番号に伴った場所へ移動する。



  3. モジュール構成

    arduinoとRaspberryPiのモジュール構成図をfig.1、fig.2に示す。

    fig.1: RaspberryPiのモジュール構成図

    fig.2: Arduinoのモジュール構成図

    RaspberryPiの新規モジュールは青ブロックで、Arduinoの新規モジュールは太い黒線で示す。
    RaspberryPiの新規モジュール一覧をtable2,table3、Arduinoの新規モジュール一覧をtable4に示す。

    table2: RaspberryPi(python)モジュール一覧
    モジュール名 新規・変更関数名 機能
    schedule schedule_choice スケジュールの編集をするか読み上げをするか選ぶ。
    write write スケジュールを編集する。
    read read 入力されたテキストを読み込む。
    display display 編集されたスケジュールを表示する。
    audio_out audio_out 音声出力する。
    talk talk 人の音声を認識し、内容に応じた返事をする。
    audio_in audio_in_n マイクでの音声入力をする。
    audio_in_w ワイヤレスマイクでの音声入力をする。
    button button_check ボタンが押下されたかを確認する。
    io io_open GPIOをオープンにする。
    io_get_open ボタンが押下されたかを確認する。
    login_menu login_menu 質問・会話をする時、ロボメイトを移動させる時に外部のパソコンからのテキスト送信をする。
    record record 録画する。
    live live ライブ配信をする。
    camera camera 動画を撮影する。
    upload upload 動画と音声をアップロードする。
    web web ウェブサイトから映像の視聴や遠隔操作をできるようにする。
    call_menu call_menu ロボメイトを近くに呼ぶときにスマートフォンでの座標番号の送信をする。

    table3: RaspberryPi(C)モジュール一覧
    モジュール名 新規・変更関数名 機能
    run run_reset 走行の初期化をする。
    run_go 受け取った座標の場所へ移動する。
    seat seat_route 入力された座標を読み取ってそれを渡す。
    neck neck_move 首を伸び縮みさせる。

    table4: arduinoモジュール一覧
    モジュール名 新規・変更関数名 機能
    neck_ctrl run_ctrl_execute() 走行制御の処理を実行する。
    run_ctrl_set(double speed, double dist) 速度・距離指令値を与える。
    encoder encoder_get(long *ctl_neck) エンコーダに使用するピンの設定とエンコーダカウント関数の割り込み設定を行う。
    distance distance_get(double *dist_neck) タイヤの走行距離を取得する。
    motor motor_set(int pwm_neck) モータに使用するピンの設定を行う。
    vel_ctrl vel_ctrl_set(double vel_neck) 速度制御の処理を実行する。
    vel_ctrl_get(double *vel_neck) 回転の速度の指令値を与える。

    RaspberryPiの既存モジュールに関してはMIRSMG4 ドキュメント管理台帳を参照。
    Arduinoの既存モジュールに関してはMIRSMG4 ドキュメント管理台帳を参照。




  4. ユーザーインターフェース

    ユーザーインターフェースの画像を以下に示す。

    fig.3: ディスプレイのユーザーインターフェース




  5. フローチャート

    外部ログインありの時の行動フローチャートをfig.4に示す。

    fig.4: 外部ログインありの時の行動フローチャート

    外部ログインなしの時の行動フローチャートをfig.5に示す。

    fig.5: 外部ログインなしの時の行動フローチャート

    走行時の行動フローチャートをfig.6に示す。

    fig.6: 走行フローチャート

    ブロックフローチャートをfig.7に示す。

    fig.7:ブロックごとの行動フローチャート

    緊急停止ボタンが押されたらどの動作の場合でもモーターの回転を強制終了する。

  6. スレッド構成

    以下にスレッドの構成を示す。

    RaspberryPi
    ・メインスレッド
    ・首の伸縮スレッド
    ・会話スレッド

  7. テスト項目

    機能ごとのテスト


    table5: 機能ごとのテスト
    テスト名 テスト内容
    移動テスト 学外用と学内用のウェブサイトで入力された座席まで移動するか
    登下校するときに決められた時刻になったら所定の位置に行くか
    授業中にウェブサイトで入力があっても移動しないか
    原点回帰テスト 移動した後、決められた時刻になったら所定の位置に戻るか
    スケジュール編集テスト スケジュール編集ボタンをクリックしてスケジュール編集ができるか
    スケジュール読み上げテスト スケジュール読み上げボタンをクリックしてスケジュール読み上げと表示ができるか
    スケジュールお知らせテスト 決められた時刻になったら自動でスケジュール読み上げと表示ができるか
    音声認識&会話テスト 音声を認識して、内容に応じた返答ができるか
    撮影テスト 決められた時刻になったら撮影してアーカイブを残せるか
    コメントテスト 学外用ウェブサイトで入力されたテキストの読み上げができるか
    伸縮テスト 決められた時刻になったら首の伸縮が行われるか

    統合テスト

    遠隔ログイン時に移動しながらテキストを読み上げられるか

    撮影をしながらテキストの読み上げができるか

    撮影をしながら音声を録音できるか

  8. コーディングルール

    関数・変数について

    関数は最初の文字を大文字にしてそれ以外は小文字にし、最初にモジュール名を書く。二単語以上のときはアンダーバー(_)でつなぐ。
    変数名は小文字で書き、二単語以上のときはアンダーバー(_)でつなぐ。

    プログラムについて

    適宜コメントを入れて読みやすくする。

    バージョン管理について

    バージョン管理は新しい機能を追加するごとにそのバージョンのバックアップをとり、バージョンの数字を上げていく。
    また、足した機能をテキストファイルにまとめていく。