welcom ! Handel home

2025年2月26日 星期三

ROS2 中取代 roscore 的 DDS 機制

 ROS2 中取代 roscore 的機制

ROS1 中,roscore 是整個 ROS 系統的核心,負責管理 節點、話題 (Topics)、參數 (Parameters) 和 服務 (Services)。但在 ROS2 中,沒有 roscore,因為 ROS2 採用了去中心化架構,也就是說,不需要 ROS Master 來協調節點間的通訊。

📌 roscore 在 ROS1 中的主要功能

功能ROS1 (roscore) 負責ROS2 替代方案
節點發現 (Node Discovery)rosmasterDDS (Data Distribution Service)
話題管理 (Topics Management)rosmasterDDS + ros2 topic 工具
參數伺服器 (Parameter Server)rosparamros2 param 工具
服務管理 (Service Management)rosmasterDDS + ros2 service 工具
記錄日誌 (Logging)/rosoutros2 logging (內建到節點)

ROS2 如何取代 roscore

ROS2 中,roscore 被拆分成不同的機制:

  1. 去中心化架構

    • ROS2 使用 DDS (Data Distribution Service) 作為 通信中介,不需要 rosmaster 來維護節點、話題或服務的狀態。
    • 節點一啟動,就能自動發現彼此 (Discovery),這是 DDS 內建的功能。
  2. 節點發現 (Discovery)

    • ROS2 使用 DDS 動態發現節點,類似 roscore 但完全分散式。
    • 可以使用:
      sh
      ros2 node list
      來檢查有哪些節點正在運行。
  3. 話題管理 (Topics)

    • ROS1 需要 roscore 來維護話題列表 (rostopic list)。
    • ROS2 直接透過 DDS 管理,可以使用:
      sh
      ros2 topic list
      來查看目前的話題。
  4. 參數伺服器 (Parameter Server)

    • ROS1 使用 rosparam 作為中央參數伺服器。
    • ROS2 的節點 各自管理自己的參數,可以透過:
      sh
      ros2 param list
      來查看所有節點的參數。
  5. 日誌 (Logging)

    • ROS1 使用 /rosout 來記錄所有節點的日誌。
    • ROS2 內建 統一的日誌機制 (rcl_logging),可以直接查詢:
      sh
      ros2 topic echo /rosout

📌 ROS2 的 roscore 替代方案

雖然 ROS2 沒有 roscore,但仍有一些等效指令可用:

1️⃣ 啟動 ROS2 的核心功能

sh
ros2 daemon start

這會啟動 ROS2 後台管理程序 (ros2 daemon),讓指令運行更快。


2️⃣ 查詢 ROS2 節點

sh
ros2 node list

顯示當前運行的所有節點。


3️⃣ 查詢 ROS2 話題

sh
ros2 topic list

檢視目前的話題列表,等效於 ROS1 的 rostopic list

監聽某個話題:

sh
ros2 topic echo /example_topic

4️⃣ 查詢 ROS2 參數

sh
ros2 param list

列出所有節點的參數。

設定參數:

sh
ros2 param set /my_node my_param 42

5️⃣ 查詢 ROS2 服務

sh
ros2 service list

等效於 ROS1 的 rosservice list,列出當前的 ROS2 服務。

呼叫某個服務:

sh
ros2 service call /example_service std_srvs/srv/Trigger "{}"

🔎 roscore 在 ROS2 中的對應指令

ROS1 (roscore 功能)ROS2 替代指令
roscore 啟動🚫 不需要
rosnode listros2 node list
rostopic listros2 topic list
rostopic echo /topicros2 topic echo /topic
rosparam listros2 param list
rosservice listros2 service list
/rosout (日誌)ros2 topic echo /rosout

🚀 總結

  1. ROS2 不需要 roscore,因為它採用了去中心化架構,由 DDS 負責節點發現與通訊
  2. 所有 roscore 的功能(話題管理、節點管理、參數伺服器等)已被 ros2 CLI 指令取代
    • ros2 node list 取代 rosnode list
    • ros2 topic list 取代 rostopic list
    • ros2 param list 取代 rosparam list
    • ros2 service list 取代 rosservice list
  3. ROS2 仍有 ros2 daemon 來加速 CLI 查詢,但不是 roscore

🔹 ROS2 更加靈活,不再依賴中心化的 roscore,並且透過 DDS 自動管理通訊! 🚀

沒有留言: