ROS系列三:ROS檔案系統介紹
轉自:http://wiki.ros.org/cn/ROS/Tutorials/NavigatingTheFilesystem
目錄
預備工作
本教程中我們將會用到ros-tutorials程式包,請先安裝:
$ sudo apt-get install ros-<distro>-ros-tutorials
將 <distro> 替換成你所安裝的版本(比如Jade、Indigo、hydro、groovy、fuerte等)。
快速瞭解檔案系統概念
-
Packages: 軟體包,是ROS應用程式程式碼的組織單元,每個軟體包都可以包含程式庫、可執行檔案、指令碼或者其它手動建立的東西。
-
Manifest (package.xml): 清單,是對於'軟體包'相關資訊的描述,用於定義軟體包相關元資訊之間的依賴關係,這些資訊包括版本、維護者和許可協議等。
檔案系統工具
程式程式碼是分佈在眾多ROS軟體包當中,當使用命令列工具(比如ls和cd)來瀏覽時會非常繁瑣,因此ROS提供了專門的命令工具來簡化這些操作。
使用 rospack
rospack允許你獲取軟體包的有關資訊。在本教程中,我們只涉及到rospack中find引數選項,該選項可以返回軟體包的路徑資訊。
用法:
# rospack find [包名稱]
示例:
$ rospack find roscpp
應輸出:
-
YOUR_INSTALL_PATH/share/roscpp
如果你是在Ubuntu Linux作業系統上通過apt來安裝ROS,你應該會準確地看到:
-
/opt/ros/groovy/share/roscpp
使用 roscd
roscd是
用法:
# roscd [本地包名稱[/子目錄]]
示例:
$ roscd roscpp
為了驗證我們已經切換到了roscpp軟體包目錄下,現在我們可以使用Unix命令pwd來輸出當前工作目錄:
$ pwd
你應該會看到:
-
YOUR_INSTALL_PATH/share/roscpp
你可以看到YOUR_INSTALL_PATH/share/roscpp和之前使用rospack find得到的路徑名稱是一樣的。
注意,就像ROS中的其它工具一樣,roscd只能切換到那些路徑已經包含在ROS_PACKAGE_PATH環境變數中的軟體包,要檢視ROS_PACKAGE_PATH中包含的路徑可以輸入:
$ echo $ROS_PACKAGE_PATH
你的ROS_PACKAGE_PATH環境變數應該包含那些儲存有ROS軟體包的路徑,並且每個路徑之間用冒號分隔開來。一個典型的ROS_PACKAGE_PATH環境變數如下:
-
/opt/ros/groovy/base/install/share:/opt/ros/groovy/base/install/stacks
跟其他路徑環境變數類似,你可以在ROS_PACKAGE_PATH中新增更多其它路徑,每條路徑使用冒號':'分隔。
子目錄
使用roscd也可以切換到一個軟體包或軟體包集的子目錄中。
執行:
$ roscd roscpp/cmake $ pwd
應該會看到:
-
YOUR_INSTALL_PATH/share/roscpp/cmake
roscd log
使用roscd log可以切換到ROS儲存日記檔案的目錄下。需要注意的是,如果你沒有執行過任何ROS程式,系統會報錯說該目錄不存在。
如果你已經執行過ROS程式,那麼可以嘗試:
$ roscd log
使用 rosls
rosls是rosbash命令集中的一部分,它允許你直接按軟體包的名稱而不是絕對路徑執行ls命令(羅列目錄)。
用法:
# rosls [本地包名稱[/子目錄]]
示例:
$ rosls roscpp_tutorials
應輸出:
-
cmake package.xml srv
Tab 自動完成輸入
當要輸入一個完整的軟體包名稱時會變得比較繁瑣。在之前的例子中roscpp tutorials是個相當長的名稱,幸運的是,一些ROS工具支援TAB 自動完成輸入的功能。
輸入:
# roscd roscpp_tut<<< 現在請按TAB鍵 >>>
當按TAB鍵後,命令列中應該會自動補充剩餘部分:
$ roscd roscpp_tutorials/
這應該有用,因為roscpp tutorials是當前唯一一個名稱以roscpp tut作為開頭的ROS軟體包。
現在嘗試輸入:
# roscd tur<<< 現在請按TAB鍵 >>>
按TAB鍵後,命令應該會盡可能地自動補充完整:
$ roscd turtle
但是,在這種情況下有多個軟體包是以turtle開頭,當再次按TAB鍵後應該會列出所有以turtle開頭的ROS軟體包:
-
turtle_actionlib/ turtlesim/ turtle_tf/
這時在命令列中你應該仍然只看到:
$ roscd turtle
現在在turtle後面輸入s然後按TAB鍵:
# roscd turtles<<< 請按TAB鍵 >>>
因為只有一個軟體包的名稱以turtles開頭,所以你應該會看到:
$ roscd turtlesim/
回顧
你也許已經注意到了ROS命令工具的的命名方式:
- rospack = ros + pack(age)
- roscd = ros + cd
- rosls = ros + ls
這種命名方式在許多ROS命令工具中都會用到。
到此你已經瞭解了ROS的檔案系統結構,接下來我們開始建立一個工作空間。