相关文章推荐
没有腹肌的甘蔗  ·  py代码打包问题·  1 年前    · 
一直单身的弓箭  ·  modopt and .NET ...·  1 年前    · 
听话的硬盘  ·  信息工程学院·  1 年前    · 

經過這幾天漫長的系統設置後,終於要邁入 ROS 相關的主題了。筆者今天會向各位介紹 catkin workspace 以及 ROS Package 。Package 是整個 ROS 專案中最基礎的元素之一,像是如果想做一個鋼鐵人,一定會有負責動力的推進器程式包、負責火力的武器程式包、負責定位的 GPS 程式包等,目的在於將功能相同的執行檔、描述檔放在一起方便管理。因此未來想要執行任何專案時,其實就是根據需求組合不同功能的 Package,最後便能完成屬於自己的鋼鐵人。筆者希望大家在學習完之後,在未來能靈活運用,建置屬於自己的 Package。ROS Package 甚至能在不同的專案中使用,像是把鋼鐵人的機槍裝在不同台的鋼鐵人中,是不是很有趣呢?

工作區設定

在進行 ROS 開發之前,我們必須先建立一個屬於自己的工作區(Workspace,"ws")。簡而言之,工作區就好比 Windows Visual Studio 上的一個 Project,在這個工作區當中我們可以建立許多 Package 來完成 ROS 開發。目前 ROS 採用 catkin 編譯系統,目的在於對結構進行整合及標準化。

mkdir -p catkin_ws/src/
cd catkin_ws/
catkin_make
source ~/catkin_ws/devel/setup.bash

上述的 mkdir -p 與昨天所介紹的 mkdir 相仿,若用 mkdir 直接建立 catkin_ws/src/,系統會顯示沒有此一檔案或目錄,因為 src/ 的上層 catkin_ws/ 尚未被建立,但若是使用 mkdir -p 進行建立的話,系統便會依序將 catkin_ws/src/ 建立。
至於第四行 source ~/catkin_ws/devel/setup.bash 的用意在於,每次使用 catkin_make 編譯檔案後,都必須更新系統的環境變數,以免系統無法找到編譯後新產生的檔案。

建立好工作區後,我們可以使用 tree 指令來看工作區的結構,首先必須先安裝 tree

sudo apt-get install tree

接著,為了快速地呈現工作區的架構,我們執行 tree -L 2 後便只會列出 catkin_ws/ 底下前兩層的檔案結構,若只用 tree 則會完整顯示出 catkin_ws/ 下所有的檔案,在此就不再示範。

cd catkin_ws/
tree -L 2

可以看到主要的分支有 build, devel, src,以下稍微介紹各資料夾:

1. build  - catkin 的緩存信息和中間文件。
2. devel  - 存放標頭檔、環境變數的地方。
3. src    - 存放各種 Package 的地方。

ROS Package

在介紹 Package 之前,必須先介紹 ROS 底下的文件系統(Filesystem,又稱檔案系統),一般來說,ROS Filesystem 大致包含以下三個概念:

1. Package:
   ROS 專案當中的基本組織,又稱為模組,其中可包含任意格式的文件,用來存放函式庫、執行
2. Manifests:
   此為對 Package 的描述檔(Package.xml),用來定義 Package 的基本資料(如 Package
   名稱、版本、作者、相依模組等等)
3. Stacks:
   Stacks 是 Package 的組合,通常是將許多彼此連動的 Package 整合在一起方便呼叫使
   用,例如 ROS Navigation stacks。

在一個完整的 ROS 專案當中,最常使用的便是 Package,依照不同的工作項目(例如機器人的手臂、輪子、定位系統等等)劃分出數個 Package,一般來說,ROS Package 都含有一個通用的結構:

1.  include         -用來放 C++ 的標頭檔用的。
2.  msg             -存放訊息(message)類型檔案的資料夾。
3.  src             -用來放置執行檔(.cpp, .py等)的資料夾。
4.  srv             -存放服務(services)類型檔案的資料夾。
5.  scripts         -存放可執行腳本的資料夾。
6.  models          -存放 3D 模型(.dae, .stl等)的資料夾。
7.  urdf            -存放模型描述檔(.urdf, .xacro)的資料夾。
8.  launch          -存放 launch 文件。
9.  CMakeList.txt   -用於建構 Package 的文件,任何符合 CMake 格式的 Package 皆
                     含有此檔案。
10. package.xml     -這便是剛剛所提到的 Manifests,用來定義 Package 的基本資料。

有些 Package 可能沒有那麼多的資料夾,原因在於剛剛所提到 Package 是專案分工的項目,依照需求的不同,很可能某些 Package 不需要特定的資料夾(如 models、urdf)。

今天向各位介紹了如何設定建立工作區,以及 Package 的基本架構,由於解釋的東西較多,因此整體的篇幅稍微拉長了一點。至於明天則會介紹如何建置屬於自己的 Package 給大家,其實步驟也並不會過於難,請大家敬請期待。