1、launch文件功能

使用launch文件,可以同时启动多个ros节点,包括master节点。其基本思想是在一个XML格式的文件内将需要同时启动的一组节点罗列出来。

roslaunch package-name launch-file-name

2、创建launch文件

具体可参考:http://wiki.ros.org/roslaunch/XML/

2.1、launch文件的节点属性

具体可参考:http://wiki.ros.org/roslaunch/XML/launch

2.1.1、param

param标记定义了要在参数服务器上设置的参数。可以指定文本文件、二进制文件或命令属性来设置参数值。param标记可以放在node标记中,在这种情况下,该参数被视为私有参数。

1、param属性

(1)name=“namespace/name”
参数名称。名称空间可以包含在参数名中,但应避免全局指定的名称。

(2)value=“value”(可选)
定义参数的值。如果省略此属性,则必须指定binfile、textfile或command。

(3)type=“str/int/double/bool/yaml”(可选)
指定参数的类型。如果不指定类型,roslaunch将尝试基于以下规则自动确定类型。
∙\bullet∙ 带“.”的数字是浮点,否则是整数;
∙\bullet∙ “true”和“false”是布尔值(不区分大小写)。
∙\bullet∙ 所有其他值都是字符串

(4)textfile="$(find pkg-name)/path/file.txt"(可选)
文件的内容将被读取并作为字符串存储。

(5)binfile="$(find pkg-name)/path/file"(可选)
文件的内容将被读取并存储为base64编码的XML-RPC二进制对象。

命令的输出将被读取并存储为字符串。

2、例子

<param name="publish_frequency"  type="double"  value="10.0" />
<rosparam command="load"  file="FILENAME" />  加载YAML文件
<param name="robot_description" command="$(arg urdf_file)" />

2.1.2 、rosparam

rosparam一次性将多个参数加载到参数服务器中. 我们将需要设置的参数放到 .yaml 文件中。它还可以用于删除参数。rosparam标记可以放在node标记中,在这种情况下,该参数被视为私有名称。

1、rosparam属性

(1)command=“load/dump/delete” (可选, default=load)
rosparam命令。

(2)file="$(find pkg-name)/path/foo.yaml" (load or dump commands)
rosparam文件的名称。

(3)param=“param-name”
参数名称。

(4)ns=“namespace” (可选)
将参数范围设置为指定的命名空间。

(5)subst_value=true|false (可选)
允许在yaml文本中使用替换参数。

2、例子

<rosparam command="load" file="$(find rosparam)/example.yaml" />
<rosparam command="delete" param="my/param" />
<rosparam>a: 1b: 2
</rosparam>

2.1.3、node

node标记指定要启动的ros节点。这是最常见的roslaunch标签,因为它支持最重要的功能:启动和关闭节点。roslaunch并不保证节点的起始顺序。

1、node属性

(1)pkg=“mypackage”
节点的package,相当于 rosrun 命令后面的第一个参数。

(2)type=“nodetype”
rosrun 命令的第二个参数;节点类型。必须有一个同名的对应可执行文件。

(3)name=“nodename”
该节点的名字,相当于代码中 ros::init() 中设置的信息,有了它代码中的名称会被覆盖。注意:名称不能包含命名空间。请改用ns属性。

(4)args=“arg1 arg2 arg3”(optional)
启动参数,将参数传递给节点。

(5)machine=“machine-name”(optional, see )
在指定的计算机上启动节点。

(6)respawn=“true”(optional, default: False)
如果退出,则自动重新启动节点。

(7)respawn_delay=“30” (optional, default 0) New in ROS indigo
如果reshawn为true,则在检测到节点故障后等待reshawn_delay秒,然后再尝试重新启动。

(8)required=“true”(optional)
如果节点终止,终止整个roslaunch。

(9)ns=“foo”(optional)
在“foo”命名空间中启动节点。

(10)clear_params=“true/false”(optional)
在启动之前删除节点私有命名空间中的所有参数。

(12)output=“log/screen”(optional)
如果“screen”,则节点的stdout/stderr将发送到屏幕。
如果是“log”,则stdout/stderr输出将被发送到$ros_home/log中的日志文件,并且stderr将继续发送到屏幕。默认值为“log”。

(13)cwd=“ROS_HOME/node”(optional)
如果是“node”,则该节点的工作目录将设置为与该节点的可执行文件相同的目录。

(14)launch-prefix=“prefix arguments”(optional)
在节点的启动参数前添加命令/参数。这是一个强大的特性,使您能够启用gdb、valgrind、xterm、nice或其他方便的工具。

2、例子

<node name="listener1" pkg="rospy_tutorials" type="listener.py" args="--test" respawn="true" />

使用命令行参数test从rospy_tutorials包中的listener.py可执行文件启动“listener1”节点。如果节点终止了,它将自动被重启。

<node name="bar1" pkg="foo_pkg" type="bar" args="$(find baz_pkg)/resources/map.pgm" />

从foo_pkg包启动bar节点。本例使用替换参数将可移植引用传递给baz_pkg/resources/map.pgm。

2.1.4、remap

remap标记允许您以比直接设置node的args属性更结构化的方式将名称重新映射参数传递给要启动的ros节点。remap标记应用于其作用域(launch、node或group)中的所有后续声明。

1、remap属性

(1)from=“original-name”
正在重新映射的名称。

(2)to=“new-name”
目标名称。

2、例子

<remap from="chatter" to="hello"/>

例如,给定一个节点,该节点表示它订阅“chatter”主题,但只有一个节点发布“hello”主题。它们是相同类型的,您希望通过以下方式将“hello”主题导入希望“chatter”的新节点。

2.1.5、machine

machine标记声明一台可以在其上运行ros节点的机器。如果要在本地启动所有节点,则不需要此标记。它主要用于为远程计算机声明ssh和ros环境变量设置,但也可以使用它声明有关本地计算机的信息。

1、machine属性

(1)name=“machine-name”
要分配给计算机的名称。这对应于用于node标记的machine属性的名称。

(2)address=“blah.willowgarage.com”
计算机的网络地址/主机名。

(3)env-loader="/opt/ros/fuerte/env.sh"
指定远程计算机上的环境文件。环境文件必须是一个shell脚本,用于设置所有必需的环境变量,然后对提供的参数运行exec。

(4)default=“true|false|never” (可选)
将此计算机设置为要分配节点的默认值。默认设置仅适用于稍后在同一范围内定义的节点。注意:如果没有默认机器,则使用本地机器。您可以通过设置default=“never”来阻止选择机器,在这种情况下,只能显式分配机器。

(5)user=“username” (可选)
用于登录到计算机的ssh用户名。如果不需要,可以省略。

(6)password=“passwhat”(强烈推荐)
ssh密码

(7)timeout=“10.0” (可选)
此计算机上的roslaunch被视为无法启动之前的秒数。默认情况下,这是10秒。虽然您可以使用此设置来允许较慢的连接,但需要更改此参数通常是您的整个ROS图将出现通信问题的症状。

2、例子

<launch><machine name="foo" address="foo-address" env-loader="/opt/ros/fuerte/env.sh" user="someone"/><node machine="foo" name="footalker" pkg="test_ros" type="talker.py" />
</launch>

上面的示例显示如何配置节点“footalker”以运行另一台计算机。它使用fuerte附带的默认env loader文件。

2.1.6、include

include标记允许您将另一个roslaunch xml文件导入当前文件。它将在文档的当前范围内导入,包括group和remap标记。将导入包含文件中的所有内容,但master标记除外:master标记仅在最上层文件中遵守。

1、include属性

(1)file="$(find pkg-name)/path/filename.xml"
要包含的文件名。

(2)ns=“foo” (可选)
导入相对于“foo”命名空间的文件。

(3)clear_params=“true|false” (可选 Default: false)
启动前删除include命名空间中的所有参数。此功能非常危险,应小心使用。必须指定ns。默认值:false。

(4)pass_all_args=“true/false” (可选 Default: false) ( Indigo 和 Jade as of roslaunch version 1.11.17)
如果为true,则当前上下文中设置的所有参数都将添加到为处理包含的文件而创建的子文件上下文中。您可以这样做,而不是显式列出要传递的每个参数。

2、例子

<include file="$(find region_cover_start)/launch/amcl.launch" />

2.1.7、env

env标记允许您在启动的节点上设置环境变量。此标记只能在launch、include、node或machine标记的范围内使用。当在launch标记内使用时,env标记仅适用于之后声明的节点。
注意:使用env标记设置的值不会被$(env…)看到,因此env标记不能用于参数化启动文件。

1、env属性

(1)name=“environment-variable-name”
正在设置的环境变量名称。

(2)value=“environment-variable-value”
设置环境变量的值。

2、例子

2.1.8、test

test标记在语法上与node标记相似。它们都指定要运行的ros节点,但是test标记表示该节点实际上是要运行的测试节点。

1、test属性
test标记共享大多数normal node属性,除了:
没有reshawn属性(测试节点必须终止,因此它们不可重新生成)。
没有输出属性,因为测试使用自己的输出日志记录机制。
忽略计算机属性。
它还添加了几个属性,如下所述。

2、例子

2.1.9、arg

arg标记允许通过指定命令行传递、通过include传递或为更高级别文件声明的值来创建更多可重用和可配置的启动文件。args不是全局的。arg声明特定于单个启动文件,非常像方法中的本地参数。必须显式地将arg值传递给包含的文件,这与在方法调用中一样。

1、arg属性

(1)name=“arg_name”
参数的名称。

(2)default=“default value” (optional)
参数的默认值。不能与值属性组合。

(3)value=“value” (optional)
参数值。不能与默认属性组合。

(4)doc=“description for this arg” (optional) New in Indigo
参数的说明。

2、例子
例1:向包含的文件传递参数

<include file="included.launch"><!-- all vars that included.launch requires must be set --><arg name="hoge" value="fuga" />
</include>
<launch><!-- declare arg to be passed in --><arg name="hoge" /> <!-- read value of arg --><param name="param" value="$(arg hoge)"/>
</launch>

例2:通过命令行传递参数
roslaunch使用与ros remapping参数相同的语法来指定arg值。

$ roslaunch my_file.launch hoge:=my_value      (.launch file is available at the current dir)
$ roslaunch %YOUR_ROS_PKG% my_file.launch hoge:=my_value

2.1.10、group

group标记使设置更容易应用于一组节点。它有一个ns属性,允许您将节点组推送到一个单独的命名空间中。您还可以使用remap标记在组中应用remap设置。

1、group属性

(1)ns=“namespace” (optional)
将节点组分配给指定的命名空间。名称空间可以是全局名称空间或相对名称空间,但不鼓励使用全局名称空间。

(2)clear_params=“true/false” (optional)
启动前删除组命名空间中的所有参数。此功能非常危险,应小心使用。必须指定ns。

2、例子

<group ns="group_name">
</group>

3、launch文件解析

3.1、以urdf问基础的launch文件并启动rviz

<launch>
<!--参数声明,就是要启动的urdf文件路径--><arg name="model" />
<!--参数声明及赋值,是否启用关节转动控制面板窗口--><arg name="gui" default="False" />
<!--通过定义全局变量,告知launch文件启动时把全局变量robot_description中存储的模型文件加载到rviz中--><param name="robot_description" textfile="$(find smartcar_description)/urdf/smartcar.urdf" />
<!--设置GUI参数,显示关节插件--><param name="use_gui" value="$(arg gui)"/>
<!--运行joint_state_publisher节点,发布机器人的关节状态(显示关节旋转了多少度等等)--><node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"/ >
<!-- 运行robot_state_publisher节点,发布tf(根据上面的关节状态,创建整个机器人的tf关系,并发布到系统中)--><node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
<!-- 运行rviz可视化界面(args的参数作用类似于自定义rviz中的显示设置) --><node name="rviz" pkg="rviz" type="rviz" args="-d $(find urdf_tutorial)/urdf.vcg" />
</launch>

3.2、以xacro为基础的launch文件并启动rviz

<launch>
<!--设置参数,是否使用仿真时间--><param name="/use_sim_time" value="false" />
<!-- 加载我们机器人的urdf/xacro模型--><arg name="urdf_file" default="$(find xacro)/xacro.py '$(find smartcar_description)/urdf/smartcar.urdf.xacro'" /><!--参数声明及赋值,是否启用关节转动控制面板窗口-->   <arg name="gui" default="false" />
<!--通过定义全局变量,告知launch文件启动时把全局变量robot_description中存储的模型文件加载到rviz中--><param name="robot_description" command="$(arg urdf_file)" />
<!-- 设置GUI参数,显示关节控制插件 -->  <param name="use_gui" value="$(arg gui)"/><node name="arbotix" pkg="arbotix_python" type="driver.py" output="screen"><rosparam file="$(find smartcar_description)/config/smartcar_arbotix.yaml" command="load" /><param name="sim" value="true"/></node>
<!-- 运行joint_state_publisher节点,发布机器人的关节状态  --><node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node>
<!-- 运行robot_state_publisher节点,发布tf  --><node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher"><param name="publish_frequency" type="double" value="20.0" /></node><!-- 对轮子进行静态变换 --><node pkg="tf" type="static_transform_publisher" name="odom_left_wheel_broadcaster" args="0 0 0 0 0 0 /base_link /left_front_link 100" /><node pkg="tf" type="static_transform_publisher" name="odom_right_wheel_broadcaster" args="0 0 0 0 0 0 /base_link /right_front_link 100" />
<!-- 运行rviz可视化界面 --><node name="rviz" pkg="rviz" type="rviz" args="-d $(find smartcar_description)/urdf.vcg" />
</launch>

3.1、launch文件并启动gazebo(待完善)

4、launch文件中级应用

