ROS基礎(chǔ)

在寒假開始之前,我們已經(jīng)下載了ROS系統(tǒng),并且了解了一部分ROS的工作機(jī)制和基礎(chǔ)框架,現(xiàn)在我們從問題出發(fā),重新開始學(xué)習(xí)ROS基礎(chǔ)。

現(xiàn)在我們開始正式探索ROS的應(yīng)用。

一、在開始應(yīng)用ROS之前,我們需要?jiǎng)?chuàng)建工作空間:

(所有的ROS程序,包括我們自己開發(fā)的程序,都被組織成功能包,而ROS的功能包被存放在稱之為工作空間的目錄下。因此,在我們寫程序之前,第一步是創(chuàng)建一個(gè)工作空間以容納我們的功能包。)

1.創(chuàng)建ROS工作空間

? ? ROS工作空間是linux下的一個(gè)目錄,創(chuàng)建ROS工作空間就是創(chuàng)建一個(gè)linux目錄,只是需要按照ROS的規(guī)范在這個(gè)目錄下添加一個(gè)src的子目錄,然后執(zhí)行一個(gè)ROS的命令即可。

? ? 我們創(chuàng)建名為catkin_ws的工作空間,命令如下:

$mkdir -p catkin_ws/src

創(chuàng)建catkin_ws


創(chuàng)建src工作環(huán)境

2.編譯工作空間

? ? 進(jìn)入到catkin_ws/src目錄下,可以看到catkin_ws和src目錄下都是空的。進(jìn)入到catkin_ws目錄下,再執(zhí)行如下命令:

$catkin_make

? ??這個(gè)命令用于構(gòu)建該工作空間,并且必須在工作空間的頂層使用catkin_make命令,這時(shí)會(huì)發(fā)現(xiàn)在catkin_ws這個(gè)目錄下多出兩個(gè)目錄“build”和“devel”。在devel目錄下,還可以看到很多setup.*sh文件。

devel目錄

3.設(shè)置環(huán)境變量

接下來(lái)我們輸入如下命令:

$source devel/setup.bash

此命令是在catkin_ws目錄下執(zhí)行的(即為將catkin_ws/devel目錄下的setup.bash文件掛載到ROS的文件系統(tǒng)里去,這樣當(dāng)用戶執(zhí)行一些文件系統(tǒng)的命令時(shí),就不會(huì)提示找不到該工作空間里的包或者文件了)

在ROS工作環(huán)境中不允許出現(xiàn)同名重復(fù)功能包(對(duì)于大多數(shù)用戶,確實(shí)沒有必要使用多個(gè) ROS 工作空間。但是,如果工作涉及大量的功能包,或者涉及幾個(gè)相互獨(dú)立的的項(xiàng)目,則維護(hù)數(shù)個(gè)獨(dú)立的工作空間可能是有幫助的。)

提示:在沒有設(shè)置環(huán)境變量的情況下,或者在環(huán)境配置這一環(huán)節(jié)總是出現(xiàn)bash: /opt/ros/kinetic/setup.bash: 沒有那個(gè)文件或目錄時(shí),每次新打開終端都需要:

$source ? ~/catkin_ws/devel/setup.bash

若要解決每次都要source(每次新打開一個(gè)終端都需要source)可以使用如下命令:

$gedit ~/.bashrc ?

在文件末尾添加:source ? ~/catkin_ws/devel/setup.bash(還需要?jiǎng)h除重復(fù)的多余配置,如果沒有多余項(xiàng),很有可能拼寫有問題,或者大小寫問題,格式問題

二.創(chuàng)建ROS功能包

創(chuàng)建了工作空間,接下來(lái)就可以在工作空間里創(chuàng)建功能包。

1.創(chuàng)建

功能包是一個(gè)存在于工作空間目錄src目錄下的一個(gè)目錄,這個(gè)目錄中包含一些文件或者目錄,一個(gè)功能包必須以下幾部分組成:

(1) 必須包括一個(gè)package.xml文件;

(2) 必須包括一個(gè)CMakeLists.txt文件。

在每一個(gè)功能包目錄下不允許有其它的功能包,也就是不允許功能包名字重復(fù)。

2.編譯依賴關(guān)系

在之前已經(jīng)創(chuàng)建過一個(gè)空的工作空間:catkin_ws中,可以在一個(gè)工作空間中創(chuàng)建一個(gè)功能包。在創(chuàng)建功能包時(shí)需要使用catkin_create_pkg命令。

首先進(jìn)入到目錄catkin_ws/src目錄下,創(chuàng)建一個(gè)名字為learning的功能包,它直接依賴于三個(gè)功能包:std_msgs,rospy以及roscpp,使用如下命令:

$catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

在創(chuàng)建的文件夾下可以看到package.xml和CMakeLists.txt。

catkin_create_pkg要求給出功能包的名字,及選擇性的給出所創(chuàng)建的功能包依賴于哪一個(gè)功能包,命令的使用方法如下:

catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

這樣,我們的一個(gè)包功能就創(chuàng)建好了,我們可能會(huì)需要對(duì)功能包之間的依賴性做一下解釋。我們可以使用rospack命令來(lái)查看功能包之間的依賴關(guān)系(使用rospack命令的前提是已經(jīng)安裝了該命令)。

查看直接依賴關(guān)系:

$rospack depends1 beginner_tutorials

我們還可以直接在s功能包下的package.xml中查看功能包的依賴關(guān)系。使用命令:

$cd beginner_tutorials ?

$cat package.xml

在通常情況下,一個(gè)包所依賴的包又會(huì)依賴許多其它的包,稱為間接依賴。我們使用如下命令來(lái)查看rospy直接依賴的功能包:

$rospack depends1 rospy

而一個(gè)功能包可以有很多的間接依賴關(guān)系,我們可以使用命令:

$rospack depends beginner_tutorials 來(lái)查看。

3.完成

?編譯依賴性和運(yùn)行依賴性標(biāo)簽,指明了該功能包所依賴的其它功能包,如果我們?cè)谑褂胏atkin_create_pkg命令創(chuàng)建功能包的時(shí)候,沒有制定我們創(chuàng)建的功能包依賴于哪些功能包,可以手動(dòng)在添加依賴的功能包。

這樣功能包的創(chuàng)建和節(jié)點(diǎn)之間的依賴關(guān)系就清楚了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容