理解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