理解ROS的节点(NODE)

经过前面的学习,我们已经知道了如何构建一个ROS的包,这篇博客将介绍ROS中的节点的概念。

在继续之前,请按ctrl+alt+t打开一个终端,在里面输入:

sudo apt-get install ros-<distro>-ros-tutorials

安装一个轻量级的模拟器,命令中的"<distro>"需要替换为你自己的ros版本,若按照前面的教程的话,替换为hydro。

下面来看一下ROS中图的相关概念:

     节点(NODE):一个节点就是一个可执行程序,它使用ROS可以和其他节点进行通信。

     消息(Message):当在一个话题上,发布或订阅时所使用的ROS的数据类型。

     话题(Topic):节点可以在一个话题上发布消息,同样也可以订阅一个话题来接收消息。

     主机(Master):是ROS的名字服务器。

ROS的客户端库允许用不同的编程语言编写的节点之间相互通信。

roscore是你在使用ros之前应该首先运行的程序。在终端中运行roscore:

roscore

rosnode命令显示了正在运行的ros的节点的信息。如下命令列出了活跃的ros节点,新打开一个终端输入:

rosnode list

你将会看到:

/rosout

这说明了当前只有一个节点rosout在运行。

下面的这个命令可以返回活跃的节点的信息:

rosnode info /rosout

rosrun允许你直接运行一个包里面的节点。使用方法如下:

rosrun [package_name] [node_name]

在终端中输入:

rosrun turtlesim turtlesim_node

将会看到在屏幕上出现了一只乌龟。这个命令的作用是运行turtlesim包下面的turtlesim_node节点,多次运行这个命令可能会看到不同的乌龟,这算不算是一个惊喜呢。

新打开一个终端,在里面输入:

rosnode list

可以看到我们刚刚运行的节点,出现在了列表中。

我们还可以在命令行下给运行的节点直接指定名字,将刚刚打开的乌龟关闭。Close the turtlesim window to stop the node (or go back to the rosrun turtlesim terminal and use ctrl-C)。重新运行刚才的节点输入:

$ rosrun turtlesim turtlesim_node __name:=my_turtle

这时我们再次查看运行的节点:

rosnode list

显示的结果:

/rosout
/my_turtle

如果这时还能看到/turtlesim这个节点,那么可能的原因就是你是在terminal中用ctrl+c关闭的,而不是关掉窗口的。还有可能是环境变量$ROS_HOSTNAME的配置不正确。

下面学习另一个rosnode的命令:ping

$ rosnode ping my_turtle

返回的结果是:

rosnode: node is [/my_turtle]
pinging /my_turtle with a timeout of 3.0s
xmlrpc reply from http://aqy:42235/     time=1.152992ms
xmlrpc reply from http://aqy:42235/     time=1.120090ms
xmlrpc reply from http://aqy:42235/     time=1.700878ms
xmlrpc reply from http://aqy:42235/     time=1.127958ms

上面的这条指令执行后,跟网络的ping是一样的,也就是说我们的客户端是可以和这个node相互通讯的,只不过他们的通讯方式是利用xmlrpc。

总结:

这节学到的基本就是rosnode的相关概念和对应的命令行工具。roscore,rosnode,rosrun

posted @ 2014-12-25 20:54  stemon  阅读(3654)  评论(0编辑  收藏  举报