| 名称 | MVP設計書 |
|---|---|
| 番号 | MIRS2502-DSGN-0003 |
| 版数 | 最終更新日 | 作成 | 承認 | 改訂記事 |
|---|---|---|---|---|
| A01 | 2025.12.08 | 橋本 颯馬 | 初版 |
本ドキュメントは、MIRS2502プロジェクト「散水奉行」のMVP (Minimum Viable Product)構想に基づき、 「走行しながらの散水」を実現するための詳細な設計内容を記述した設計書である。
PC(ROS 2)、LiDAR、webカメラ、足回り(MG4)、散水機構(ポンプ・タンク・ノズル)、清掃用ブラシ、機材ケースで構成される。
全体のシステム構成図を図1に示す。
本システムは上位系のPC(ROS 2)と下位系のマイコン(ESP32)で構成され、それぞれ以下の機能を分担する。詳細プログラムをgithubにまとめ以下のリンクにて示す。
PC側ではUbuntu上で以下のノード群が連携し、認識・判断・経路計画を行う。
| ノード / パッケージ名 | 概要・機能 |
|---|---|
| Behavior_Tree | 全体制御・状態管理 システムの統括制御を担当。探索フェーズや散水フェーズといった状態遷移の管理と、上位判断を行うノード。 |
| micro-ROS Agent | マイコン通信ブリッジ micro-ROS用ノード。ESP32とシリアル通信を行い、マイコンをROS 2ネットワークの一部として組み込む。 |
| sllidar_ros2 | LiDARドライバ・フィルタ RPLiDARとの通信を確立し、スキャンデータ( /scan)のパブリッシュおよび点群の一次フィルタリングを行う。 |
| odometry_publisher | オドメトリ計算 エンコーダー情報のサブスクライブを行い、ロボットの移動量(オドメトリ)を計算して /odom トピックとしてパブリッシュする。 |
| cone_detector | コーン認識 LiDARデータから散水対象となるコーンを認識し、その相対位置を出力するパッケージ。可動範囲定義の基礎となる。 |
| Accum | 位置関係保存 起動時に認識したコーンの位置関係データを蓄積・保存し、システム全体で共有できるようにするノード。 |
| cluster | 点群クラスタリング 点群データのクラスタリング処理を行うノード。ノイズを除去し、コーンなどの物体認識精度を向上させる。 |
| Area | 可動範囲定義 クラスタリングによって得られたコーンの位置関係を基に、ロボットが散水すべき可動範囲(多角形エリア)を定義する。 |
| coverage_planner | 走行経路生成 指定されたエリアを塗りつぶすような走行経路の生成を行うためのパッケージ。 |
| Zigzag | ジグザグ経路算出 Areaノードが定義した可動範囲内を満遍なく走行するためのジグザグ経路を生成する。算出したウェイポイントをNavigation2へ渡す。 |
| Navigation2 | 自律走行・経路計画 自律走行の主要部分。自己位置推定と経路作成を行う。Zigzagノードからのウェイポイントをゴールとし、そこまでの局所的な経路生成と制御を行う。 |
| Scan to PC | データ記録 デバッグや解析用として、スキャンデータをPC内のファイルシステムに保存するノード。 |
ESP32のファームウェアはArduino(C++)ベースで実装されており、以下のファイル群で構成される。 メインループ内でmicro-ROSから、各コールバック関数を通じて制御を行う。
| ファイル名 | 概要・実装機能 |
|---|---|
| mirs24_esp32.ino | メインエントリポイントsetup()で各モジュールの初期化を行い、loop()内で rclc_executor_spin_some を呼び出し、ROS 2通信タスクを継続的に実行する。 |
| config.h | システム設定ヘッダ GPIOピン配置(モータ、エンコーダ、電圧計)、ロボットの物理パラメータ(ホイール径、トレッド幅)、PIDゲイン定数、ROS Domain IDなどを一元管理する。 |
| ros_setup.ino | 通信セットアップ micro-ROS Agentとの接続、ノード( ESP32_node)の作成を行う。Publisher/Subscriber/Service/Timerを初期化し、Executorに登録してイベント管理を行う。 |
| topic_callback.ino | トピック受信・定期処理
|
| service_callback.ino | サービス処理 PC側からのリクエストを処理する。 /esp_update: PIDゲイン等のパラメータを動的に変更する。/reset_encoder: エンコーダのカウント値をリセットする。 |
| vel_ctrl.ino | 速度制御ロジックPID_control()関数にて、目標速度と現在速度の偏差からモータへのPWM出力値を計算(PID)し、ハードウェアドライバに出力する。 |
| encoder.ino | エンコーダ割り込み処理 ハードウェア割り込みを使用してパルスをカウントする。左右のタイヤの回転方向判定と積算を行う。 |
| vlt_obserber.ino | 電圧監視 アナログピンからバッテリー電圧を読み取り、ROSトピック( /vlt)として送信するためのデータを作成する。 |
散水奉行の全体図を以下の図4に示す。
回路部分およびPCを保護するケースの全体図面を図5に示す。また、ケースを構成するアクリル部品として、上部パネル・下部パネル・長辺側面パネル・短辺側面パネルをそれぞれ図6、図7、図8、図9に示す。さらに、中間仕切り、内側仕切り、外側仕切りについては、それぞれ図10、図11、図12に示す。
ポンプの各部位についての図面を以下の図13、図14、図15に示す。
電源基板の回路図と電源基板図面を以下の図16、図17に示す。
esp32基板の回路図とesp32基板図面を図18、図19に示す。
| 部品名 | 型番・仕様 | 単価(円) | 数量 | 備考 |
|---|---|---|---|---|
| コンテナボックス | M-BP-45 BK (43L) | 3,098 | 1 | タンクとして使用 |
| ワンタッチ継手 | MSCNL12-4 | 320 | 2 | ポンプ・チューブ接続 |
| ポリウレタンチューブ | φ12mm 黒 | 999 | 1 | 送水用 |
| デッキブラシスペア | - | 769 | 2 | 清掃用,機体後部に搭載 |
| フレキシブルカップリング | φ5,φ6 | 2,698 | 1 | モーター軸接続用 |
| ベアリング | 内径6mm,外径15mm | 151 | 10 | ポンプ用 |
| セットカラー | 内径6mm,幅10mm | 704 | 3 | ポンプ用 |
| セットカラー | 内径8mm,幅12mm | 836 | 2 | モーター、ブラシ回転用 |
| 散水ジェットノズル | メタル製 | 1,758 | 1 | 散水切り替え用 |
| 制御用PC | - | - | 1 | 貸与品/自前 |
基本はPCからのコマンド送信でスタート。