2018年9月4日 星期二

ROS學習紀錄-3:ROS的package架構

相信經過前兩次的安裝步驟講解,大家都安裝好Linux&ROS了吧?接下來就要正式開始我們的學習之旅了,這次我會介紹ROS中的package,啥是package呢?它要怎樣建立與使用呢?它的架構又是如何呢?這些問題將會在這篇解決優。


3.ROS-package

在一開始,先給大家兩個參考的網址:3.Creating a ROS Package[1]&4.Building a ROS Package[2]
這兩個教程分別介紹如何創造與建立package,強烈建議大家先大致看過並跑過一遍再繼續看這篇喔~

3-1.package架構

在看3-1時,僅僅是介紹其架構而已,不用自行生成檔案或輸入指令,到3-2時會告訴各位建立的流程。
在了解package架構前,要先有所謂工作區(workspace)的概念,也就是所有關於一個專案的東西都會放在裡面,舉個例子,如下圖所見,這是在跑完3.Creating a ROS Package&4.Building a ROS Package教程之後,catkin_ws工作區下的樣子。
catkin_ws工作區
引用自教程,
#模組包(package)與工作區(workspace)的架構
###
workspace_1_folder/        -- WORKSPACE
  src/                   -- SOURCE SPACE
    CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin
    package_1/
      CMakeLists.txt     -- CMakeLists.txt file for package_1
      package.xml        -- Package manifest for package_1
    ...
    package_n/
      CMakeLists.txt     -- CMakeLists.txt file for package_n
      package.xml        -- Package manifest for package_n
...
workspace_n_folder/        -- WORKSPACE
  src/                   -- SOURCE SPACE
    CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin
    package_1/
      CMakeLists.txt     -- CMakeLists.txt file for package_1
      package.xml        -- Package manifest for package_1
    ...
    package_n/
      CMakeLists.txt     -- CMakeLists.txt file for package_n
      package.xml        -- Package manifest for package_n
###
其中n為變數,可以為無限多,只要你電腦容量也無限的話。
可以看到使用者可以自由建立多個workspace,我的作法是將所有不同名稱的工作區統一放在我自己新建立的資料夾workspace,其路徑為[ /home/workspace ],從上圖可以看到我catkin_ws的路徑就是在[ /home/workspace ]之下的。
而workspace下是名稱為src的source space,這裡可以放很多不同的package,還包含了一個CMakeLists.txt的文字檔,如下圖。
source space
接下來就是今天主角package了,各位可以從上圖看到在這路徑[ /home/workspace/catkin_ws/src ]下我的package名為beginner_tutorials,接著進入beginner_tutorials這個package中,如下圖,會看到很多不同名稱的資料夾,放入不同形式的程式,
Example:
C++檔放src
python檔放scripts
launch檔放launch 等
其它還有兩個分別是CMakeLists.txt和package.xml的檔案,會在編譯時起很大的作用,詳細的解釋在之後的紀錄中會說明,目前知道這些就好。
beginner_tutorials(package)目錄下
3-2如何建立package

假設你今天想要建立一個工作區名叫opencv_ws,底下有個package叫opencvtest,欲執行的C++程式碼叫test的話,參考以下的建立流程(其中,$符號後的為輸入指令)。
#模組包的建立流程:
###
$ cd ~/workspace
$ mkdir opencv_ws
$ cd ~/workspace/opencv_ws 
$ mkdir src
$ cd src
$ catkin_create_pkg [name of package] [depend1] [depend2] [depend3] #註:[depend1] [depend2] [depend3]為你需要引入(include)的函式庫(library),例:std_msgs
$ cd ~/workspace/opencv_ws  #切換到工作區(workspace)對下一個步驟來說相當重要!
$ catkin_make #建立模組包(package)到你的工作區(workspace)
$ . ~/workspace/opencv_ws/devel/setup.bash #To add the workspace to your ROS environment you need to source the generated setup file(抱歉我不知道中文怎翻譯比較好)
#將你的cpp檔放在opencvtest/src中,完整路徑為 ~/workspace/opencv_ws/src/opencvtest/src$ cd ~/opencv_ws #切換到工作區(workspace)對下一個步驟來說相當重要!
$ catkin_make #將此目錄下所有你的code模組包(package)建立並編譯,如果你的程式碼有問題的話會在這時顯示,測試時,這行會用到很多次
$ . ~/workspace/opencv_ws/devel/setup.bash #這行很重要,如果沒用的話下一行指令會讓系統找不到,註:source與.的指令有相同的效果,看你想用哪個
#接著你在任何目錄都找的到你建立的package了!不需要在工作區裡!
$ roscore #開啟roscore程序,啟動ROS,如果你有先開好的話就不用再開一次了
$ rosrun opencvtest test #用ROS執行你的code
###
恩...我想還沒有自己寫過的人可能會覺得有點複雜,畢竟這篇寫的東西我也不是學的當下就懂了,是後來寫了很多次之後才懂的,所以我想之後不少人應該還是會常常回來看這篇的吧~

3-3.我會了,然後呢?

首先,才怪!你還不會!不然你就是有先偷學過哈哈。
接下來會再補足其它的部份,好比下一篇的node&topic,之後各位對於ROS的理解就會越來越好,有空記得回來這篇看看喔~

如有問題可以留言大家一起討論,留言請勿出現不雅言語與無端謾罵喔~
If u have any question,just leave comments to me.I will answer u as soon as possible,but don't be mean to me.Thanks!

沒有留言:

張貼留言