2025年6月26日 星期四

ROS2 package type ( ament_cmake vs ament_python ) 比較說明

在 ROS 2 中,ros2 pkg create --build-type 可選擇 ament_cmakeament_python,這兩種 build type 分別對應 C++ 與 Python 的開發需求。


🧩 ament_cmake vs ament_python 差別總覽

比較項目ament_cmakeament_python
適用語言C++Python
build 工具CMakesetuptools(Python 的標準打包工具)
使用檔案CMakeLists.txtsetup.py, setup.cfg
通常用途高效能、driver、硬體控制輕量 node、script、AI、robot logic
執行檔產出C++ 編譯出的 binaryPython script 登錄為可執行指令
安裝檔案結構控制更細緻✅(透過 CMake)❌(依 Python 安裝流程)

📁 建立目錄與檔案結構比較

ament_cmake(C++ 套件)

bash
ros2 pkg create --build-type ament_cmake my_cpp_pkg --dependencies rclcpp

建立後結構如下:

objectivec
my_cpp_pkg/ ├── CMakeLists.txt ← CMake 編譯指令 ├── package.xml ← ROS 套件資訊 ├── src/ │ └── my_cpp_pkg_node.cpp ← C++ 程式碼 └── include/ └── my_cpp_pkg/ └── my_cpp_pkg_node.hpp ← C++ 標頭檔(可選)

ament_python(Python 套件)

bash
ros2 pkg create --build-type ament_python my_py_pkg --dependencies rclpy

建立後結構如下:

arduino
my_py_pkg/ ├── package.xml ← ROS 套件資訊 ├── setup.py ← Python 安裝設定 ├── setup.cfg ← 輔助設定 ├── resource/ │ └── my_py_pkg ├── my_py_pkg/ ← Python module 路徑(package name) │ ├── __init__.py │ └── my_node.py ← Python Node code

🚀 執行方式差異

🧱 ament_cmake(C++)

  1. 編譯後產生 binary:

    bash
    ros2 run my_cpp_pkg my_cpp_node
  2. 必須定義可執行檔:
    CMakeLists.txt 加入:

    cmake
    add_executable(my_cpp_node src/my_cpp_pkg_node.cpp) ament_target_dependencies(my_cpp_node rclcpp) install(TARGETS my_cpp_node DESTINATION lib/${PROJECT_NAME})

🐍 ament_python(Python)

  1. 只要設定 entry point 即可讓 Python 檔案變成可執行:

    setup.py 加入:

    python
    entry_points={ 'console_scripts': [ 'my_py_node = my_py_pkg.my_node:main', ], },
  2. 然後執行:

    bash
    ros2 run my_py_pkg my_py_node

📝 使用建議

開發目標建議使用
要使用 C++ 編寫高效能 node、控制硬體、寫驅動程式ament_cmake
要快速撰寫邏輯、ROS node、AI、資料處理、debug scriptament_python
要混合使用 C++ + Python(需跨語言互動)可在同一 workspace 建立不同類型套件




沒有留言:

張貼留言