在这一节里面,我们将介绍ros图的概念,并讨论roscore
,rosnode
和rosrun
命令行工具的用法。
首先,我们需要安装一个轻量级的仿真器,这里我们需要通过如下的命令来安装:
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中有关话题的内容,尽请期待!