說明:
本文首發於 Playfish Blog,轉載請保留鏈接。
概述
這將爲你提供一個快速總結,如何使用一個工作空間來啓動和運行。它將是一個實用的教程,並不是用來取代核心文檔的。
背景
Ament是catkin元構建工具的一個迭代。欲瞭解更多有關Ament設計的資料,請參閱本文件。
該源可以在ament Github組織中找到。
先決條件
開發環境
請確保根據build-from-source指令設置開發環境。
基礎知識
一個ament空間是一個具有特定結構的目錄,通常有一個src子目錄,在該子目錄中,源代碼將位於其中,一般情況下,目錄開始爲空。
Ament是由源生成的。默認情況下,它將創建一個和src並行的目錄:build和install目錄。build目錄將是存儲中間文件的地方。對於每個包,將在其中創建一個子文件夾,其中將調用CMake。install目錄是每個包被安裝到的地方。
注意:與catkin相比,沒有devel目錄。
創建目錄結構
在~/ros2_ws下創建基本目錄結構:
mkdir -p ~/ros_ws/src
cd ~/ros2_ws
這是~/ros2_ws的目錄結構,你可以在這一點上看到:
.
└── src
1 directory, 0 files
添加源碼
首先,我們需要安裝一個沒有任何ROS2安裝的底層。wget https://raw.githubusercontent.com/ros2/ros2/master/ros2.repos
vcs import ~/ros2_ws/src < ros2.repos
這是~/ros2_ws的目錄結構,你可以期望在添加了數據源之後(請注意,具體的結構和目錄的數量可能會隨着時間而變化)
.
├── ros2.repos
└── src
├── ament
│ ├── ament_cmake
│ ├── ament_index
| ...
│ ├── osrf_pycommon
│ └── uncrustify
├── eProsima
│ ├── Fast-CDR
│ └── Fast-RTPS
├── ros
│ ├── class_loader
│ └── console_bridge
└── ros2
├── ament_cmake_ros
├── common_interfaces
├── demos
...
├── urdfdom
├── urdfdom_headers
└── vision_opencv
51 directories, 1 file
運行build
因爲這是一個引導環境,我們需要通過它的完整路徑調用ament.py。
注意:在將來,一旦在你的系統上安裝了ament,或者在工作環境下,這將不再是必要的。
由於在ament上沒有devel空間,因此需要安裝它支持的每個包--symlink-install。
這允許通過將source空間中的文件(例如Python文件或其他未編譯的資源)更改爲更快的迭代,從而更改已安裝的文件。
src/ament/ament_tools/scripts/ament.py build --build-tests --symlink-install
運行測試
要運行你剛剛構建的測試,使用--build-test選項,運行以下操作:
src/ament/ament_tools/scripts/ament.py test
如果你在包括測試之前建好了(並且安裝了)工作區,你可以跳過構建和安裝步驟來加快進程。
src/ament/ament_tools/scripts/ament.py test --skip-build --skip-install
source環境
當構造成功完成構建時,輸出將在install目錄中。
要使用你需要的可執行文件和庫,請將install/bin目錄添加到你的路徑中。
Ament將在install目錄中生成bash文件,以幫助設置環境。
這些文件將向你的路徑和庫路徑添加所需的元素,並提供由包導出的bash或shell命令。
. install/local_setup.bash
NB:這與catkin略有不同。
local_setup.*文件與setup.*文件略有不同。它只會應用當前工作區的設置。
當使用多個工作空間時,你仍然會提供setup.*文件獲取環境,包括所有的父工作區。
嘗試演示
通過環境來源,你現在可以運行由ament構建的可執行文件。
ros2 run demo_nodes_cpp listener &
ros2 run demo_nodes_cpp talker
你會看到數字在增加。
讓我們刪除節點並嘗試創建我們自己的工作區覆蓋。
^-C
kill %1
開發你的功能包
在REP 140中,Ament使用和catkin一樣的指定文件package.xml。
你可以在src目錄下創建你自己的功能包,然而,在迭代的時候要用一個疊加來進行迭代。
創建覆蓋
現在你已經設置好了你的引導,你也會發現ament在你的路徑上。
讓我們創建一個新的覆蓋目錄: ~/ros2_overlay_ws。
mkdir -p ~/ros2_overlay_ws/src
cd ~/ros2_overlay_ws/src
並且我們開始覆蓋ros2/examples 存儲庫:
# If you know that you're using the latest branch of all
# repositories in the underlay, you can also get the latest
# version of the ros2/examples repository, with this command:
# git clone https://github.com/ros2/examples.git
# Otherwise, clone a copy from the underlay source code:
git clone ~/ros2_ws/src/ros2/examples
構建覆蓋層,但是讓我們使用debug構建,這樣我們就可以確保得到調試符號:
cd ~/ros2_overlay_ws
ament build --cmake-args -DCMAKE_BUILD_TYPE=Debug
現在這個覆蓋層在現有的覆蓋層之上,所以你會發現`talker`現在指的是來自底層的那個。
如果你source ~/ros2_overlay_ws/install/local_setup.bash將更改爲在覆蓋層中引用talker。
如果你正在返回一個新的終端到你的開發,並且想要在你的覆蓋層上進行開發,你可以簡單地提供~/ros2_overlay_ws/install/setup.bash將自動地爲所有的父工作區環境提供源。
創建自己的包
你可以創建自己的包。
等效的catkin_create_package將被移植到ament,但目前還沒有。
空間支持多種構建類型。
推薦的構建類型是ament_cmake和ament_python。
也支持純cmake包。
它將增加對更多構建類型的支持。
ament_python構建的一個示例是ament_tools包,其中setup.py是構建的主要入口點。
像demo_nodes_cpp這樣的包使用ament_cmake構建類型,並使用CMake作爲構建工具。
提示
- 如果你不想構建一個特定的包,那麼在目錄中放置一個名爲“AMENT_IGNORE”的空文件,它將不會被索引。
"Catch all"選項,例如:--cmake-args應該放在其他選項之後,或用'--'分隔:
ament build . --force-cmake-configure --cmake-args -DCMAKE_BUILD_TYPE=Debug -- --ament-cmake-args -DCMAKE_BUILD_TYPE=Release
- 如果你想從包運行單個特定的測試:
ament test --only-packages YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG