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