iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0

前言

昨天有向各位提到,Package 是 ROS 專案中最基礎的元素之一,我們可以視情況與需求,透過執行不同功能的 Package 來完成專案。同時,我們也能夠直接使用別人已經建立好的 Package 套用在自己的專案上,如此一來便能達到 ROS 的核心價值——站在別人的肩膀上,繼續前進。但如果今天別人做的 Package 不符合自己的需求時該怎麼辦呢?

創建自己的 Package

首先,我們可以先看一個簡單的 Package 結構,好對 Package 有初步的瞭解:
https://ithelp.ithome.com.tw/upload/images/20200921/20129808MwZjoXgB2s.jpg
可以看到,Package 裡面包含三個基本檔案,CMakeLists.txt, package.xml, src ,其各自的功能在昨天也有提到,這邊就不再介紹。

當然,創建一個 Package 時並不需要自己慢慢的用指令新建資料夾與檔案,我們能透過 catkin 指令快速的建置一個 Package:

cd catkin_ws/src/
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]…

指令裡頭的 <package_name> 便是自己所命名的 Package 名稱,[depend] 則是相依模組,白話一點就是這個 Package 需要包含哪些東西才能執行,可以根據 Package 中的檔案會用到哪些資料型態 (std、bool...) 和語法 (如Python、C...) 來添加自己所需的模組。以下示範則是執行 depends 當中含有 std_msgs, rospy, roscpp 的結果:
https://ithelp.ithome.com.tw/upload/images/20200921/20129807iPGRTjXg77.png

depend 當中的 std_msgs 與 Package 的資料型別有關,代表; rospyroscpp 則表示 Package 與 Python 和 C++ 語法有關,這些 depends 都被定義在剛剛所提到的 package.xml 當中,我們可以利用 vi 開啟 Package.xml 來查看:

cd beginner_tutorial/
vi package.xml

https://ithelp.ithome.com.tw/upload/images/20200921/201298075ykoGGVaIu.png

我們可以看到當中包含了許多 depends,所以說也不用擔心一開始在建立 Package 時就要一次建立完成,若有任何 depends 遺漏都能在這邊進行補充。更詳細的 depend 類型可以參考官網。

建立完成後,記得回到 catkin_ws/ 下執行 catkin_make,讓工作區成功建立這個 Package。

catkin_make

除了建立 Package 後需要執行 catkin_make 之外,若是修改了 Package.xml 後我們也必須執行這個指令,目的在於必須讓 catkin 再次編譯這個 Package。

以上便成功建立好屬於自己的 Package 了,步驟是不是很簡單呢?只要設定好名稱與相依模組,再執行 catkin_make 就完成了。接著再介紹一些可以在根目錄下直接操作 ROS Package 的相關指令,較常見的有:

roscd <Package_name>            -快速進入到該 Package下。 (相當實用)
rosls <Package_name>            -顯示該 Package 下含有的文件。
rospack depends <Package_name>  -顯示該 Package 所有的 depends。
rospack find <Package_name>     -回傳該 Package 的路徑。

結語

建置 Package 是不是很簡單呢?有了自己的 Package 終於能開始編寫專案啦!因此明天就會教大家 ROS 專案的整體架構以及運作方式,請大家敬請期待~
https://ithelp.ithome.com.tw/upload/images/20200921/20129807wqS3NRJcdK.png


上一篇
[DAY 5] Catckin工作區 && ROS Package的介紹
下一篇
[DAY 7] ROS架構與Node的基本介紹
系列文
ROS系統控制自走車搭配點雲雷達(隧道檢測裝置)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言