ROS之roslaunch中node标签解读

参考:https://www.cnblogs.com/qixianyu/p/6579798.html

ROS提供了一个同时启动节点管理器(master)和多个节点的途径,即使用启动文件(launch file)。事实上,在ROS功能包中,启动文件的使用是非常普遍的。任何包含两个或两个以上节点的系统都可以利用启动文件来指定和配置需要使用的节点。通常的命名方案是以.launch作为启动文件的后缀,启动文件是XML文件。一般把启动文件存储在取名为launch的目录中。每个XML文件都必须要包含一个根元素。根元素由一对launch标签定义:<launch> … <launch>元素都应该包含在这两个标签之内。

节点属性之节点元素的形式: <node pkg=”package-name” type=”executable-name” name=”node-name”/>在节点标签末尾的斜杠“/”是必须的,但很容易忘。你也可以这样显式地给出结束标签:<node pkg=”…”type=”…” name=”…”></node> 如果该节点有子节点,例如 remap 或者 param 元素,那么该显式结束标签是必不缺少的。还有就是name属性给节点指派了名称,它将覆盖任何通过调用 ros::int来赋予节点的名称。

一 node标签

在<node>标签指定一个ROS 节点,这是最常见的roslaunch标签,因为它支持最重要的功能:启动和关闭节点。roslaunch不保证节点开始的顺序。因为没有办法从外部知道节点何时被完全初始化,所以所有被启动的节点必须是稳健的,以便以任何顺序启动。

二 示例

<node name =“listener1”pkg =“rospy_tutorials”type =“listener.py”args =“ -  test”respawn =“true”/>
启动“listener1”节点,使用listener.py从可执行rospy_tutorials 包与所述命令行参数--test。如果节点死亡,它将自动重新生成。

<node name =“bar1” pkg =“foo_pkg” type =“bar” args =“$(find baz_pkg)/resources/map.pgm”/>
从foo_pkg包中启动bar1节点。此示例使用替换参数将可移植引用传递到baz_pkg / resources / map.pgm。 

三 属性

pkg =“mypackage”——节点包。

type =“nodetype”——节点类型。必须有一个具有相同名称的相应可执行文件。

name =“nodename”——节点基名称。注意:name不能包含命名空间。请改用ns属性。

args =“arg1 arg2 arg3” (可选)——传递参数到节点。

machine =“machine-name” (可选)——在指定机器上启动节点。

respawn =“true” (可选)——如果节点退出,则自动重新启动节点。对于每个节点,设置复位属性为真 respawn=”true”,这样当节点停止的时候,roslaunch会重新启动该节点。比如在某个节点因为软件崩溃或硬件故障以及其他原因导致过早退出系统的时候会起到作用。

respawn_delay =“30” (可选,默认为0)——如果respawn为true,请在尝试重新启动之前检测到节点故障后等待respawn_delay秒

required =“true” (可选)——ROS 0.10:如果节点死亡,杀死整个roslaunch。当一个节点被声明为必要节点即 required=”true”终止的时候,roslaunch 会终止所有其他活跃节点并退出。比如在依赖控制台的机器人遥控导航中,关闭了该远程控制节点所在的窗口,roslaunch将会终止其他节点,然后退出。

ns =“foo” (可选)——在“foo”命名空间中启动节点。ns=”namespace”,前提是节点的代码在创建 ros::Pbulisher 和 ros::Subccriber 对象时使用了像 turtle1/pose 这样的相对名称 (而不是/turtle1/pose 这样的全局名称)。同样,启动文件中的节点名称是相对名称。例如<node name="turtlesim_node" pkg="turtlesim " type="turtlesim_node" ns="sim1" />而不能是node name="/turtlesim_node" ,可以这么不准确的理解:两只连体小龟,他们做一件事是同时在做,比如让他们以不同的速度前进,他们做不到,若做手术分开,把他俩放在不同的房间(命名空间)他俩真正地独立起来,这样每个小龟可以接受不同的命令去做事,而且互不干扰。动文件默认命名空间是全局命名空间“/”,因此,节点的默认命名空间就解析为/sim1,所以对应的全局名称即/sim1/turtlesim_node。

clear_params =“true | false” (可选)——在启动前删除节点的私有命名空间中的所有参数。

output =“log | screen” (可选)——如果'screen',stdout / stderr从节点将被发送到屏幕。如果是“log”,stdout / stderr输出将被发送到$ ROS_HOME/ log中的日志文件,stderr将继续发送到屏幕。默认值为“log”。

cwd =“ROS_HOME | node” (可选)——如果为“node”,则节点的工作目录将设置为与节点的可执行文件相同的目录。在C Turtle中,默认值为“ROS_HOME”。在Box Turtle(ROS 1.0.x)中,默认值是'ros-root'。使用'ros-root'在C Turtle中已被弃用。

launch-prefix =“prefix arguments” (可选)——用于预先添加到节点的启动参数的命令/参数。这是一个强大的功能,使您能够启用gdb,valgrind,xterm,漂亮或其他方便的工具。

四 元素

您可以在<node>标记中使用以下XML 标签:

<env>——为节点设置环境变量。

<remap>——为此节点设置重新映射参数。重映射是基于替换的思想,每个重映射包含一个原始名称和一个新名称。每当节点使用重映射中的原始名称时,ROS客户端库就会将它默默地替换成其对应的新名称。例如,运行一个 turtlesime 的实例, 如果想要把海龟的姿态数据发布到话题/tim 而不是/turtle1/pose,就可以使用如下命令:rosrun turtlesim turtlesim_node turtle1/pose:=tim 通过启动文件的方式,只需在启动文件内使用重映射(remap)元素即可:<remap from=”turtle1/pose”to ”tim”/>

<rosparam>——将rosparam文件加载到此节点的〜 / local命名空间中。

<param>——在节点的〜 / local命名空间中设置一个参数。

猜你喜欢

转载自blog.csdn.net/zong596568821xp/article/details/79102115
今日推荐