精通ROS機器人編程(原書第2版) 》 —1.6 ROS的社區">《精通ROS機器人編程(原書第2版) 》 —1.6 ROS的社區
796
2025-04-02
1.4 理解ROS的文件系統
ROS不僅是一個開發框架,它提供了各種工具和軟件庫,還提供了類似OS的功能(如硬件抽象、軟件包管理、開發人員工具鏈等),因此我們可以將 ROS 視為一種超操作系統(meta-operating system)。與真正的操作系統一樣, ROS 文件以特定的方式組織在硬盤上,如圖1-1所示。
圖1-1 ROS文件系統級
以下是文件系統中每個模塊的說明:
軟件包:ROS軟件包是ROS框架中最基本的單位,它們包含一個或多個ROS程序 (稱為節點)、庫、配置文件等。它們組合在一起作為一個單元。軟件包是 ROS 軟件中基本的構成項和發布項。
超軟件包:超軟件包指的是一個或多個相關的軟件包以松散的形式組合在一起。本質上講,超軟件包是一種虛擬軟件包,不包含任何源代碼,也不包含常見軟件包中的各種文件。
超軟件包清單:超軟件包清單類似于軟件包清單,區別在于它可能包含其他軟件包,即那些運行時需要的依賴項,并且聲明了一個export(導出)標識。
消息 (.msg):ROS消息是從一個ROS進程發送到另一個進程的一種信息。我們可以在一個軟件包的 msg 文件夾中定義消息(my_package/msg/MyMessageType.msg),其中“.msg”是消息文件的擴展名。
服務(.srv):ROS服務是一種進程間的請求/應答方式。應答和請求的數據類型可以在一個軟件包的srv文件夾內定義 (my_package/srv/MyServiceType.srv)。
軟件包倉庫:大多數ROS 軟件包采用版本控制系統(Version Control System,VCS) 進行維護,如 Git、Subversion(svn)、Mercurial (hg) 等。在一個版本控制系統下的一組軟件包稱為軟件包倉庫,倉庫中的軟件包可以通過catkin自動發布工具bloom進行對外發布。
圖1-2是一個軟件包的文件和文件夾的組織示意圖,后面幾節將介紹如何創建這個軟件包。
1.4.1 ROS軟件包
ROS軟件包的典型結構如圖1-3所示。
圖1-3 C++ ROS軟件包的典型結構
下面簡單介紹每個文件夾和文件的用途:
config:ROS 軟件包用到的所有配置文件都在此文件夾中。此文件夾由用戶創建,一般習慣將其命名為 config,將配置文件放置其中。
include/package_name:此文件夾包含了ROS 軟件包用到的頭文件和庫文件。
script:可執行的 Python 腳本放在此文件中。在圖1-3中,我們可以看到兩個示例腳本。
src:此文件夾存放C++ 源代碼。
launch:此文件夾存放啟動一個或多個 ROS 節點的啟動文件。
msg:此文件夾包含用戶定制化消息的定義。
srv:此文件夾包含各種服務的定義。
action:此文件夾包含動作文件。下一章將介紹這類文件的詳細內容。
package.xml:這是軟件包清單文件。
CMakeLists.txt:此文件包含編譯軟件包的各類指令。
為了能創建、修改、使用 ROS軟件包,我們需要先了解一些常用命令。下面是一些使用ROS軟件包的常用命令:
catkin_create_pkg:此命令用于創建一個新軟件包。
rospack:此命令用于獲取軟件包相關的信息。
catkin_make:此命令用于在工作區中編譯軟件包。
rosdep:此命令將安裝一個軟件包所需的系統依賴項。
為了能使用軟件包,ROS提供了一個類似bash的命令,將其命名為rosbash(http://wiki.ros.org/rosbash), 可用于瀏覽和操作ROS軟件包。下面是若干rosbash 命令:
roscd:此命令用軟件包的名稱、軟件包集的名稱或特殊位置信息切換當前所在文件夾。如將軟件包的名稱作為參數傳給該命令,系統將切換到那個軟件包所在的文件夾。
roscp:此命令用于從軟件包中復制文件。
rosed:此命令用于使用 vim 編輯器編輯一個文件。
rosrun:此命令用于在軟件包內運行一個可執行文件。
圖1-4顯示了常見的軟件包內package.xml 文件的定義。
圖1-4 軟件包的package.xml 文件結構
軟件開發
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。