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

版数 最終更新日 作成 承認 改訂記事
A01 2023.10.27 山本 凜久 初版
A02 2023.10.27 山本 凜久 香川 議事録

目次

  1. ドキュメント概要
  2. 機能概要
  3. 各デバイスのモジュール構成
  4. フローチャート
  5. 別パートへのリンク

1.ドキュメント概要

本ドキュメントはMIRS2302に関するソフトウェア詳細設計についてまとめたものである。

2.機能概要

実装する機能とその概要を以下table1に示す。

table1.機能と概要

機能 機能概要 記述言語
自律走行機能 自己位置を推定し、予約状況から移動経路を決定する
決定された移動経路に基づいて自律走行する
障害物を検知した場合は停止する
python,arduino言語
Webアプリケーション クライアントが手配(配送・受取・注文)を行う
iPadでユーザへの情報を表示する
管理者用ページでは管理者用・デバッグ用情報を表示する
html,JavaScript,php,python
セキュリティ機能 サーボモータを用いたロック機構で扉の施錠・解錠を行う
マイクロスイッチを用いて扉のこじ開けを検知する
不正なモジュールの取り外しを検知する
加速度センサを用いて機体の持ち去りを検知する
異常が検知された際に管理者にメールを送信し、iPadで警告音を鳴らす
html,JavaScript,php,python,arduino言語
予約状況管理機能 配達の予約状況の管理を行う python
モジュール管理機能 接続されているモジュールの識別、TENQ全体の高さの算出、模型用バッテリの残量管理を行う
サーミスタとペルチェ素子を用いて保冷・保温モジュール内の温度調整を行う
python,arduino言語

3.モジュール構成

以下にモジュール構成図と各モジュールの動作概要を示す。

fig1.モジュール構成図


※GPSをiPadから取得し、自己位置推定に使用するつもりであった為、技術調査を行なった。GPSの技術調査報告書のリンクを以下に示す。
GPSの技術調査報告書

table2.フロントエンドに関するモジュールの動作概要

モジュールの場所 モジュール名 動作概要
main/ index.html 各種メニューに遷移するボタンを配置したトップページ
main/send/ index.html 「送る」手配をするための入力フォーム
get_available_selection.js オーダー状況をもとにユーザが入力できる選択肢(受け取り時間・場所)を制限する
get_available_selection.php フォームデータを受け取りpythonに予約状況を問い合わせ、結果をjsに返す
receive.php フォームデータを受け取りpythonに流す
main/receive/ index.html 「送ってもらう」手配をするための入力フォーム
get_available_selection.js オーダー状況をもとにユーザが入力できる選択肢(受け取り時間・場所)を制限する
get_available_selection.php フォームデータを受け取りpythonに予約状況を問い合わせ、結果をjsに返す
receive.php フォームデータを受け取りpythonに流す
main/order/ index.html 「注文」手配をするための入力フォーム
get_order_state.js オーダー状況をもとにユーザが入力できる選択肢(受け取り時間・場所)を制限する
get_available_selection.php フォームデータを受け取りpythonに予約状況を問い合わせ、結果をjsに返す
receive.php フォームデータを受け取りpythonに流す
main/track/ index.html 予約番号を入力するフォーム
request_order_state.js 予約状況を問い合わせてレスポンスを出力する
receive.php フォームデータを受け取りpythonに予約状況を問い合わせ、結果をjsに返す
main/private/:要DIGEST認証 index.html 管理用・デバッグ用情報を表示する
get_state_for_admin.js ユーザの操作に応じて動的にhtmlを表示する
get_state_for_admin.php ユーザの操作をjsから受け取り、pythonに流す
main/ipad/:要DIGEST認証 index.html ユーザへの情報を表示する
get_state.js ユーザの操作に応じて動的にhtmlを表示する
get_state.php ユーザの操作をjsから受け取り、pythonに流す

table3.バックエンドと本体の動作に関するモジュールの動作概要

モジュール名 動作概要
web_app.py webページの要素の更新、情報の管理を行う
配達の手配があった際に受取人に承認メールを送信する
異常が検知された際に管理者にメールを送信し、iPadで警告音を鳴らす
order_mng.py 配達の予約状況を管理する
module_mng.py Arduinoから受け取った情報をもとにモジュールを識別し、TENQ全体の高さを算出する
模型用バッテリの電圧値、搭載モジュール、モジュール空き状況などTENQの状態を管理する
鍵の開閉の指示を出す
マイクロスイッチが押されているかを検知する
モジュールのこじ開けを検知する
不正なモジュールの取り外しを検知する
routing.py 予約状況、推定された自己位置をもとに移動経路を決定する
決定された移動経路をもとに直進、回転動作をシーケンス化する
run_ctrl.py 移動シーケンスファイルを読み取り、モータの動作を制御する
決定された移動経路とモータのエンコーダの値をもとに走行速度を制御する
障害物を認識した場合は停止命令を送る
positioning.py 地磁気センサから取得した機体の向き、LiDARから得た周囲の情報をもとに自己位置の推定を行う
img_detection.py 接続されたカメラを用いて画像認識を行う
画像認識とLiDARから得た周囲の情報をもとに障害物を検知する
angle_monitor.py 加速度センサから取得した加速度を用いて、機体の持ち去りを検知する
serial_com.py Raspi-Arduino間の情報交換をシリアル通信で行う
main.ino setup関数およびloop関数の定義
serial.ino Arduino-Raspi間の情報交換をシリアル通信で行う
battery_monitor.ino 模型用バッテリの電圧を測定する
module_mng.ino モジュールに付いている抵抗両端の電圧を読み取る
サーボモータをPWMで制御する
サーミスタからモジュール内部の温度を取得する
取得した温度をもとにペルチェ素子にかける電圧を制御する
run_ctrl.ino モータのエンコーダ値を読み取る
Raspiで決定された走行情報をもとにモータにかける電圧を制御する

※LiDARを使用するにあたり、技術調査を行なった。RPLiDARの技術調査報告書のリンクを以下に示す。
RPLiDARの技術調査報告書

4.フローチャート

4-1.全体

全体のフローチャートを以下に示す。

fig2.全体のフローチャート

4-2.モジュール認識

モジュール認識のフローチャートを以下に示す。

fig3.モジュール認識のフローチャート

4-3.配達手配

配達手配の成立条件のフローチャートを以下に示す。

fig4.配達手配の成立条件のフローチャート

4-4.経路決定

移動経路決定のフローチャートを以下に示す。

fig5.経路決定のフローチャート

4-5.走行

走行のフローチャートを以下に示す。

fig6.走行のフローチャート

4-6.集荷

集荷のフローチャートを以下に示す。

fig7.集荷のフローチャート

5.購入物品

購入を予定している物品を以下に示す。

table4.購入物品

物品名 型番 単価(税込) 数量 価格(税込) URL 備考
RPLiDAR 1 URL 自己位置推定に使用する

6.別パートへのリンク

MIRS2302の別パートの詳細設計書へのリンクを以下に示す。

MIRS2302 メカニクス詳細設計書
MIRS2302 エレクトロニクス詳細設計書

MIRS2302ドキュメント管理台帳へ