名称 | MIRS2302 ソフトウェア詳細設計書 |
---|---|
番号 | MIRS2302-SOFT-0001 |
版数 | 最終更新日 | 作成 | 承認 | 改訂記事 |
---|---|---|---|---|
A01 | 2023.10.27 | 山本 凜久 | 初版 | |
A02 | 2023.10.27 | 山本 凜久 | 香川 | 議事録 |
本ドキュメントはMIRS2302に関するソフトウェア詳細設計についてまとめたものである。
実装する機能とその概要を以下table1に示す。
table1.機能と概要
機能 | 機能概要 | 記述言語 |
---|---|---|
自律走行機能 |
自己位置を推定し、予約状況から移動経路を決定する 決定された移動経路に基づいて自律走行する 障害物を検知した場合は停止する |
python,arduino言語 |
Webアプリケーション |
クライアントが手配(配送・受取・注文)を行う iPadでユーザへの情報を表示する 管理者用ページでは管理者用・デバッグ用情報を表示する |
html,JavaScript,php,python |
セキュリティ機能 |
サーボモータを用いたロック機構で扉の施錠・解錠を行う マイクロスイッチを用いて扉のこじ開けを検知する 不正なモジュールの取り外しを検知する 加速度センサを用いて機体の持ち去りを検知する 異常が検知された際に管理者にメールを送信し、iPadで警告音を鳴らす |
html,JavaScript,php,python,arduino言語 |
予約状況管理機能 | 配達の予約状況の管理を行う | python |
モジュール管理機能 |
接続されているモジュールの識別、TENQ全体の高さの算出、模型用バッテリの残量管理を行う サーミスタとペルチェ素子を用いて保冷・保温モジュール内の温度調整を行う |
python,arduino言語 |
以下にモジュール構成図と各モジュールの動作概要を示す。
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の技術調査報告書
全体のフローチャートを以下に示す。
fig2.全体のフローチャート
モジュール認識のフローチャートを以下に示す。
fig3.モジュール認識のフローチャート
配達手配の成立条件のフローチャートを以下に示す。
fig4.配達手配の成立条件のフローチャート
移動経路決定のフローチャートを以下に示す。
fig5.経路決定のフローチャート
走行のフローチャートを以下に示す。
fig6.走行のフローチャート
集荷のフローチャートを以下に示す。
fig7.集荷のフローチャート
購入を予定している物品を以下に示す。
table4.購入物品
物品名 | 型番 | 単価(税込) | 数量 | 価格(税込) | URL | 備考 |
---|---|---|---|---|---|---|
RPLiDAR | 1 | URL | 自己位置推定に使用する |
MIRS2302の別パートの詳細設計書へのリンクを以下に示す。
MIRS2302 メカニクス詳細設計書