这一节主要介绍roslaunch在大型项目中的使用技巧。重点关注如何构建launch文件使得它能够在不同的情况下重复利用。

ROS学习:launch文件编写相关推荐

  1. Ros学习——launch文件解析

    launch文件的重点是:节点(node)元素的集合. roslaunch 则是让所有的节点共享同一个终端. 1.标签(元素)说明 1. group标签 2. node标签 <group ns= ...

  2. ROS中launch文件的编写

    ROS中launch文件的编写 launch文件介绍 ROS系统里的组成单位是节点(node),在启动ROS时需要启动所有的node,如果手动一一启动会是一项十分繁琐的事情,因此ROS通过launch ...

  3. linux开机启动roscore,树莓派ubuntuMate系统中开机自启动ROS的launch文件

    0x00 为何需要开机自启动launch文件 在ROS开发后期阶段由于功能已经趋于稳定,因此就需要系统在一上电启动后就自动把ROS下的各节点程序加载运行,这样就省去了我们还得手动输入roslaunch ...

  4. ROS中yaml文件编写格式

    目录 键值对 键值对书写格式 键值对的引用 强制类型转换 字符串 时间与日期 已知偏移时区和当地时间 已知UTC世界时间 数组 普通数组 键值对数组 数组的引用 多维数组 命名空间 命名空间下普通变量 ...

  5. ros launch文件编写和节点启动顺序控制

    ROS可以通过launch文件进行节点的管理.初始参数的设置,但是launch文件不能指定节点的启动顺序,因此本文简单介绍下通过launch进行节点启动管理,通过shell来控制节点启动顺序. 1,我 ...

  6. ROS:launch文件的语法规范

    在ROS应用中,一般涉及多个节点,而每个节点又有很多参数需要设置.为了方便.高效地操作多个节点,可以编写 .launch 文件,然后用roslaunch命令运行. 注意:存储启动文件的目录不一定必须命 ...

  7. ROS中launch文件使用笔记

    1. 常用标签 <launch> <!--根标签--> <node> <!--需要启动的node及其参数--> <include> < ...

  8. ros中launch文件使用与虚拟机中使用Livox avia

    在home目录创建工作空间,并创建src,将要安装的代码解压放在src中,编译ros项目 ROS入门(四)编译ROS程序包_小鱼儿飞呀飞的博客-CSDN博客_ros包编译 使用launch前要 `so ...

  9. ROS运行launch文件报错

    报错内容 RLException: Invalid roslaunch XML syntax: no element found: line 1, column 0. 解决方法 将launch文件关闭 ...

  10. ROS 使用参数以及相应的 .launch 文件编写

    参考 https://www.ncnynl.com/archives/201611/1061.html https://blog.csdn.net/u014303046/article/details ...

最新文章

  1. c保留小数点后三位数没有则为0_哪位老师整理的,这么齐全?赶紧存下为孩子期末考试助力...
  2. 数据库数据用Excel导出的3种方法
  3. jdk安装和环境变量的配置
  4. python strip_Python3 strip()方法
  5. RT-Thread智能音箱音频应用实践
  6. php signature解密,openssl RSA非对称加密、解密、签名、验签
  7. spring 4.3.x_如何在Spring 3.x中使用事件
  8. du -sh 如何找到最大的文件夹_小白必看!手把手教你如何在linux上安装redis数据库...
  9. caffe使用训练好的模型对自己的一张图片进行测试
  10. 3D Vision公开课精华 | 深度三维感知:数据、学习架构与应用
  11. pip命令安装pygeme后 IDLE import pygame报错
  12. Android设备的ID
  13. Hybird App开发,懂得小程序+kbone+finclip就够了!
  14. 计算今天是本学期第几周
  15. 世界主要粮食作物和经济作物的生产及其分布
  16. matlab 量化投资策略,【策略分享】Matlab量化交易策略源码分享
  17. 网页打开速度慢的原因及N种解决方法
  18. 面试题之10亿正整数问题--完整解答
  19. 银河麒麟系统开启root用户登录
  20. 多维尺度变换(multidimensional scaling, MDS)

热门文章

  1. ORACLE读取XML
  2. 隔离模块介绍-隔离信号模块-光耦
  3. 《数据库原理与应用》习题
  4. 个人应对冲突的五种策略
  5. 计算机键盘在哪里,电脑键盘上的Pause键在哪?
  6. 【用html做个人简历的网页(初级)】
  7. 【Python入门】Turtle海龟库:利用海龟画笔交互绘制字符旋涡
  8. 2D转换及相关案例实现
  9. 即时通讯软件会取代电子邮件吗?
  10. wed简介及html简单标签(1)