welcom ! Handel home

2025年2月17日 星期一

ROS 2 與 ROS 1 的 Workspace(工作目錄)差異

 

📌 ROS 2 與 ROS 1 的 Workspace(工作目錄)差異

ROS(ROS 1)ROS 2 中,開發者都需要使用 workspace(工作目錄) 來組織和編譯專案,但它們的架構和工具有所不同。以下是主要的差異:


1️⃣ ROS 1 Workspace(Catkin Workspace)

在 ROS 1 中,開發者使用 Catkin 來管理和編譯專案,並且通常使用 Catkin Workspace,其目錄結構如下:

bash
ros1_ws/ # ROS 1 的工作目錄 ├── src/ # 存放 ROS 1 套件(packages) │ ├── my_package/ # ROS 1 套件 │ │ ├── CMakeLists.txt # CMake 構建文件 │ │ ├── package.xml # 套件描述文件 │ │ ├── src/ # C++ 程式碼 │ │ ├── scripts/ # Python 範例 │ │ ├── launch/ # 啟動文件 │ │ ├── msg/ # 自定義訊息類型 │ │ ├── srv/ # 服務 (Service) │ │ └── config/ # 參數設定 ├── build/ # 建置(build)後的目錄 ├── devel/ # 編譯後的開發環境(setup.bash 會在這裡) └── install/ # 安裝後的文件

ROS 1 工作區特點

  • 使用 Catkin(CMake-based)作為建構工具。
  • 編譯命令catkin_makecatkin build
  • 環境設定
    bash
    source devel/setup.bash
  • 可支援多個獨立的 workspace,但需要透過 overlay 機制來管理。
  • 需要 package.xmlCMakeLists.txt 來定義 ROS 套件。

2️⃣ ROS 2 Workspace(Colcon Workspace)

在 ROS 2 中,開發者改用 Colcon 作為建構工具,並使用 Colcon Workspace,其目錄結構如下:

bash
ros2_ws/ # ROS 2 的工作目錄 ├── src/ # 存放 ROS 2 套件 │ ├── my_package/ # ROS 2 套件 │ │ ├── CMakeLists.txt # CMake 構建文件 │ │ ├── package.xml # 套件描述文件 │ │ ├── src/ # C++ 程式碼 │ │ ├── scripts/ # Python 程式碼 │ │ ├── launch/ # 啟動文件 │ │ ├── msg/ # 自定義訊息類型 │ │ ├── srv/ # 服務 (Service) │ │ └── config/ # 參數設定 ├── build/ # 建置(build)後的目錄 ├── install/ # 安裝後的文件 ├── log/ # Colcon 編譯日誌 └── colcon.meta # 可選,Colcon 設定文件

ROS 2 工作區特點

  • 使用 Colcon 作為建構工具,而不是 Catkin。
  • 編譯命令colcon build
  • 環境設定
    bash
    source install/setup.bash
  • 不再使用 devel/ 目錄,取而代之的是 install/ 目錄來存放所有安裝的資源。
  • 支援 Python 套件,可以使用 setup.py 而非 CMakeLists.txt 來定義 Python 套件。
  • 更加模組化,可以在 ROS 2 中更輕鬆地開發和管理多個 packages。

3️⃣ 主要差異比較

項目ROS 1(Catkin Workspace)ROS 2(Colcon Workspace)
建構工具catkin_makecatkin buildcolcon build
建構系統Catkin(CMake-based)Colcon(更靈活)
環境變數source devel/setup.bashsource install/setup.bash
安裝方式devel/ 目錄存放開發環境install/ 目錄取代 devel/
Python 支援主要用 CMake + package.xml可使用 Python setup.py
編譯依賴管理需要手動處理 package.xmlcolcon 可自動解析依賴
模組化架構需要 catkin overlay內建支援多個 workspace
啟動指令roslaunch my_package file.launchros2 launch my_package file.launch.py

4️⃣ 何時使用哪個 Workspace?

  • 如果你在使用 ROS 1,請使用 Catkin Workspace,並透過 catkin_make 來編譯專案。
  • 如果你在使用 ROS 2,請使用 Colcon Workspace,並透過 colcon build 來建置專案。
  • 如果你需要同時開發 ROS 1 & ROS 2(如 ros1_bridge),你需要 兩個 workspace,然後 source 兩者:
    bash
    source /opt/ros/noetic/setup.bash # ROS 1 source /opt/ros/humble/setup.bash # ROS 2

📌 結論

  1. ROS 1 使用 Catkin Workspace,ROS 2 使用 Colcon Workspace
  2. Colcon 更適合管理多個 packages 並支援 Python,而 Catkin 主要依賴 CMake
  3. Colcon 自動管理依賴關係,不需要像 Catkin 一樣手動處理 overlay。
  4. ROS 2 廢除了 devel/ 目錄,改用 install/ 來管理已編譯的 packages

🚀 如果你要開發 ROS 2,建議使用 Colcon Workspace!

沒有留言: