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

版数 最終更新日 作成 承認 改訂記事
A01 2024.12.09 松島 明寛 香川 真人 初版

目次

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

1.ドキュメント概要

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

2.機能概要

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

table1.機能と概要

機能 機能概要 記述言語
自律走行機能 ros2とslamによって自己位置推定・経路選択・速度制御を実行 python, C言語, C++, xml, markdown
カメラ撮影 USBカメラによる映像取得
カメラの画角調整
python, java script, arduino言語, html, css
通知機能 webアプリ, LINE
・人検知時の通知
・機体転倒時の通知
python, java script
音声の送受信 各コンピュータに接続したマイク音声の送受信

pc→raspiのみ
文章を音声データとして送信
python, java script
機体の状況監視 ・走行用バッテリーの電圧監視
・機体の転倒監視
・物体の接近監視
python, arduino言語, C言語

webアプリに実装する機能とその概要を以下のtable2に示す。

table2.webアプリ機能概要

機能 機能概要 詳細
カメラ 映像表示 リアルタイムのカメラ映像の表示
録画 録画ボタンにより実行後、録画データを保存
録画データ再生 録画データの再生
カメラ画角調整 カメラの画角を設定する
カメラ画角のイメージ表示 カメラの画角について俯瞰したイメージ図を表示する
人検知時の通知設定 on/off 通知音のon/offを設定
音量設定 通知音の音量を設定
pcスピーカ設定 on/off pcスピーカのon/offを設定
音量設定 pcスピーカの音量を設定
raspiスピーカ設定 on/off raspiスピーカのon/offを設定
音量設定 raspiスピーカの音量を設定
マイク/文章再生機能切り替え raspiスピーカで再生する音声をpcのマイク音声か文章再生かの切り替え
文章設定 文章再生機能選択時、再生する文章を設定する
バッテリー 残量表示 各バッテリーの充電状態を表示

3.モジュール構成

以下にpcで実装するモジュールの構成図を示す。

fig1.pcのモジュール構成図


以下にpcで実装するモジュールのうち、srcコードの構成図を示す。

fig2.pcのソースコードにおけるモジュール構成図


以下にraspiで実装するモジュールの構成図を示す。

fig3.raspiのモジュール構成図


以下にjetson nanoで実装するモジュールの構成図を示す。ただし、インストールするパッケージやビルド実行時に作成されるディレクトリは、具体的なファイル名を省略する。

fig4.jetson nanoのモジュール構成図


以下にesp32で実装するモジュールの構成図を示す。

fig5.esp32のモジュール構成図


以下にarduinoで実装するモジュールの構成図を示す。

fig6.arduinoのモジュール構成図


以下にタブレットで実装するモジュールの構成図を示す。

fig7.タブレットのモジュール構成図


table3.pcで実装するモジュールの動作概要

フォルダ名 ファイル名 詳細
mirs2402/ templates/ index.html フロントエンドのメインファイル
map.html 校内マップと機体の現在地を表示
camera.html 受信した映像データを表示
video.html 録画した映像ファイルを再生するページ
audio.html pc及びraspiのスピーカの音量等の設定
static/ js/ map.js 機体の座標データの表示処理
camera.js カメラ映像の表示、人検知時の通知音再生
pc_audio.js pcのスピーカの各種設定
raspi_audio.js raspiのスピーカの各種設定
css/ styles.css webアプリの表示形式設定
audio/ notification.mp3 人検知時の通知音
maps/ map.png 校内マップの写真データ
map.pgm 校内のマップデータ
map.yaml pgmファイルのパラメータ設定
video/ ~.mp4 録画データの保存フォルダ
src/ pc_main.py pc側のバックエンドのメインプログラム
map_main.py マップ表示処理のメインファイル
pc_distiination_sender.py 機体の目的地または巡回ルートを送信
pc_location_receiver.py 機体の現在地の座標を受信
pc_location_data.py 校内の教室名と座標データの関連を設定
pc_camera_main.py webカメラ操作のメインファイル
pc_camera_reciever.py カメラ映像の受信
pc_camera_angle.py カメラの画角の数値データをraspiに送信
human_detection.py 物体を検知し、人が映った時に通知音を再生
pc_audio_main.py スピーカ、マイク操作のメインプログラム
pc_audio_sender.py pcのマイク音声を送信
pc_audio_receiver.py raspiのマイク音声を受信
pc_battery.py 各バッテリーの電圧状況を受信

