welcom ! Handel home

2025年4月14日 星期一

ESP32 ➜ ROS 2 通訊流程圖

 以下是 ESP32 使用 micro-ROS 發送資料到 ROS 2 系統的完整通訊流程圖,並說明每個環節的角色與功能:


📊 ESP32 ➜ ROS 2 通訊流程圖(UART 或 Wi-Fi)

mermaid
graph TD subgraph microcontroller A[ESP32 MCU<br/>FreeRTOS + micro-ROS Client] --> B[rclc Publisher<br/>建立 ROS topic] B --> C[XRCE-DDS 客戶端<br/>封裝 ROS message 資料] end C -->|UART / Wi-Fi / UDP| D[micro-ROS Agent<br/>(PC or Raspberry Pi)] D --> E[Fast DDS<br/>轉換成 DDS 訊息格式] E --> F[ROS 2 rclcpp / rclpy Nodes<br/>接收 ROS 訊息] style A fill:#fffbdd,stroke:#d2b100,stroke-width:1px style D fill:#e0f7fa,stroke:#00796b,stroke-width:1px style F fill:#e1f5fe,stroke:#0288d1,stroke-width:1px

🧠 各環節詳細解說

區塊元件 / 功能備註說明
ESP32 MCUFreeRTOS + micro-ROS Client執行 micro-ROS runtime,透過 C 語言撰寫 ROS 程式
rclc Publisher建立 std_msgs::msg::Int32 或其他app.c 中建立 publisher,定期發布資料
XRCE-DDS Clientmicro-ROS Runtime 封裝傳輸資料利用 XRCE-DDS 協定,將 ROS 訊息壓縮為輕量封包
UART/Wi-Fi實體或無線傳輸層使用 serial, UDP, Wi-Fi 根據設定傳送封包
micro-ROS AgentROS 端的橋接器接收 XRCE-DDS,並轉換成 ROS 2 DDS 訊息
Fast DDSROS 2 的 DDS 實作micro-ROS Agent 預設使用 Fast DDS
ROS 2 Noderclpy / rclcpp 節點處理訊息可訂閱 topic,例如 /esp32_pub,接收 MCU 傳來的資料

✅ 實作補充:ESP32 → ROS2 topic 範例

  • ESP32 app.c (micro-ROS Client)

c
rcl_publisher_t publisher; std_msgs__msg__Int32 msg; msg.data = 42; rclc_publisher_init_default( &publisher, &node, ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32), "esp32_pub" );
  • ROS 2 主機端接收

bash
ros2 topic echo /esp32_pub std_msgs/msg/Int32

🌐 備選通訊方式

傳輸方式優點適用場景
UART穩定、低功耗有線串口(如 USB-TTL)
Wi-Fi無需接線、彈性大與 router / PC 溝通
UDP可跨網段遠端 ROS2 主機

如果你有興趣,我也可以補上:

  • ESP32 建立 publisher 的完整 app.c 範例

  • ESP32 透過 Wi-Fi 進行 UDP 傳輸的 micro-ROS 設定方式

  • ROS 2 + Agent Docker 容器接收流程自動化腳本

沒有留言: