所有的ros程式,包括我們自己開發的程式,都被組織成功能包,而ros的功能包被存放在稱之為工作空間的目錄下。因此,在我們寫程式之前,第一步是建立乙個工作空間以容納我們的功能包。
1.建立ros工作空間
其實ros工作空間就是linux下的乙個目錄,建立ros工作空間就是建立乙個linux目錄,只是需要按照ros的規範在這個目錄下新增乙個src的子目錄,然後執行乙個ros的命令即可。
我們建立名為catkin_ws的工作空間,當然也可以使用其它名字,命令如下:
$mkdir -p catkin_ws/src
進入到catkin_ws/src目錄下,可以看到catkin_ws和src目錄下都是空的。進入到catkin_ws目錄下,再執行如下命令:
$catkin_make
這個命令用於構建該工作空間,並且必須在工作空間的頂層使用catkin_make命令,這時你會發現在catkin_ws這個目錄下多出兩個目錄「build」和「devel」。在devel目錄下,還可以看到很多setup.*sh檔案。接下來我們輸入如下命令:
在每乙個功能包目錄下不允許有其它的功能包,也就是不允許功能包巢狀。乙個典型的工作空間結構如下:
workspace_folder/ -- workspace
src/ -- source space
cmakelists.txt -- 'toplevel' cmake file, provided by catkin
package_1/
cmakelists.txt -- cmakelists.txt file for package_1
package.xml -- package manifest for package_1
...
package_n/
cmakelists.txt -- cmakelists.txt file for package_n
package.xml -- package manifest for package_n
我們之前已經建立過乙個空的工作空間:catkin_ws,下面我們來看一下如何在乙個工作空間中建立乙個功能包。在建立功能包時需要使用catkin_create_pkg命令。
首先進入到目錄catkin_ws/src目錄下,建立乙個名字為beginner_tutorials的功能包,它直接依賴於三個功能包:std_msgs,rospy以及roscpp,使用如下命令:
$catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
在建立的beginner_tutorials資料夾下可以看到package.xml和cmakelists.txt。catkin_create_pkg要求您給出功能包的名字,及選擇性的給出所建立的功能包依賴於哪乙個功能包,命令的使用方法如下:
catkin_create_pkg [depend1] [depend2] [depend3]
這樣,我們的乙個包功能就建立好了,我們可能會需要對功能包之間的依賴性做一下解釋。我們可以使用rospack命令來檢視功能包之間的依賴關係(使用rospack命令的前提是已經安裝了該命令)。
檢視直接依賴關係:
$rospack depends1 beginner_tutorials
可以看到,返回的結果正是我們使用catkin_create_pkg時,所使用的引數。
roscpp
rospy
std_msgs
我們還可以直接在beginner_tutorials功能包下的package.xml中檢視功能包的依賴關係。使用命令:
$cd beginner_tutorials
$cat package.xml
結果如下:
...
catkin
roscpp
rospy
std_msgs
...
在通常情況下,乙個包所依賴的包又會依賴許多其它的包,這稱為間接依賴。我們使用如下命令來檢視rospy直接依賴的功能包:
$rospack depends1 rospy
返回結果如下:
genpy
rosgraph
rosgraph_msgs
roslib
std_msgs
乙個功能包可以有很多的間接依賴關係,我們可以使用命令:
$rospack depends beginner_tutorials
來進行檢視。返回結果如下:
cpp_common
rostime
roscpp_traits
roscpp_serialization
genmsg
genpy
message_runtime
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
catkin
rospack
roslib
rospy
接下來我們檢視package.xml檔案,我們將會乙個標籤乙個標籤的分析這個xml檔案。
首先是description標籤:
the beginner_tutorials package
這個標籤是對功能包的乙個簡單描述。
maintainer標籤:
user
根據這個標籤知道它的維護者,另外標籤的email屬性也是必須的,可有多個maintainer標籤。
license標籤:
todo
一般我們將license修改為bsd。
編譯依賴性和執行依賴性標籤,指明了該功能包所依賴的其它功能包,如果我們在使用catkin_create_pkg命令建立功能包的時候,沒有制定我們建立的功能包依賴於哪些功能包,可以手動在這裡新增依賴的功能包:
catkin
roscpp
rospy
std_msgs
run_depend>roscpp
rospy
std_msgs
這樣一來,功能包就建立好了,可以在功能包目錄下新增你的源**檔案了。
ros功能包的命名遵循乙個命名規範,只允許使用小寫字母、數字和下劃線,而且首字元必須是乙個小寫字母。一些 ros工具,包括 catkin,不支援那些不遵循此命名規範的功能包。
ROS建立工作空間和功能包
mkdir p catkin ws src cd catkin ws src catkin init workspace cd catkin ws catkin make編譯完成後,會在工作空間根目錄下自動產生build和devel兩個資料夾及其中的檔案。source devel setup.bas...
9 建立工作空間和ROS功能包
四個資料夾,各自功能如下src 空間,源 和實現 build 編譯空間,編譯過程中的中間檔案 devel 開發空間,編譯生成的庫和指令碼 install 安裝空間,用install指令產生的結果 mkdir p catkin ws src cd catkin ws src catkin init w...
ROS 建立工作空間以及功能包
src 空間 build 編譯空間 devel 開發空間 install 安裝空間 一 建立工作空間 1 home資料夾下建立catkin ws資料夾 catkin ws資料夾下建立src資料夾。2 src資料夾下開啟終端,輸入 catkin init workspace將資料夾初始化成工作空間。二...