ROS文件系統導覽

預備工作

本教程中我們將會用到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內置命令行工具(如lscd)來進行查找和導航可能非常繁瑣,因此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

roscdrosbash命令集的一部分,它允許你直接切換目錄(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補全:

rosls <<<雙擊TAB鍵>>>

複習

你也許已經注意到了ROS命令工具的的命名方式:

  • rospack = ros + pack(age)
  • roscd = ros + cd
  • rosls = ros + ls

這種命名模式在許多ROS命令工具中都會用到。

到此你已經瞭解了ROS的文件系統結構,接下來開始創建ROS軟件包吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章