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

版数 最終更新日 作成 承認 改訂記事
B01 2024.02.16 山本 凜久, 眞辺 開 初版
B02 2024.02.16 山本 凜久, 眞辺 開 香川 図表番号の修正

目次

  1. ドキュメント概要
  2. 機能概要
  3. モジュール構成
  4. フローチャート
  5. 購入物品
  6. 別パートへのリンク

1.ドキュメント概要

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

2.機能概要

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

table1.機能と概要

機能 機能概要 記述言語
自律走行機能 ROSのnavigation stackを用いて自己位置推定・経路設定・速度制御を行う ROS melodic, python, C, C++
Webアプリケーション
フロントエンド
ユーザが 各自のスマホ / iPad のformにて 手配(送る・受け取る・注文する) / PINコードの入力 を行う
iPadで ロボットの状態 / ユーザ向けの情報 を表示する

バックエンド
オーダー情報を管理する
オーダーが重複しないように手配formの選択肢を制限する
ユーザにロボットの状態に応じたメールを送信する
html, JavaScript, css, php, python
セキュリティ機能 PINコードで本人確認を行う
モジュールの取り外しを検知する
扉のこじ開けを検知する
異常が検知された際に管理者にメールを送信する
python, arduino言語
モジュール管理機能 接続されているモジュールの識別を行う
指定の扉を自動で解錠する
保冷・保温モジュール内の温度調整を行う
python, arduino言語

3.モジュール構成

3-1.arduino

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

fig1. arduino - モジュール構成図


table2. arduino - モジュール動作概要

モジュール名 動作概要
main.ino setup関数およびloop関数の定義
serial.ino Arduino-Raspi間の情報交換をシリアル通信で行う
run_ctrl.ino モータのエンコーダ値を読み取る
モータにかける電圧を制御する
module_mng.ino モジュールに付いている抵抗両端の電圧を読み取る
サーボモータをPWMで制御する
サーミスタからモジュール内部の温度を取得する
取得した温度をもとにペルチェ素子にかける電圧を制御する
param.h ゲインやパラメータ、入出力ピンなどの定義

3-2.raspberry pi

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

fig2. raspberry pi - モジュール構成図


table3. raspberry pi - モジュール動作概要(メイン駆動部)

モジュール名 動作概要
main.py メイン制御モジュール
serial_com.py raspi-arduino間の情報交換をシリアル通信で行う
run_ctrl.ino モータのエンコーダ値を読み取る
モータにかける電圧を制御する
ros_to_arduino.py rosのデータをシリアル通信でarduinoに送信する
raspi_to_ros.py raspiのデータをソケット通信でrosに送信する
run_ctrl.py arduinoにモータ動作に関する指令値を送信する
order_mng.py オーダー情報の書き込み、読み込みを行う
module_mng.py arduinoから受け取った情報をもとにモジュールを識別する
搭載モジュール情報を更新し続ける
指定の扉を解錠する
モジュールの取り外しを検知する
扉のこじ開けを検知する
sock.py ソケット通信を行う
web_app.py ユーザ・管理者へメールを送信する
config.py IPやパラメータが定義されている
robot_state_publisher.py ロボットのステータスを更新する

table4. raspberry pi - モジュール動作概要(webアプリバックエンド)

モジュール名 動作概要
authentication.py PINコードの照合を行う
confirm.py PINコードで認証を行う
select_option_api.py オーダー情報をもとに手配formの選択肢を制限する
get_timetable.py 予約状況のタイムテーブルを取得する

3-3.jetson

実装にあたり必要な情報をMIRS2302-REPT-0007-MIRS機体におけるROSを用いた自律走行より抜粋した。

3-3-1.トピック

navigation stackにおいて用いるトピックのうち、主要なものを次に示す。


table5. navigation stackの主要トピック

