-
安裝必要小工具
可以使用以下命令來安裝一些工具以方便我們后續構建項目。
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
0× 3
測試小烏龜項目
小烏龜項目是內置在ROS系統中的用于測試的項目,此項目中同時用到了發布者-訂閱者消息模式和客戶端-服務端消息模式。
-
啟動Master Server
首先,若還記得之前在”物聯網協議——MQTT與ROS”一文中提到的消息代理的概念,對于ROS系統,不論是使用了哪種消息模式都需要啟動一個消息代理用于將消息分發到合適的消息接收端。
那么,我們需要使用roscore啟動一個主服務器以充當master server。
這里我們做以下幾點補充說明:
- roscore會默認將計算機名作為主服務器的host,此時,ROS系統僅能用于本地測試。
- 可以使用環境變量來控制roscore的啟動行為,其中,最重要的三個環境變量是:
ROS_ROOT:此環境變量必須指向ROS環境的安裝位置,當系統中安裝了多個版本的ROS軟件包時,需要使用此環境變量進行手動指定。(默認值:/opt/ros/melodic/share/ros)
ROS_MASTER_URI:此環境變量必須指向ROS主服務器的完整地址,當我們想把主服務器暴露在網絡中時,需要使用此環境變量進行手動指定。(默認值:(空),建議值:http://0.0.0.0:11311)
PYTHONPATH:此環境變量必須指向ROS系統所使用的Python環境位置,由于ROS系統底層的部分模塊需要依賴Python,因此盡管我們可以使用其他語言構建項目,但是為了保證運行無誤必須配置Python環境,ROS系統安裝時已經默認一并安裝了Python,當我們需要更換時需要手動指定。(默認值:/opt/ros/melodic/lib/python2.7/dist-packages)
如果不使用&標志符限定,默認此服務將會在前臺運行,在進行接下來的測試時請務必不要關閉一開始的窗口。
-
啟動node觀察器
現在我們可以使用rosnode這個小工具來查看目前的ROS系統中存在哪些節點
這個節點就是由消息代理啟動的一個用于管理消息發送接收的節點,正如之前說過的,ROS系統與MQTT不同,他是一個高度集成的系統,同時支持兩種消息模式。那么,/rosout事實上就擁有了三種屬性:
訂閱者:/rosout可以作為訂閱者,訂閱若干其他節點,用于具有多播特性的Pub-Sub mode。
發布者:/rosout可以作為發布者,向其他若干節點發布消息,用于具有多播特性的Pub-Sub mode。
服務者:/rosout可以作為服務端,提供若干服務以供其他節點發起調用,用于具有單播特性的CS mode。
我們可以使用rosnode info命令去看到其所有的訂閱者、發布目標以及服務列表,此外,還能看到此節點的位置以及PID。
??:在ROS系統中,為了最高效的利用資源,當我們啟動一個新節點時,默認策略會使得主服務器隨機選擇一個可用端口進行節點綁定,當有其他節點想要鏈接此節點時只需要向消息代理詢問即可,這個策略盡管實現了空間解耦,但是阻礙了我們利用ROS系統進行CTF競賽的命題,因為無法動態的進行docker的端口映射,如果有讀者可以解決此問題,請在本文評論區發布評論,筆者在此感激不盡。
-
啟動小烏龜節點【需要桌面環境】
接下來我們使用rosrun turtlesim turtlesim_node命令啟動小烏龜節點
此時或許可以發現,每次啟動小烏龜節點時,小烏龜的皮膚都不相同,我們重新使用rosnode命令觀察節點
我們可以發現以下幾點:
- 小烏龜節點/turtlesim已經對/rosout這個節點產生了訂閱關系。
- /turtlesim同樣提供了若干話題以及若干服務。
那么,如果我們不想用/turtlesim這個節點名,ROS系統事實上提供了自定義節點名稱的參數。
首先關閉小烏龜節點啟動的節點或者在小烏龜節點的終端使用Ctrl + C來終止,之后使用命令rosrun turtlesim turtlesim_node __name:=myturtle1啟動,啟動后再次查看node信息:
可以發現,這個節點的名字已經改變了。
-
物聯網
+關注
關注
2913文章
44923瀏覽量
377006 -
服務器
+關注
關注
12文章
9303瀏覽量
86061 -
ROS
+關注
關注
1文章
280瀏覽量
17095
發布評論請先 登錄
相關推薦
系統鏡像Ubuntu_ROS2中ROS2是什么意思,帶有ROS2開發環境嗎?
如何搭建實體機器人ros底盤
如何低成本搭建ARM+ROS的硬件載體?
搭建ARM+ROS的硬件載體之ROS的移植及測試方法
搭建ARM+ROS的硬件載體之ROS部署前的籌備工作及步驟分解
本地測試環境搭建
![<b class='flag-5'>本地</b>測試環境<b class='flag-5'>搭建</b>](https://file.elecfans.com/web1/M00/45/9D/pIYBAFpxgfiAUIjeAAC4O8k79pE946.png)
ROS系統的本地搭建(上)
![<b class='flag-5'>ROS</b><b class='flag-5'>系統</b>的<b class='flag-5'>本地</b><b class='flag-5'>搭建</b>(上)](https://file1.elecfans.com/web2/M00/88/78/wKgaomRnPbCAWhMSAAFHEtIuJZI926.jpg)
使用Nexus在本地搭建npm、yum和maven私有倉庫
![使用Nexus在<b class='flag-5'>本地</b><b class='flag-5'>搭建</b>npm、yum和maven私有倉庫](https://file1.elecfans.com/web2/M00/03/A6/wKgZombFiyyAMdBqAAEZj6_sdbo352.png)
本地電腦如何搭建云電腦,本地電腦搭建云電腦的步驟
![<b class='flag-5'>本地</b>電腦如何<b class='flag-5'>搭建</b>云電腦,<b class='flag-5'>本地</b>電腦<b class='flag-5'>搭建</b>云電腦的步驟](https://file1.elecfans.com/web3/M00/03/4C/wKgZPGdmV3CABepGAACJOYqllaQ719.png)
使用myCobot 280機械臂結合ROS2系統搭建機械分揀站
![使用myCobot 280機械臂結合<b class='flag-5'>ROS</b>2<b class='flag-5'>系統</b><b class='flag-5'>搭建</b>機械分揀站](https://file1.elecfans.com/web3/M00/05/FD/wKgZPGeHDmCAIR8mAABeZax7Ft8237.png)
評論