名称 | MIRS2402 ソフトウェア詳細設計書 |
---|---|
番号 | MIRS2402-SOFT-0001 |
版数 | 最終更新日 | 作成 | 承認 | 改訂記事 |
---|---|---|---|---|
A01 | 2024.12.09 | 松島 明寛 | 香川 真人 | 初版 |
本ドキュメントはMIRS2402に関するソフトウェア詳細設計についてまとめたものである。
実装する機能とその概要を以下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のマイク音声か文章再生かの切り替え | |
文章設定 | 文章再生機能選択時、再生する文章を設定する | |
バッテリー | 残量表示 | 各バッテリーの充電状態を表示 |
以下に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 | カメラの画角調整用サーボモータの制御 |
走行時のフローチャートを以下に示す。
fig8.走行時のフローチャート
走行は基本的に目的地を設定した時のみに実行される。自動巡回時は複数の目的地をリストとして受け取るため、このフローチャートを連続で処理することとなる。また、機体の転倒判断はesp32に接続した加速度センサで実行し、物体の接近判断はLidarと超音波センサで実行する。機体の座標はオドメトリデータとtfデータから判断する。
超音波センサをarduinoに接続する理由を次に示す。
・raspiはカメラやマイクの処理に集中するため。
・esp32ではピン数が足りないため。
・jetson nanoでは接続が不可能なため
カメラや音声の通信は相互のデータのやり取りのみであり、これらは同時に処理を実行するため、フローチャートは示さない。
購入を予定している物品を以下に示す。
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 | 自己位置推定に使用 標準機部品として配布 |
MIRS2402の別パートの詳細設計書へのリンクを以下に示す。
MIRS2402 メカニクス詳細設計書