ROS-Tutorials筆記05: 理解ROS的節點


在這一節里面,我們將介紹ros圖的概念,並討論roscorerosnoderosrun命令行工具的用法。

首先,我們需要安裝一個輕量級的仿真器,這里我們需要通過如下的命令來安裝:

sudo apt-get install ros-kinetic-ros-tutorials

接着,我們快速概覽一下圖相關的概念

節點(Nodes):節點是一個通過ROS與其他節點進行通信的可執行文件,就像windows下的.exe文件

消息(Messages):是ROS中通信數據的類型,當需要發布到話題或者從話題訂閱的時候,本質上是發布或者訂閱消息。

話題(Topics):節點可以發布消息到一個話題,當然了,節點也可以訂閱話題以便接收消息

節點管理器(Master):為ROS提供名稱服務,用於節點的名稱注冊和便於節點相互之間的查找

rosout:ROS中等價於stdout和stderr等標准的輸出

roscore:運行該命令等價於運行了節點管理器+rosout+參數服務器(參數服務器后面介紹)


節點(Nodes)

一個節點在ROS的功能包中其實就跟一個可執行文件差不多,ROS的節點通過ROS客戶端庫和別的節點進行通信,節點可以發布消息到話題或者從話題訂閱消息,當然了,節點也可以提供或者使用服務(不同於消息)。

客戶端庫

ROS的客戶端庫允許使用不同的編程語言編寫節點來進行節點之間的通信

  • rospy = python client library
  • roscpp = c++ client library

運行roscore

記住:當你使用ROS的時候,你要做的第一件事就是運行roscore

roscore

使用節點

打開一個新的終端,我們使用rosnode來看當我們執行roscore的時候有什么東西在運行,記住:不要關閉之前的終端

執行如下的命令,將輸出當前正在運行的節點:

rosnode list

輸出的結果為:

liuqiang@liuqiang-pc:~$ rosnode list
/rosout

/rosout是總是在運行中,因為它的作用就是搜集和記錄節點的調試信息

執行如下的命令,將輸出關於特定節點的信息

rosnode info /rosout

輸出的結果為:

liuqiang@liuqiang-pc:~$ rosnode info /rosout
--------------------------------------------------------------------------------
Node [/rosout]
Publications: 
 * /rosout_agg [rosgraph_msgs/Log]

Subscriptions: 
 * /rosout [unknown type]

Services: 
 * /rosout/set_logger_level
 * /rosout/get_loggers


contacting node http://liuqiang-pc:44848/ ...
Pid: 27445

接着,讓我們看看更多的節點,為此,我們要啟動更多的節點。

使用 rosrun

rosrun允許使用功能包的名稱直接運行功能包里面的節點(這個過程中,我們不需要提供功能包的路徑)

該命令的使用格式如下:

rosrun [package_name] [node_name]

例如,我們可以運行海龜這個節點:

rosrun turtlesim turtlesim_node

該命令執行完之后會顯示出一個帶有一只小海龜的矩形窗口,該窗口內部的矩形區域就是小海龜的世界。

這時,我們在一個新的窗口中運行:

rosnode list

輸出的結果為:

liuqiang@liuqiang-pc:~$ rosnode list
/rosout
/turtlesim

為節點重命名

ROS的一個強大的功能是用戶可以為節點重新命名(也叫作映射或者重定向)

首先,我們點擊鼠標,激活執行小海龜節點命令的窗口,按下ctrl + c快捷鍵關閉掉海龜節點,打開終端,執行如下的命令:

rosrun turtlesim turtlesim_node __name:=my_turtle

接着,我們重新運行如下的命令:

rosnode list

輸出的結果為:

liuqiang@liuqiang-pc:~$ rosnode list
/my_turtle
/rosout

接着,我們用ping命令來測試一下:

rosnode ping my_turtle

輸出結果為:

liuqiang@liuqiang-pc:~$ rosnode ping my_turtle
rosnode: node is [/my_turtle]
pinging /my_turtle with a timeout of 3.0s
xmlrpc reply from http://liuqiang-pc:46098/	time=0.330925ms
xmlrpc reply from http://liuqiang-pc:46098/	time=0.380039ms
xmlrpc reply from http://liuqiang-pc:46098/	time=0.359058ms
xmlrpc reply from http://liuqiang-pc:46098/	time=0.756979ms
xmlrpc reply from http://liuqiang-pc:46098/	time=0.627995ms
^Cping average: 0.490999ms

rosnode的其他的命令:

Commands:
	rosnode ping	test connectivity to node(測試節點的連通性)
	rosnode list	list active nodes
	rosnode info	print information about node
	rosnode machine	list nodes running on a particular machine or list machines
	rosnode kill	kill a running node
	rosnode cleanup	purge registration information of unreachable nodes

總結

在這一節里面,我們使用如下的幾個命令:

roscore:節點管理器+rosout+參數服務器

rosnode: 獲取有關節點信息的ROS工具

rosrun: 從給定的功能包里面運行一個節點

下一節,我們將講解ROS中有關話題的內容,盡請期待!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM