精通ROS机器人编程(原书第3版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5.2 运行ROS节点管理器和ROS参数服务器

在运行任何ROS节点之前,我们应该启动ROS节点管理器和ROS参数服务器。我们可以使用一个名为roscore的命令启动ROS节点管理器和ROS参数服务器,该命令将启动以下程序:

●ROS节点管理器

●ROS参数服务器

●rosout日志记录节点

rosout节点将从其他ROS节点收集日志消息,并将其存储在日志文件中,还会把收集的日志消息转播到另一个主题。/rosout主题由ROS节点使用roscpp和rospy等ROS客户端库发布,这个主题由rosout节点订阅,该节点在另一个名为/rosout_agg的主题中转播这些消息。/rosout_agg主题包含日志消息的聚合流。roscore命令应作为运行任何ROS节点的先决条件运行。图1.10显示了在终端中运行roscore命令时打印的消息。

使用以下命令在Linux终端上运行roscore:

运行此命令后,我们将在Linux终端中看到如图1.10所示的文本。

图1.10 运行roscore命令时的终端消息

以下是图中各部分的说明。

●在第1部分中,我们可以看到~/.ros/log文件夹中创建了一个日志文件,用于从ROS节点收集日志。此文件可用于调试。

●在第2部分中,该命令启动了一个名为roscore.xml的ROS启动文件。这个文件启动时,它会自动启动rosmaster和ROS参数服务器。roslaunch命令是一个Python脚本,只要它尝试执行启动文件,它就会启动rosmaster和ROS参数服务器。本部分还显示了端口内ROS参数服务器的地址。

●在第3部分中,我们可以看到rosdistro和rosversion等参数在终端中显示。这些参数在执行roscore.xml时就会显示出来。我们会在1.5.3节详细介绍roscore.xml。

●在第4部分中,我们可以看到rosmaster节点是用ROS_MASTER_URI启动的,之前我们将其定义为一个环境变量。

●在第5部分中,我们可以看到rosout节点正在启动,它将开始订阅/rosout主题并将其转播到/rosout_agg。

以下是roscore.xml的内容:

在执行roscore命令时,一开始,该命令会检查命令行参数,以获取rosmaster的新端口号。如果它得到了端口号,它就将开始监听新的端口号;否则,它将使用默认端口号。这个端口号和roscore.xml启动文件将被传递到roslaunch系统。roslaunch系统在Python模块中实现,它将解析端口号并启动roscore.xml文件。

在roscore.xml文件中,ROS参数和节点被封装在一个带有/namespace的组XML标记中。组XML标记表示此标记中的所有节点都具有相同的设置。

rosversion和rosdistro参数使用命令(command)标签存储rosversionroslaunch和rosversion-d命令的输出,命令标签是ROS param标签的一部分。command标签将执行其中提到的命令,并将命令的输出存储在这两个参数中。

rosmaster和参数服务器通过ROS_MASTER_URI地址在roslaunch模块内执行。这发生在roslaunch Python模块内部。ROS_MASTER_URI是rosmaster将要监听的IP地址和端口的组合。端口号可以根据roscore命令中给定的端口号进行更改。