launch文件
launch文件
launch文件用于启动多个节点并加载运行参数,在运行ros节点时多采用launch文件启动节点。launch文件是一种特殊的XML格式文件,通常以.launch作为文件后缀。
launch文件标签(关键字)
<launch>
所有的launch文件都由<launch>
开头,由</launch>
结尾,所有的描述标签都要写在<launch></launch>
之间
<launch>
……
</launch>
<node>
每个node标签里包括了ROS中节点的名称属性name、该节点所在的包名pkg以及节点的类型type.
属性 | 属性作用 |
---|---|
name=“NODE_NAME” | 为节点指派名称,这将会覆盖掉ros::init()定义的node_name |
pkg=“PACKAGE_NAME” | 节点所在的包名 |
type=“FILE_NAME” | 执行文件的名称如果是用Python编写的就填写xxx.py,如果是cpp就写编译生成的可执行文件名 |
output=“screen” | 终端输出转储在当前的控制台上,而不是在日志文件中 |
respawn=“true” | 当roslaunch启动完所有该启动的节点之后,会监测每一个节点,保证它们正常的运行状态。对于任意节点,当它终止时,roslaunch 会将该节点重启 |
required=“true” | 当被此属性标记的节点终止时,roslaunch会将其他的节点一并终止。注意此属性不可以与respawn="true"一起描述同一个节点 |
launch-prefix = “command-prefix” | 在执行启动命令时加上一段命令前缀 |
ns = “NAME_SPACE” | 这个属性可以让你在自定义的命名空间里运行节点 |
<machine>
machine通常用于多主机之间启动节点,可以在本机上启动同一局域网下其他主机上的节点,具体用法示例如下:
<launch>
<!--定义一个machine主机并加载环境变量 -->
<machine name="foo" address="foo-address" env-loader="/opt/ros/fuerte/env.sh" user="someone"/>
<!--启动主机machine上的一个节点-->
<node machine="foo" name="footalker" pkg="test_ros" type="talker.py" />
</launch>
<include>
该标签可以导入另一个roslaunch XML文件到当前文件。
属性 | 属性作用 |
---|---|
file ="$(find pkg-name)/path/filename.xml" | 指明我们想要包含进来的文件 |
ns=“NAME_SPACE” | 相对NAME_SPACE命名空间导入文件 |
<remap>
remap标签顾名思义重映射,ROS支持topic的重映射,remap标签里包含一个original-name和一个new-name,及原名称和新名称。
比如现在你拿到一个节点,这个节点订阅了"/chatter"topic,然而你自己写的节点只能发布到"/demo/chatter"topic,由于这两个topic的消息类型是一致的,你想让这两个节点进行通讯,那么可以在launch文件中这样写:
<remap from="chatter" to="demo/chatter"/>
这样就可以直接把/chattertopic重映射到/demo/chatter,这样子不用修改任何代码,就可以让两个节点进行通讯。
如果这个 remap标签写在与 node 元素的同一级,而且在launch 元素内的最顶层。 那么这个重映射将会作用于launch文件中所有的节点。
<env>
env通常用于设置环境变量,仅用于标签<launch><node><include><machine>
范围内,且只有环境变量定义之后的节点生效。使用方法示例如下:
<env name="demo_env" value="demo_env"/>
<param>
param标签的作用相当于命令行中的rosparam set
例如现在在参数服务器中添加一个名为demo_param,值为666的参数
<param name="demo_param"