トピック名 内容 メッセージ肩
/odom エンコーダの値を積分したりsinしたりcosしたりして、求められたロボットの位置情報 並進/回転方向の位置/速度を含む nav_msgs/Odometry
/cmd_vel ロボット速度の指令値 並進方向と回転方向を含む geometry_msgs/Twist
/scan LiDARの測距データ sensor_msgs/LaserScan
/map ROS用のマップデータ(8bitグレースケール)を画像として配信 nav_msgs/OccupancyGrid
/move_base_simple/goal 自動走行の目的地 位置と方向を含む geometry_msgs/PoseStamped
/move_base/status 自動走行のステータス(走行中/完了/失敗など) actionlib_msgs/GoalStatus


3-3-2.ノード

実装すべきノードを、処理の順番にしたがって示す。

(1).【自作必須】odom publisher

Subscribe : なし
Publish : /odomトピック

ロボットのタイヤの偏角(エンコーダ値)を取得して、ロボットの座標へと変換する。
基本的にはArduinoとのシリアル通信でエンコーダ値を取得するが、TENQにおいてはエンコーダ信号をGPIOに入力し、C言語でこれを計算する。


(2). scan publisher

Subscribe : なし
Publish : /scanトピック

LiDARの測距データを配信する。基本的には、LiDARのメーカや有志によりROS用パッケージが配布されているため、それを使用する。
TENQで使用するRPLiDAR用ノードは、次のgithubリポジトリからcloneする。 https://github.com/Slamtec/rplidar_ros


(3). amcl

Subscribe : /odom /map /scan トピック
Publish : map座標系からodom座標系へのtf

odomトピックによる自己位置には、外乱やスリップによる誤差が生じる。また、この誤差は走行を続けるに連れて誇大化していく。
これを修正するため、LiDARの測距データとマップとを照らし合わせて、より正確な自己位置を推測し、提供するのがAMCLである。


(4). move_base

Subscribe : 位置情報に関する諸々
Publish : /cmd_velトピック

AMCLによって提供された現在位置から、目的地までのルートを決定する。また、障害物がある場合にはこれを避けるルートを提供する。
ルートに基づきロボットの速度を決定し、これをpublishする。


(5).【自作必須】 cmd_vel subscriber

Subscribe : /cmd_velトピック
Publish : なし

cmd_velトピックは、ロボットの並進方向速度および回転方向速度を司令する。
これを左右モータの速度に変換し、信号をArduinoないしモータドライバに送信する。
基本的には、(1)で行った変換の逆を行えばよい。



3-4.Webアプリケーション

以下にwebアプリに関するモジュール構成図と動作概要を示す。

fig4. webアプリ - モジュール構成図(全体)


fig5. webアプリ - モジュール構成図(main/)


fig6. webアプリ - モジュール構成図(about/)


fig7. webアプリ - モジュール構成図(send/)


fig8. webアプリ - モジュール構成図(receive/)


fig9. webアプリ - モジュール構成図(order/)


fig10. webアプリ - モジュール構成図(table/)


fig11. webアプリ - モジュール構成図(ipad/)


table6. webアプリ - モジュール動作概要(ディレクトリごと)

ディレクトリ名 動作概要
main/ 各種メニューに遷移するボタンを配置したトップページ
ページ読み込み時に営業情報を問い合わせ、営業時間外もしくは予約がいっぱいの場合は専用ページに飛ばす
about/ 案内用ページ
TENQについての説明、利用方法、問い合わせformなどのリンクを記載する
send/ 「荷物を送る」手配をするための入力フォーム
send/accept/ 「荷物を送る」手配の承認用ページ
receive/ 「荷物を受け取る」手配をするための入力フォーム
receive/accept/ 「荷物を受け取る」手配の承認用ページ
order/ 「商品を注文する」手配をするための入力フォーム
order/accept/ 「商品を注文する」手配の承認用ページ
table/ 予約状況のタイムテーブルを作成する
ipad/ 本体上部に設置されているipadの専用ページ
ロボットの現在の状態を取得して表示、またユーザが本人確認を行うページを表示する

4.フローチャート

4-1.全体

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

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

4-2.モジュール認識

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

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

4-3.配達手配

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

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

4-4.走行

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

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

4-5.集荷

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

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

5.購入物品

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

table7.購入物品

物品名 型番 単価(税込) 数量 価格(税込) 備考
2D LiDAR RPLiDAR S2M1 1

6.別パートへのリンク

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

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


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