官方英文文檔:Creating a package — ROS 2 Documentation: Humble documentation
中文參考:古月ROS2 功能包講解 - 圖書資源
省流,就學習一個命令
ros2 pkg create --build-type <build-type> <package_name>
ROS2的重要概念
工作空間(Workspace)??:【ROS2 】工作空間(workspace)——ROS2核心概念1
??功能包(Package)??:解耦的功能代碼,一個workspace可有不同的編譯代碼(python、C++)
??節點(Node)??:機器人的“工作細胞”,最小執行單元,負責單一功能(如傳感器驅動)。
??話題(Topic)??:節點間異步傳遞數據的“橋梁”,基于發布/訂閱模型(如傳感器數據流)。
??服務(Service)??:同步的“你問我答”機制,適用于需即時響應的短任務(如開關控制)。
??動作(Action)??:復雜行為的“流程管理”,支持長時間任務、反饋與取消(如導航到目標點)。
??通信接口(Interface)??:數據傳遞的“標準結構”,定義消息(.msg)、服務(.srv)、動作(.action)格式。
??參數(Parameter)??:機器人系統的“全局字典”,動態鍵值對配置(如超時時間、IP地址)。
??分布式通信(Distributed Communication)??:跨多計算平臺的“任務分配”,支持機器人集群協同工作。
??DDS(Data Distribution Service)??:ROS2底層的“神經網絡”,實現實時、可靠的通信中間件
功能包與workspace的關系
在源碼下,有多個子代碼,不同的編譯方式
workspace_folder/src/cpp_package_1/CMakeLists.txtinclude/cpp_package_1/package.xmlsrc/py_package_1/package.xmlresource/py_package_1setup.cfgsetup.pypy_package_1/...cpp_package_n/CMakeLists.txtinclude/cpp_package_n/package.xmlsrc/
功能包的創建
創建命令
ros2 pkg create --build-type <build-type> <package_name>
ros2 pkg create --build-type --help
-
pkg:表示功能包相關的功能;
-
create:表示創建功能包;
-
package_name:新建功能包的名字
-
build-type:說明
-
可選值 {cmake,? ament_cmake,ament_python} 表示新創建的功能包是C++還是Python的,
-
ament_cmake:使用C++或者C,那這里就跟,如果
-
ament_python:使用Python,;
-
cmake:開發非ROS2的C/C++庫 →
CMake
(避免ROS2生態干擾)
-
擴展閱讀: ament
ament
?原意為??植物的「柔荑花序」??(如柳絮),其特點是??多個小單元緊密連接成鏈狀結構??,隱喻ROS2構建系統將??多個獨立功能包串聯成完整應用??的過程。- 這一命名延續了ROS生態的「自然隱喻」風格(如ROS1的
catkin
意為「柳絮」?
Q1: 能否在ament_cmake
包中混合Python代碼?
- ? 可以,但需手動配置安裝規則(如
ament_python
自動處理更便捷)。
Q2: 為什么ament_python
不需要CMakeLists.txt
?
- 因為它使用
setup.py
替代了CMake的角色,通過setuptools
管理構建流程。
。
?
案例:分別創建c++ 和python版本的功能包
cd ~/dev_ws/src # 自定義機器人工程的src庫
ros2 pkg create --build-type ament_cmake learning_pkg_c # C++
ros2 pkg create --build-type ament_python learning_pkg_python # Python
c++ 創建后文件
python 創建后文件
編譯功能包
在創建好的功能包中,我們可以繼續完成代碼的編寫,之后需要編譯和配置環境變量,才能正常運行:
cd ~/dev_ws
colcon build # 編譯工作空間所有功能包
source install/local_setup.bash