哇!不知不覺已經寫完1/3了,社畜如我,這10天來下班->(運動)->回家寫鐵人賽,感覺生活變充實了許多呢XD
前幾天講完了package.xml
和CMakeList.txt
,今天理所當然的就是要講他們兩個撰寫的目的:為了能夠成功編譯package囉! 目前ROS1.0主要使用的編譯器是catkin,ROS2.0使用的則是colcon,因為筆者目前接觸到的專案兩者都有,就來稍微比較一下兩者之間的差異吧!
使用catkin編譯的方法很簡單,就是在workspace的初始目錄下catkin_make:
$ catkin_make
這個步驟其實等於包含了cmake和make,前面會先讀取package.xml和CMakeList.txt建立編譯的規則(cmake的部分),之後再開始進行編譯(make的部分),編完之後會建立devel/,build/和install/資料夾(若沒有install的規則就不會有install的),分別放置編好的程式檔和環境變數。
catkin_make另外可以下的參數有:
catkin_make install
下catkin_make -j2
catkin_make_isolated --make-args package_name
catkin build
:跟catkin_make很像,不過是將每個package獨立編譯,防止package之間有喇在一起造成問題的情形,比較像是建立多個catkin_make_isolated
*** 小提醒: 若在編譯此workspace之前有先source 其他的workspace,在編譯的時候會一併加入此workspace的環境變數中,若兩個workspace內有package喇到,會以之前編的為優先尋找的目標,所以蠻危險的,筆者被陰了好幾次QQQQ
ROS2.0改用colcon 當作編譯器,但由於近來許多專案在進行migration去ROS2.0,所以也有不少專案是使用colcon 編譯的,為了相容性,不過筆者我使用起來沒有感覺到跟catkin有太大的差異,因此簡單記錄一下,colcon編譯的命令也很簡單,一樣在workspace下:
$ colcon build
比較不一樣的是,編譯完以後會建立的資料夾,devel被刪去了,環境變數會被加在install內(setup.bash)。
參數有一個最重要的:
$ colcon build --packages-select <name-of-pkg>
也就是單一編譯特定package,這個功能筆者太常用了,但是每次要用都會記成select-package,所以一定要記在這XDDD
http://wiki.ros.org/catkin
https://catkin-tools.readthedocs.io/en/latest/index.html
https://huangwang.github.io/2019/06/06/ROS%E7%BC%96%E8%AF%91%E5%91%BD%E4%BB%A4catkin%E7%AE%80%E6%9E%90/
https://answers.ros.org/question/243192/catkin_make-vs-catkin-build/
https://colcon.readthedocs.io/en/released/reference/verb/build.html
https://design.ros2.org/articles/build_tool.html