2025年4月10日 星期四

ROS 2 桌機(高性能電腦) 加入架構中

 

ROS 2 桌機(高性能電腦) 加入架構中,可大幅提升運算能力、管理整體導航/SLAM/監控/決策邏輯,讓 Raspberry Pi 4 專注處理車體低層感測與控制邏輯,這樣的架構非常「實戰型」,以下是完整的任務分配與修正後的分散式 ROS 2 系統架構規劃


🧠 架構總覽:Raspberry Pi 4 + Desktop ROS 2 分散式任務分配

plaintext
╔══════════════════════════╗ ║ ROS 2 Desktop Workstation (i5 + RTX4060) ║ ╚══════════════════════════╝ │ (Wi-Fi / LAN) ▼ ┌─────────────────────────────────────────────┐ │ ROS 2 DDS 通訊(Fast DDS / Cyclone DDS) │ └─────────────────────────────────────────────┘ ▲ (USB Camera / IMU / Motor Control) │ ╔═══════════════════════╗ ║ Raspberry Pi 4 (with Hailo-8) ║ ╚═══════════════════════╝

🧩 任務分配建議(基於 ROS 2 架構)

📦 Raspberry Pi 4(Edge device - 車載端)

功能ROS 2 node 建議備註
Camera 驅動usb_cam / v4l2_camera發佈 /camera/image_raw
IMU 資訊處理imu_driver_node發佈 /imu/data
編碼器回報encoder_node發佈 /wheel/encoder
馬達控制motor_bridge_node訂閱 /cmd_vel
AI 推論hailo_yolo_node發佈 /detected_objects
基本本地反應控制可有(緊急停止)可判斷前方障礙即停車

🖥️ 桌機端 ROS 2(主要計算端)

功能ROS 2 node 建議備註
VSLAM(視覺定位)orb_slam3_ros / vins_fusion訂閱 /camera/image_raw + /imu/data
地圖建構map_server, slam_toolbox可記錄地圖供重用
導航規劃nav2 stack利用 /map, /odom, /goal 計算 /cmd_vel
路徑避障dwb_controller, bt_navigator整合 YOLO + SLAM 作為 costmap
視覺監控rviz2顯示車體、路徑、推論結果
記錄與調試rosbag2, rqt_graph非常適合除錯

🔌 網路通訊設定(必做)

1️⃣ ROS 2 DDS 多裝置通訊

ROS 2 使用 DDS 通訊(推薦 Fast DDS 或 Cyclone DDS),不需額外安裝 bridge,只要:

bash
# 在桌機與 Raspberry Pi 都設環境變數(IP = 各自的 IP) export ROS_DOMAIN_ID=0 export RMW_IMPLEMENTATION=rmw_fastrtps_cpp export ROS_NAMESPACE=robot1

2️⃣ 確認能互 ping

確保 Raspberry Pi 與桌機處於 同一個子網段 或透過 ROS bridge/router 進行中繼。


📐 修正後的系統模組圖(含 ROS Node 與 Topic)

bash
[Desktop ROS2] ┌────────────┬────────────────────┬─────────────┐ │ /map │ ← SLAM Node │ │ │ /odom │ ← nav2 │ │ │ /goal │ → nav2 │ │ │ /cmd_vel │ → Pi motor │ │ │ /rviz2 │ 視覺化 │ │ └────────────┴────────────────────┴─────────────┘ ▲ │ DDS ▼ [Raspberry Pi 4 + Hailo-8] ┌────────────┬────────────┬────────────┬────────────┐ │ /camera/image_raw → SLAM/YOLO │ │ /imu/data → SLAM │ │ /detected_objects → nav2 costmap │ │ /cmd_vel ← nav2 控制 │ │ /wheel/encoder → 本地控制 or nav2 │ └────────────┴────────────┴────────────┴────────────┘

🧠 系統運作順序建議

  1. Pi 上啟動

    • 相機節點

    • IMU 驅動

    • Hailo 推論節點

    • motor_bridge 控制橋節點

  2. 桌機上啟動

    • ORB-SLAM3 + IMU 模式(需同步相機與 IMU 時間)

    • nav2 stack

    • RViz2 監控

    • /goal 發送器(可用點選方式設定導航點)

  3. ROS 2 DDS 溝通

    • /camera/image_raw ➜ 傳回桌機

    • /cmd_vel ➜ 傳給 Pi 控制器


🔧 開發與測試建議

項目建議
預測延遲Pi → Desktop 相機圖像傳輸延遲需低(建議 640x480 @ 15fps)
系統時鐘同步可用 chronyntpdate 將 Pi 對桌機做時間同步
頻寬限制建議使用壓縮影像(image_transport + compressed)
AI 推論優化YOLO 推論在 Pi 上進行,僅送回推論結果

🎁 加值選項

類別功能技術建議
即時監控Web UI用 Flask + MJPEG 串流
語音指令與導航整合使用 ros2_whisper 搭配指令 topic
手動控制手機/滑鼠透過 /cmd_vel 控制

這樣架構非常模組化且未來擴展性強,你可以:

  • 加多台車 ➜ 設 ROS_NAMESPACE 不衝突

  • 在桌機記錄資料 ➜ 後處理或訓練新模型

  • 混合控制模式(遠端規劃 + 本地避障)

沒有留言:

張貼留言