在了解 ROS 2 基本操作後,對開發者而言下一步就是要學習怎麼建構自己的專案。這邊會介紹一般 ROS 2 的資料夾結構應該是怎樣,以及如何進行開發編譯。
如果開發過 ROS 1,應該會比較習慣 ROS 2 的專案形式。差異大概是有些資料夾名稱不一樣,而且編譯的工具也不一樣,其他基本上是大同小異。
通常我們在一個 ROS 的專案資料夾中,會有如下幾個資料夾
build, install, log 這三個資料夾都是編譯後自動產生出來的,在編譯前你只需要把程式碼放到 src 資料夾即可。
那麼在 src 資料夾的程式碼應該要怎麼擺放呢?一般而言在 src 資料夾底下可以放有多個小專案,編譯工具會自動遞迴去找 src 資料夾下的所有小專案並且編譯。這樣設計的原因是我們可以把一個大功能拆分成多個小專案,而這些小專案就可以輕易地被重複利用。
下面我們分兩個區塊來介紹,一個是取得已有專案,另一個是自己建立新專案。
我們直接舉個實際的例子幫助大家了解,下面是我們下載既有專案的過程:
第一步大家應該比較好理解,就是先建立前面所提到的資料夾結構。重要的是第二步,我們需要把組成專案的所有程式碼抓下來,但如前面所提,一個大專案是由多個小專案組合而成,而這個結構通常會紀錄在 .repos
檔中。我們可以看一下到底裡面紀錄什麼。
可以看到有這個列表中有 component1 和 component2,而他們也是組成這個專案的 repo。底下會註明是用什麼版控工具(type: git),專案位置(url: xxxx),以及要取這個專案哪個版本或 commit(version: xxx)。用這個列表就可以輕易管理專案的各個元件版本,也比較不會出現當某個小元件更新後會影響到整個專案的狀況。
那要怎麼利用這個列表把程式碼下載下來呢?這就要用 vcs 這套工具。vcs 是 vcstool 專案的 CLI 工具,他可以輕易把紀錄在 .repos
的程式碼下載下來。以上面範例為例,vcs import src < project.repos
代表把 project.repos 中的元件下載下來並且放入 src 資料夾。當然 vcs 還有其他好用功能,但是最常用的還是 import 為主。
自己建立專案的話就比較麻煩一點,需要使用到 ROS 2 的 ros2 pkg create
,以下面為例。
執行 ros2 pkg create
時,依照你的 --build-type
不同,可以決定是 C++ 專案還是 Python 專案。你可以直接進入專案的資料夾中,會看見底下有 package.xml
的資料夾,這個就是 ROS 2 用來辨認專案內容的描述檔,裡面的細節之後再來介紹。
了解如何取得程式碼後,我們就需要了解怎麼編譯。在 ROS 2 的世界中,進行編譯的重要工具就是 colcon,比較細節的部份可以參考官網。我們先來看看下面的範例:
執行完成後,你就會發現 your_workspace
底下產生了 build, install, log 三個資料夾。
這邊稍微提一下 C++ 的 ROS 2 專案是使用 cmake 來進行編譯管理的。因此我們舉 C++ 為例說明這三個資料夾的功用,你可以想像 build 資料夾就是放置執行 make
所產生的中間檔,而 install 則是用來放置 make install
要安裝的編譯結果。所以如果要撰寫 ROS 2 C++ project 時,要能夠被使用者執行的檔案一定要有 install 才行。
當然 colcon build
也是可以帶參數的,下面列出一些常用的執行指令:
執行的部份就非常容易了,只要 source your_workspace/install/local_setup.bash
後,你就可以輕易使用 ros2 run
或 ros2 launch
執行你編譯好的專案。這邊細節就不再多提了。