table4.raspberry piに実装するモジュールの動作概要

モジュール名 詳細
ultrasonic_monitor.py arduinoから物体接近を受信し、モータの停止信号をJetson nanoに送信
rp_main.py raspi側のメインプログラム
rp_camera_main.py カメラ映像メインプログラム
rp_camera_sender.py カメラ設定、映像送信
rp_camera_angle.py カメラの画角の数値データをarduinoに送信
rp_audio_main.py raspiのスピーカ・マイク操作メインプログラム
rp_audio_sender.py raspiのマイク音声を送信
rp_audio_receiver.py pcのマイク音声を受信
rp_battery.py 各バッテリーの電圧状況を送信

table5.Jetson nanoに実装するモジュールの動作概要

フォルダ名 ファイル名 詳細
ros2_ws src/ robot_main/ launch/ robot_system.launch.py Jetson nanoの処理を統合
config/ system_params.yaml システム全体の各パラメータ設定
component_config.yaml 各コンポーネントの有効/無効設定
scripts/ system_manager.py システムの状態管理
sllidar_ros2/ lidarの処理パッケージ
slam_toolbox/ config/ mapper_params.yaml slamのパラメータ設定
maps/ 作成したマップの保存フォルダ
robot_control/ config/ robot_params.yaml 機体のパラメータ設定
navigation_params.yaml 経路設定時の関連パラメータを設定
launch/ robot_control.launch.py ロボットの自律走行実行用launchファイル
slam.launch.py slam実行用launchファイル
src/ socket_bridge.py PC・raspiとの通信ブリッジ
coodinate_handler.py 座標データの変換・管理
robot_interfaces/ msg/ odometry.msg オドメトリデータの受信
micro_ros_agent/ config/ agent_config.yaml micro_ros_agentの設定

table6.esp32に実装するモジュールの動作概要

モジュール名 詳細
main.ino esp32のメインプログラム
define.h 各パラメータ設定
motor_control.h 走行用モータ制御
encoder.h ロータリーエンコーダの読み取り
imu.h 加速度センサの読み取り
micro_ros_transport.h オドメトリデータ・tfデータのパブリッシュ
quaternion.h クォータニオンの処理

table7.arduinoに実装するモジュールの動作概要

モジュール名 詳細
arduino_main.ino arduinoのメインプログラム
define.h 各パラメータ設定
battery_monitor.h 走行用バッテリーの電圧監視
ultrasonic_monitor.h 超音波センサにより物体接近の監視
camera_sv_motor.h カメラの画角調整用サーボモータの制御

4.フローチャート

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

fig8.走行時のフローチャート


走行は基本的に目的地を設定した時のみに実行される。自動巡回時は複数の目的地をリストとして受け取るため、このフローチャートを連続で処理することとなる。また、機体の転倒判断はesp32に接続した加速度センサで実行し、物体の接近判断はLidarと超音波センサで実行する。機体の座標はオドメトリデータとtfデータから判断する。

超音波センサをarduinoに接続する理由を次に示す。

・raspiはカメラやマイクの処理に集中するため。

・esp32ではピン数が足りないため。

・jetson nanoでは接続が不可能なため

カメラや音声の通信は相互のデータのやり取りのみであり、これらは同時に処理を実行するため、フローチャートは示さない。

5.購入物品

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

table8.購入物品

物品名 型番 単価(税込) 数量 価格(税込) URL 備考
jetson nano NVIDIA-JETSON-NANO-B01 30,800 1 30,800 URL 鄭研究室より借用
GPUによりros2とslamの処理を高速化する
esp32 ESP32-DevKitC 1,600 1 1,600 URL mirs24全体で購入
micro_rosによりオドメトリデータを処理
RPLidar RB-Rpk-13 116,142 1 116,142 URL 自己位置推定に使用
標準機部品として配布

6.別パートへのリンク

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

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

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