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

版数 最終更新日 作成 承認 改訂記事
A01 2025.1.24 大内 雅寛 香川真人 初版




-目次-


1. ドキュメント

2. 機能概要

table1. 機能概要
機能 概要 記述言語
自律走行 ROS2とNavigation2を用いて、自己位置推定・移動経路の決定をしロボットの自立走行を行う。 Python,Arduino
水の管理・提供 ペルチェ素子を用いて水を冷却する。また、ポンプを用いて水を汲み上げる。 Arduino
Webアプリケーション(タブレット) タブレットの画面からロボットの移動の停止・再開や水の提供の操作を行えるようにする。 Python,HTML,JavaScript
Webアプリケーション(自律走行) webページでロボットの移動スケジュールを設定できるようにする。
ロボットの現在位置や今後の移動スケジュールを公開する。
Python,HTML,JavaScript

3. モジュール構成

3-1. PC

PCのモジュールの構成図を以下に示す。
fig1. PCのモジュール構成図

fig2にmirs_navigationのモジュール構成図を示す。
fig2. mirs_navigationのモジュール構成図

table2. mirs_navigationのモジュール動作概要
モジュール名 概要
patrol_tree.xml Navigation2のビヘイビアツリー
mirs_navigation.launch.py Navigation2を起動する
mirs2404.launch.py navigation_control_node,web_config_node,raspi_receiver_nodeを起動する
mapNIT.pgm
mapNIT.yaml
校内のマップ
nav2_params.yaml Navigation2のパラメータファイル
fig3にnavigation_controlのモジュール構成図を示す。
fig3. navigation_controlのモジュール構成図

table3. navigation_controlのモジュール動作概要
モジュール名 概要
schedule.yaml ロボットが移動する時間と区間を設定
sections.yaml ロボットが移動する場所のマップ上の座標を設定
navigation_control_node.py ロボットの自律移動を時間に応じて管理する
web_config_node.py ナビゲーションのスケジュール設定をweb上で管理する
fig4にwebsocketのモジュール構成図を示す。
fig4. websocketのモジュール構成図

table4. websocketのモジュール動作概要
モジュール名 概要
config.ini webサーバのIPアドレスを設定
raspi_receiver_node.py iPadでの操作に応じて、ROS2のサービスのリクエストを送ったりnav2のアクションをキャンセルしロボットの移動を停止したりする
fig5にiPadのwebアプリのモジュールの構成図を示す。
fig5. iPadのwebアプリのモジュール構成図

table5. iPadのwebアプリのモジュール動作概要
モジュール名 概要
config.ini webサーバのIPアドレスを設定
socket_connection.py WebSocketを使用してRaspberry Piにデータを送信する
web_main.py navigation_control_node,web_config_node,raspi_receiver_nodeを起動する
display_switching.jp ボタンの表示/非表示を切り替える関数を実装
post.js ボタンの状態をサーバーに送信する関数を実装
progress_model.js 水を出しているときのプログレスバーと水出し完了時の画面の表示
script.js 停止、水出しのボタンの制御
timer.js 水出し中に表示するプログレスバーをタイマーで制御
style.css Webアプリのボタンやレイアウト等のスタイルを定義
index.html Webアプリのメインファイル
fig6にスケジュール共有のwebアプリのモジュールの構成図を示す。
fig6. スケジュール共有のwebアプリのモジュール構成図

table6. スケジュール共有のwebアプリのモジュール動作概要
モジュール名 概要
server.js webサーバー
style.css webアプリのスタイルを定義
script.js /amcl_poseトピックを購読し、ロボットの現在位置を表すマーカーを表示
index.html 移動スケジュール・ROSとの接続状態・ロボットの現在位置を表示

3-2. Raspberry Pi

fig7~9にRaspberry Piのモジュール構成図を示す。
fig7. Raspberry Piのモジュール構成図

fig8. mirsのモジュール構成図

fig9. mirs_msgsのモジュール構成図

table7. mirs_msgsのモジュール動作概要
モジュール名 概要
config.yaml クローラーの半径や幅、PIDゲインの設定ファイル
mirs.launch.py navigation_control_node,web_config_node,raspi_receiver_nodeを起動する
basic_command.cpp ボタンの表示/非表示を切り替える関数を実装
encoder_reset.cpp ボタンの状態をサーバーに送信する関数を実装
odometry_publisher.cpp エンコーダの値からオドメトリを計算
parameter_publisher.cpp クローラーの半径や幅、PIDゲインのパラメータを管理
parameter_update.cpp yamlファイルからパラメータを読み込み更新する
reboot.cpp ESP32再起動用の簡易サービスクライアント
BasicParam.msg Webアプリのメインファイル
srv/ サービスの設定ファイル

3-3. ESP32

fig10にESP32のモジュール構成図を示す。
fig10. ESP32のモジュール構成図

table8. ESP32のモジュール動作概要
モジュール名 概要
mirs2404_esp32.ino 変数・setup関数・loop関数の定義
config.h 定数の定義
encoder.ino エンコーダーで左右のクローラーの回転をカウント
multi_setup.ino マルチタスクの設定
pel.ino ペルチェ素子用のpwm信号を出力
pomp.ino ポンプの回転を制御
pubsub_callback.ino ROS関連の動作を定期的に実行
ros_setup.ino ROSの設定
server_callback.ino ROSのサーバーが呼び出されたときの動作を実装
servo.ino サーボモーターの回転を制御
thermistor.ino サーミスタから温度を取得
vel_ctrl.ino 走行用モーターの回転を制御
vlt_obserber.ino バッテリーの電圧を監視

4.フローチャート

4-1.走行のフローチャート

fig11に走行のフローチャートを示す。
fig11. 走行のフローチャート

4-2.iPadのフローチャート

fig12にiPadのフローチャートを示す。
fig12. iPadのフローチャート



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