ROS 十:launch文件入门
launch文件是一种以xml为主要语法的描述文件
启动launch文件可以自动启动ROS Master。
一、基本语法
<launch>: launch文件中的更元素使用这个标签阿莱定义<node>:启动节点-
pkg:节点所在的功能包名称
-
type:节点的可执行文件名称
-
name:节点运行时的名称
-
output:(可选) “log | screen” 。 默认值为“log”。
- ‘screen’,stdout / stderr从节点将被发送到屏幕。
- “log”,stdout / stderr输出将被发送到$ ROS_HOME/ log中的日志文件,stderr将继续发送到屏幕。
-
respawn:(可选) 布尔值
如果节点退出,则自动重新启动节点。
对于每个节点,设置复位属性为真的时候, respawn=”true”,这样当节点停止的时候,roslaunch会重新启动该节点。
比如在某个节点因为软件崩溃或硬件故障以及其他原因导致过早退出系统的时候会起到作用。
-
respawn_delay (可选,默认为0)
如果respawn为true,roslaunch尝试重新启动之前,检测到节点故障后等待respawn_delay秒
-
-
required:(可选) 布尔值
当一个required node终止后,所有其他的nodes都会终止,并退出。这种命令有时很有用。比如,当一个很重要的node失败后,整个会话都会被扔掉,那些加上了respawn属性的nodes也会停止。
-
ns:(可选)节点的命名空间
在设置的命名空间中启动节点。前提是节点的代码在创建 发布者 和 订阅者 对象时使用了像
turtle1/pose这样的相对名称 (而不是/turtle1/pose这样的全局名称)。同样,启动文件中的节点名称是相对名称。
-
args:(可选)
args =“arg1 arg2 …… argn”。传递参数到节点。
-
machine:(可选)
在指定机器上启动节点。
-
clear_params :(可选)
在启动前删除节点的私有命名空间中的所有参数。
-
launch-prefix:(可选)
用于预先添加到节点的启动参数的命令/参数。
-
可以在<node>标记中使用以下XML 标签:
-
<env>——为节点设置环境变量。 -
<group>——标签可以对节点分组,具有 ns 属性,可以让节点归属某个命名空间 -
<remap>——为此节点设置重新映射参数。重映射是基于替换的思想,每个重映射包含一个原始名称和一个新名称。每当节点使用重映射中的原始名称时,ROS客户端库就会将它默默地替换成其对应的新名称。
例如,运行一个 turtlesim 的实例, 如果想要把海龟的姿态数据发布到话题/tim 而不是/turtle1/pose,就可以使用如下命令:
rosrun turtlesim turtlesim_node turtle1/pose:=tim通过启动文件的方式,只需在启动文件内使用重映射(remap)元素即可:
<remap from=”turtle1/pose”to ”tim”/> -
<rosparam>——将rosparam文件加载到此节点的 ~/ local命名空间中。 -
<param>——在节点的 ~/ local命名空间中设置一个参数。
二、demo
以上一篇小海龟tf案例为例,海龟2会一直跟随海龟1一直运动
具体案例和代码可参考:tf坐标系简介
参考第一部分的介绍,来看以下的demo
c++
<launch>
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen" required="True"/>
<node pkg="learn-tf" type="broadcaster" args="/turtle1" name="turtle_tf_b1"/>
<node pkg="learn-tf" type="broadcaster" args="/turtle2" name="turtle_tf_b2"/>
<node pkg="learn-tf" type="listener" name="listener" />
</launch>
python
<launch>
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen" required="True"/>
<node name="turtle1_tf_broadcaster" pkg="learn-tf" type="broadcaster.py" respawn="false" output="screen" >
<param name="turtle" type="string" value="turtle1" />
</node>
<node name="turtle2_tf_broadcaster" pkg="learn-tf" type="broadcaster.py" respawn="false" output="screen" >
<param name="turtle" type="string" value="turtle2" />
</node>
<node pkg="learn-tf" type="listener.py" name="listener" />
</launch>
编写完毕后,直接使用roslaunch <路径/launch文件名>即可直接运行,并无需启动ROS Master。