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

最終更新日:2019.02.07

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

目次

  1. はじめに

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


  2. 機能概要

    機能概要をtable1に示す。

    table1:機能概要
    機能 内容
    スケジュール管理 タッチディスプレイからスケジュールを変更し、設定された時刻になったときに読み上げる。
    会話 会話開始ボタンを押すことで、会話をすることが出来る。会話終了時に同様のボタンを押す。また会話できる内容に限りがあるので、キーワードとそれに対する返答を以下に示す。
    キーワード:予定/こんにちは。/おはよう。/こんばんは/
    返答:明日の授業は○○です。/こんにちは。/おはよう。/こんばんは。/
    ライブ配信 カメラで授業を撮影してYouTubeでライブ配信することにより、欠席してしまった学生も授業に参加できる。
    配信した動画をアーカイブに残すことで他の学生も授業を見返すことができる。
    首の伸縮 設定された時刻になるとロボメイトの首のモータが動き、首が伸縮する。
    登下校 設定された時刻に登校し所定の位置についたら挨拶する。
    設定された時間に次の日の予定を言い下校する(廊下に行く)。
    呼ばれた座席まで移動 SSHを用いて携帯からロボメイトへ座席番号を送信すると、その座席番号に伴った場所へ移動する。



  3. モジュール構成

    RaspberryPiのPython、C言語のモジュール構成図をfig.1、fig.2に示す。

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

    fig.2: C言語のモジュール構成図

    RaspberryPiの新規モジュールは青ブロック、C言語の黒い太枠内のrequestとarduino以外は全て新規関数。
    RaspberryPiの新規モジュール一覧をtable2,table3に示す。
    Arduinoは既存のモジュールに新規関数を作成したので、作成した関数をtable4に示す。

    table2: RaspberryPi(python)モジュール一覧
    モジュール名 新規・変更関数名 機能 説明
    menu1,menu2 scdl_year
    scdl2_year_mon○
    scdl2_tue○
    scdl2_year_wed○
    scdl2_year_thu○
    scdl2_year_fri○
    年の選択画面を表示する。 ディスプレイに2019年と2020年のボタンを表示する。
    scdl_month2019
    scdl_month2020
    scdl2_month2019
    scdl2_month2020
    日の選択画面を表示する。 ディスプレイに1月から12月のボタンを表示する。
    scdl_day○
    scdl2_day○
    日の選択画面を表示する。 ディスプレイに1日から31日のボタンを表示する。(28~31日がない月はそれらの日を表示しない。)
    scdl_dayofweek○
    scdl2_dayofweek○
    教科の選択画面を表示する 年、月、日から曜日を推定し、曜日にあった教科のボタンを表示する。
    donichi_finish 再選択を促す(土日の場合) 土日を選択した場合に再選択を促す文面とOKボタンを表示する。
    scdl_finish 編集を決定、終了する 編集内容を保存してメイン画面に戻る。
    scdl_cancel 編集をキャンセルする 編集内容を破棄してメイン画面に戻る。
    talk 人の音声を認識し、返事をする 人の音声を認識し、辞書に登録された単語が発話された場合返事をする。
    live haishi.sh YouTubeLiveを開始する。 YouTubeLiveを開始する。

    ※関数名には様々なパターンがあるため末尾の○で省略

    table3: RaspberryPi(C)モジュール一覧
    モジュール名 新規・変更関数名 機能 説明
    run thread_main○_○
    thread_main_in
    thread_main_out
    超音波センサと走行のプログラムをマルチスレッドで処理する。 超音波センサと走行のプログラムをマルチスレッドで処理する。
    thread_run○_○ 指定された座席と撮影する場所を行き来する。 指定された座席では机を正面に見えるように、撮影する場所では黒板を正面に見えるように移動する。
    thread_in
    thread_out
    登下校する。 廊下と撮影する場所を行き来する。
    thread_uss 障害物を検知したら信号をだす。 超音波センサで障害物との距離を測る。
    neck neck_up キリンの頭を上げるモータのpwm値を設定し、一定時間モータを回転させる
    neck_down キリンの頭を下げるモータのpwm値を設定し、一定時間モータを回転させる

    ※関数名には様々なパターンがあるため末尾の○で省略

    table4: arduinoモジュール一覧
    モジュール名新規・変更関数名機能
    motor.ino motor_set_neck 首のモータを制御する

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


  4. フローチャート

    ロボメイトの一日の行動フローチャートをfig.3に示す。

    fig.3: 行動フローチャート


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

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


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

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


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

  5. スレッド構成

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

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

  6. テスト項目

    機能ごとのテスト

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


  7. コーディングルール

    関数・変数について

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

    プログラムについて

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