-
安裝必要小工具
可以使用以下命令來安裝一些工具以方便我們后續(xù)構(gòu)建項(xiàng)目。
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
0× 3
測(cè)試小烏龜項(xiàng)目
小烏龜項(xiàng)目是內(nèi)置在ROS系統(tǒng)中的用于測(cè)試的項(xiàng)目,此項(xiàng)目中同時(shí)用到了發(fā)布者-訂閱者消息模式和客戶端-服務(wù)端消息模式。
-
啟動(dòng)Master Server
首先,若還記得之前在”物聯(lián)網(wǎng)協(xié)議——MQTT與ROS”一文中提到的消息代理的概念,對(duì)于ROS系統(tǒng),不論是使用了哪種消息模式都需要啟動(dòng)一個(gè)消息代理用于將消息分發(fā)到合適的消息接收端。
那么,我們需要使用roscore啟動(dòng)一個(gè)主服務(wù)器以充當(dāng)master server。
這里我們做以下幾點(diǎn)補(bǔ)充說明:
- roscore會(huì)默認(rèn)將計(jì)算機(jī)名作為主服務(wù)器的host,此時(shí),ROS系統(tǒng)僅能用于本地測(cè)試。
- 可以使用環(huán)境變量來控制roscore的啟動(dòng)行為,其中,最重要的三個(gè)環(huán)境變量是:
ROS_ROOT:此環(huán)境變量必須指向ROS環(huán)境的安裝位置,當(dāng)系統(tǒng)中安裝了多個(gè)版本的ROS軟件包時(shí),需要使用此環(huán)境變量進(jìn)行手動(dòng)指定。(默認(rèn)值:/opt/ros/melodic/share/ros)
ROS_MASTER_URI:此環(huán)境變量必須指向ROS主服務(wù)器的完整地址,當(dāng)我們想把主服務(wù)器暴露在網(wǎng)絡(luò)中時(shí),需要使用此環(huán)境變量進(jìn)行手動(dòng)指定。(默認(rèn)值:(空),建議值:http://0.0.0.0:11311)
PYTHONPATH:此環(huán)境變量必須指向ROS系統(tǒng)所使用的Python環(huán)境位置,由于ROS系統(tǒng)底層的部分模塊需要依賴Python,因此盡管我們可以使用其他語言構(gòu)建項(xiàng)目,但是為了保證運(yùn)行無誤必須配置Python環(huán)境,ROS系統(tǒng)安裝時(shí)已經(jīng)默認(rèn)一并安裝了Python,當(dāng)我們需要更換時(shí)需要手動(dòng)指定。(默認(rèn)值:/opt/ros/melodic/lib/python2.7/dist-packages)
如果不使用&標(biāo)志符限定,默認(rèn)此服務(wù)將會(huì)在前臺(tái)運(yùn)行,在進(jìn)行接下來的測(cè)試時(shí)請(qǐng)務(wù)必不要關(guān)閉一開始的窗口。
-
啟動(dòng)node觀察器
現(xiàn)在我們可以使用rosnode這個(gè)小工具來查看目前的ROS系統(tǒng)中存在哪些節(jié)點(diǎn)
這個(gè)節(jié)點(diǎn)就是由消息代理啟動(dòng)的一個(gè)用于管理消息發(fā)送接收的節(jié)點(diǎn),正如之前說過的,ROS系統(tǒng)與MQTT不同,他是一個(gè)高度集成的系統(tǒng),同時(shí)支持兩種消息模式。那么,/rosout事實(shí)上就擁有了三種屬性:
訂閱者:/rosout可以作為訂閱者,訂閱若干其他節(jié)點(diǎn),用于具有多播特性的Pub-Sub mode。
發(fā)布者:/rosout可以作為發(fā)布者,向其他若干節(jié)點(diǎn)發(fā)布消息,用于具有多播特性的Pub-Sub mode。
服務(wù)者:/rosout可以作為服務(wù)端,提供若干服務(wù)以供其他節(jié)點(diǎn)發(fā)起調(diào)用,用于具有單播特性的CS mode。
我們可以使用rosnode info命令去看到其所有的訂閱者、發(fā)布目標(biāo)以及服務(wù)列表,此外,還能看到此節(jié)點(diǎn)的位置以及PID。
??:在ROS系統(tǒng)中,為了最高效的利用資源,當(dāng)我們啟動(dòng)一個(gè)新節(jié)點(diǎn)時(shí),默認(rèn)策略會(huì)使得主服務(wù)器隨機(jī)選擇一個(gè)可用端口進(jìn)行節(jié)點(diǎn)綁定,當(dāng)有其他節(jié)點(diǎn)想要鏈接此節(jié)點(diǎn)時(shí)只需要向消息代理詢問即可,這個(gè)策略盡管實(shí)現(xiàn)了空間解耦,但是阻礙了我們利用ROS系統(tǒng)進(jìn)行CTF競(jìng)賽的命題,因?yàn)闊o法動(dòng)態(tài)的進(jìn)行docker的端口映射,如果有讀者可以解決此問題,請(qǐng)?jiān)诒疚脑u(píng)論區(qū)發(fā)布評(píng)論,筆者在此感激不盡。
-
啟動(dòng)小烏龜節(jié)點(diǎn)【需要桌面環(huán)境】
接下來我們使用rosrun turtlesim turtlesim_node命令啟動(dòng)小烏龜節(jié)點(diǎn)
此時(shí)或許可以發(fā)現(xiàn),每次啟動(dòng)小烏龜節(jié)點(diǎn)時(shí),小烏龜?shù)钠つw都不相同,我們重新使用rosnode命令觀察節(jié)點(diǎn)
我們可以發(fā)現(xiàn)以下幾點(diǎn):
- 小烏龜節(jié)點(diǎn)/turtlesim已經(jīng)對(duì)/rosout這個(gè)節(jié)點(diǎn)產(chǎn)生了訂閱關(guān)系。
- /turtlesim同樣提供了若干話題以及若干服務(wù)。
那么,如果我們不想用/turtlesim這個(gè)節(jié)點(diǎn)名,ROS系統(tǒng)事實(shí)上提供了自定義節(jié)點(diǎn)名稱的參數(shù)。
首先關(guān)閉小烏龜節(jié)點(diǎn)啟動(dòng)的節(jié)點(diǎn)或者在小烏龜節(jié)點(diǎn)的終端使用Ctrl + C來終止,之后使用命令rosrun turtlesim turtlesim_node __name:=myturtle1啟動(dòng),啟動(dòng)后再次查看node信息:
可以發(fā)現(xiàn),這個(gè)節(jié)點(diǎn)的名字已經(jīng)改變了。
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2909文章
44567瀏覽量
372829 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9125瀏覽量
85334 -
ROS
+關(guān)注
關(guān)注
1文章
278瀏覽量
17001
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論