這是一個用colcon如何建立和編譯ROS工做區的簡要教程。這是一個實用的教程,並不是來替代核心文檔。
ROS 2 在Bouncy以前的發行版,使用的編譯工具是ament_tools
,這在ament教程中有闡述。html
1. 背景colcon
是ROS編譯工具catkin_make
,catkin_make_isolated
,catkin_tools
和ament_tools的換代
。有關colcon設計的更多信息,請參閱此文檔。
源代碼能夠在colcon GitHub organization中找到。node
2. 先決條件python
2.1 安裝ROS 2
確保按照安裝說明安裝了ROS 2 。
注意:若是從Debian軟件包安裝,本教程須要「桌面安裝」。git
2.2 安裝colcon
Liunx:github
sudo apt install python3-colcon-common-extensions
OS X :shell
python3 -m pip install colcon-common-extensions
Windows:bash
pip install -U colcon-common-extensions
3. 基礎知識
一個ROS工做空間是具備特定結構的目錄。一般有一個src
子目錄。該子目錄是ROS包的源代碼所在的位置。一般無特殊的話,目錄一開始爲空。
colcon完成源代碼編譯。默認狀況下,它將建立如下和src
目錄的同級目錄:工具
build
目錄是存儲中間文件的位置。對於每一個包,將建立一個子文件夾,例如調用CMake。install
目錄是每一個軟件包的安裝目錄。默認狀況下,每一個包都將安裝到單獨的子目錄中。log
目錄包含有關每一個colcon調用的各類日誌記錄信息。注意:與catkin相比,沒有devel
目錄。測試
3.1 建立一個工做空間
首先,建立一個目錄(ros2_example_ws
)來包含咱們的工做區:
Linux / OSX:ui
mkdir -p ~/ros2_example_ws/src cd ~/ros2_example_ws
Windows:
md \dev\ros2_example_ws\src cd \dev\ros2_example_ws
此時工做空間包含一個空目錄src
:
. └── src 1 directory, 0 files
3.2 增長一些源文件
讓咱們將示例存儲庫複製到src
工做區的目錄中:
git clone https://github.com/ros2/examples src/examples
注意:建議檢查版本是否與已安裝的ROS版本兼容(例如crystal
)。
如今工做區應該有ROS 2示例的源代碼:
. └── src └── examples ├── CONTRIBUTING.md ├── LICENSE ├── rclcpp ├── rclpy └── README.md 4 directories, 3 files
3.3 Source 底層(underlay)
有一點很重要,咱們爲現有的ROS 2安裝提供了環境,這將爲咱們的工做區提供示例包所需的編譯依賴關係。這是經過source二進制安裝或源文件安裝提供的安裝腳原本實現的,即另外一個colcon工做區(請參閱安裝)。咱們稱此環境爲底層(underlay)。
咱們的工做空間 ros2_examples_ws
將覆蓋(overlay)在現有的ROS 2安裝的頂層(ROS 2 工做空間的覆蓋機制,查看)。一般,在計劃迭代少許軟件包時,建議使用工做空間覆蓋機制,而不是將全部軟件包都放在同一個工做空間。
3.4 編譯工做空間
在工做區的根目錄中,運行 colcon build。即便有些編譯類型,例如 ament_cmake,不支持 devel 空間的概念,而且須要包安裝,但colcon支持 --symlink-install 選項。這容許經過更改 source 空間中的文件來更改已安裝的文件,以便更快地進行迭代(例如Python文件或其餘未編譯的資源)。
colcon build --symlink-install
編譯完成後,咱們應該會看到 build、install 和 log 目錄:
. ├── build ├── install ├── log └── src 4 directories, 0 files
3.5 運行 tests
爲測試剛建立的功能包,運行下面指令:
colcon test
3.6 source 環境
當colcon成功完成編譯後,輸出將在install
目錄中。爲了使用可執行文件和庫,你須要將諸如 install/bin
目錄添加到路徑中。colcon將在install
目錄中生成bash / bat文件以幫助設置環境。這些文件將向你我的路徑和庫路徑添加所需的元素,並提供由包導出的bash或shell命令。
Linux / OS X:
. install/setup.bash
Windows:
call install\setup.bat
3.7 小試牛刀
在 source 後的環境中,咱們能夠運行colcon編譯的可執行文件。讓咱們從示例中運行訂閱者節點:
ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
在另外一個終端中,讓咱們運行一個發佈者節點(不要忘記 source 安裝腳本):
ros2 run examples_rclcpp_minimal_publisher publisher_member_function
您應該看到來自發布者和訂閱者的消息,而且數字會遞增。
4. 建立你本身的包
colcon使用REP 149定義的package.xml
規範(也支持 fromat 2)。
colcon支持多種編譯類型,推薦的編譯類型是ament_cmake
和ament_python
,也支持純cmake
包。ament_python
編譯的一個示例是ament_index_python包,其中setup.py是編譯的主要入口點。
諸如demo_nodes_cpp之類的包使用 ament_cmake
編譯類型,並使用 CMake 做爲編譯工具。
爲方便起見,您可使用工具 ros2 pkg create 基於模板建立新包。
注意:對於catkin
用戶來講,catkin_create_package 與 ros2 pkg create 的做用相同
。
5. 小貼士
若是您不想編譯一個特定的包,用來在目錄中放置一個叫 COLCON_IGNORE 的空文件,那麼它將不會被編入索引。
若是想避免在CMake軟件包中配置和編譯 tests,你能夠經過這個指令:--cmake-args -DBUILD_TESTING=0。
若是要從包中運行單個特定測試:
colcon test --packages-select YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG
英文原文:https://index.ros.org/doc/ros2/Tutorials/Colcon-Tutorial/