ROS-机器人操作系统(ROS)浅析----第六章

博客摘录于:机器人操作系统(ROS)浅析–[美] Jason M. OKane 著–肖军浩 译

启动文件
6.1 使用启动文件
可以启用多个节点。
关于roslaucn工具一个重要但容易忘记的事实是,文件内所有的节点几乎都在同一时刻启动。因此,事实上你无法确定各个节点的启动顺序。不过这并没有什么影响,设计良好的ROS节点是不关心各个节点的启动顺序的。(7.3节会列举一个启动顺序起重要作用的示例)。
该特性也表明,在ROS中,每一个节点都应该和其他节点尽可能保持独立。(回忆一下在2.8节中讨论的节点的松耦合关系)。只有在特定启动顺序下才能运行良好的节点不符合这种模块化思想。因此,这样的节点需要进行重新设计,从而克服启动顺序的约束。

必要节点(requiring node) 复位之外的另一种策略是将一个节点声明为必要节点。required=”true”
当一个必要节点终止的时候,roslaunch会终止所有其他活跃节点并退出。当出现(1)某个节点非常重要,此节点的故障会导致整个ROS会话的瘫痪;(2)节点即便设置了复位属性也不能很好地重启的时候,该需求属性的作用就会体现出来。

由于respawn和required二者的作用是相互矛盾的,因此,如果对一个节点同时配置了这两种属性,roslaunch会报错。

为节点维护独立的窗口:roslaunch提供了一个实现该目的的简洁方法——对节点元素使用启动前缀(launch-prefix)属性:

Launch-prefix=“command-prefix”

事实上,roslaunch在启动节点时的内部工作原理是调用相应的命令行工具,即rosrun。启动前缀的主要思想是在其命令行前面添加给出的命令行前缀。在我们的例子中,遥操作节点使用了这个功能:
launch-prefix=”xetrm-e”
在这个属性的作用下,节点元素和在命令行中输入下面的命令基本上是等价的:
xterm –e rosrun turtlesim turtle_teleop_key
6.3在命名空间内启动节点
ns=”namespace”

6.4 名称重映射


当使用命令行启动节点时,分别给出原始名称和新名称,中间由一个:=分开,如下所示:
original-name := new-name
例如,运行一个turtlesime的实例,如果想要把海龟的姿态 数据发布到话题/tim而不是/turtle1/pose,就可以使用如下命令:
rosrun turtlesim turtlesim_node turtle1/pose:=tim

通过启动文件的方式,只需在启动文件内使用重映射(remap)元素即可:

包含元素同样支持命名空间属性,可以将内容压入一个指定的命名空间中去:

的灵活运用



两者的唯一区别在于命令行参数可以覆盖默认值default,但是不能覆盖参数值value。在示例中,use_sim3有默认值0,但是可以用如下命令行对参数值进行修改:
roslaunch agitr riplesim.launch use_sim3:=1
如果我们想修改启动文件,用value替换default,那么该命令会产生错误,因为由value设置的参数值是不能更改的。
arg:在include标签之间的参数是属于被包含文件的,而不是它们出现的启动文件。因为目的是为被包括的启动文件设置响应的参数值,所以该处需要使用value属性。
group:组可以把若干个节点放入同一个命名空间内。

6.6展望 下一章我们将介绍参数服务器,向大家展现提供节点部分配置信息的集中式方法。

你可能感兴趣的:(ROS学习与研究,操作系统,机器人)