預備工作
本教程中我們將會用到ros-tutorials程序包。如果你之前安裝的ROS不是完整桌面版(Desktop-Full),請先:
sudo apt-get install ros-<distro>-ros-tutorials
將<distro>替換成你安裝的ROS發行版簡稱(比如kinetic或noetic等)。
比如:
sudo apt-get install ros-melodic-ros-tutorials
文件系統概念簡介
-
軟件包(Packages):包是ROS代碼的軟件組織單元,每個軟件包都可以包含程序庫、可執行文件、腳本或其他構件。
-
Manifests (package.xml): 清單(Manifest)是對軟件包的描述。它用於定義軟件包之間的依賴關係,並記錄有關軟件包的元信息,如版本、維護者、許可證等。
文件系統工具
程序代碼散落在許多ROS包中。使用Linux內置命令行工具(如ls和cd)來進行查找和導航可能非常繁瑣,因此ROS提供了專門的命令工具來簡化這些操作。
使用rospack
rospack允許你獲取軟件包的有關信息。在本教程中,我們只涉及到find參數選項,該選項可以返回軟件包的所在路徑。
用法:
rospack find [package_name]
比如:
rospack find roscpp
將會輸出:
YOUR_INSTALL_PATH/share/roscpp
如果你是在Ubuntu操作系統上通過apt安裝的ROS,你看到的應該是:
/opt/ros/<distro>/share/roscpp
使用roscd
roscd是rosbash命令集的一部分,它允許你直接切換目錄(cd)到某個軟件包或者軟件包集當中。
用法:
roscd [locationname[/subdir]]
要想驗證是否能切換到roscpp包的位置,請運行以下示例:
roscd 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/<distro>/base/install/share
YOUR_INSTALL_PATH/share/roscpp/cmake
跟其他環境變量路徑類似,你可以在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 [locationname[/subdir]]
示例:
rosls roscpp_tutorials
應輸出:
cmake launch 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/
如果要查看當前安裝的所有軟件包的列表,你也可以利用TAB補全: