ROS建立工作空間和功能包

2021-08-01 14:13:48 字數 3482 閱讀 1283

所有的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將資料夾初始化成工作空間。二...