参考网址:
1
2
3

1.launch文件的使用方式

roslaunch package-name launch-file-name

注意:
1.在开始任何一个节点前,roslaunch 将会确定 roscore节点是否已经在运行,如果没有,自动启动它。不要与 rosrun命令 混淆,rosrun 只能启动一个节点。roslaunch 命令可以同时启动多个节点。
2.你也可以在使用 roslaunch 启动launch文件的时候没有package-name这部分。要想做到这一点,launch-file-name 文件需要写成绝对路径的形式。只要可以让 roslaunch 命令找到唯一的一个 launch 文件,你就可以不提供 package-name 部分。举例:

roslaunch ~/catkin_ws/src/beginner_turtorls/launch/xxx.launch

2.与launch相关的知识点

2.1 launch

其他的所有元素标签都要写在 <launch>...</launch> 便签之间。

<launch>...
</launch>

2.2 node

2.2.1 node写法举例:

 <node pkg="package-name" type="executable-name name="node-name" />

注意:一定要在node的结尾加上反斜杠/

pkg和type它们与rosrun的两个命令行参数一样,它们分别是:程序包名字和可执行文件的名字name属性指定了一个节点的名字。这个节点程序会调用ros::init()函数内有一个这个节点的name参数,导致这个节点的name被改写,所以这个name属性容易被覆盖。

2.2.2 将标准信息显示在屏幕上

在 node 元素中使用 output 属性:

output="screen"

或者
node元素的output属性只能影响这个节点自己。除了output属性,我们可以使用roslaunch命令行工具的–screen 令行选项强制性的在终端的窗口中显示所有节点的输出信息。

roslaunch --screen package-name launch-file-name

2.2.3 请求重生

启动完所有请求启动的节点之后,roslaunch 监测每一个节点,让它们保持正常的运行状态。对于每一个节点(node),当它终止( terminates)时,我们可以要求 roslaunch 重新启动它,这就是 respawn 属性做的事情:

respawn="true"

2.2.4必需结点

让一个节点可以重生的另一种方法是:宣布这个节点是必需的(require):

required="true"

当一个必需的节点终止时,roslaunch会做出响应,终止其他所有的节点并退出它自己。这种行为机制是有用的。

2.2.5 让每一个节点在单独的终端窗口中启动它们自己

用 roslaunch 命令 的一个潜在的缺点:相比我们原来对每个节点在单独的终端使用 rosrun 命令启动的做法,roslaunch 则是让所有的节点共享同一个终端。 那些只需要生产简单的日志消息文件而不需要终端(console)输入的节点是容易管理的,而那些依赖终端输入的节点,比如 turtle_teleop_key 节点,它可能要优先的保留在独立的终端上。

庆幸的是,roslaunch 提供了一个简单的属性去实现这一点,在 node 元素里使用 launch-prefix 属性:

launch-prefix="command-prefix"

在例子launch文件中,我们给 teleoperation 节点使用了这个属性:

launch-prefix="xterm -e"

因为这个属性,启动这个 node 元素的 rosrun 命令大致相当于:

xterm -e rosrun turtlesim turtle_teleop_key

正如我们所知道的,xterm 命令会开一个新的终端窗口。 -e 参数告诉 xterm :执行其命令行剩余部分(rosrun turtlesim turtle_teleop_key)。

2.2.6 命名空间

在 node 元素中指定 ns 属性:

ns="namespace"

举例如下:

<launch><nodename="turtlesim_node "pkg="turtlesim"type="turtlesim_node "ns="sim1"/><nodepkg="turtlesim"type="turtle_teleop_key "name="teleop_key"required="true"launch −prefix="xterm −e"ns="sim1"/><nodename="turtlesim_node "pkg="turtlesim"type="turtlesim_node "ns="sim2"/><nodepkg="a gitr "type="pubvel"name="velocity_publisher "ns="sim2"/>
</launch>

在这里例子中,turtlesim 话题名字(turtle1/cmd_vel、turtle1/color_sensor 和 turtle1/pose)被从全局命名空间移动到/sim1和/sim2的单独命名空间里。

2.2.7 重映射名字

在启动一个节点的时候,有两种方法创建重映射:

在终端命令行中启动一个节点时,要重新给这个节点命名:给出一个节点原来的名字和新的名字,中间用:=分开。

original-name:=new-name

例如,在运行turtlesim实例时,我们现在想把发布姿态数据的话题/turtle1/pose名称改为:/tim,那么命令就是这样的:

rosrun turtlesim turtlesim_node turtle1/pose:=tim

在launch文件中重新命名:使用 remap 元素:

<remap from="original-name" to="new-name" />

如果这个 remap 是 launch 元素的一个child(子类),与 node 元素同一层级, 并在 launch 元素内的最顶层。那么这个 remapping 将会作用于后续所有的节点。

这个 remap 元素也可以作为 node 元素的一个child(子类)出现。下面这个就是使用模板:

<node node-attributes ><remap from="original-name" to="new-name" />. . .
</node>

例如:上面命令行命令如果在launch文件中,就是下面这个样子的:

<node pkg="turtlesim" type="turtlesim_node"name="turtlesim" ><remap from="turtle1/pose" to="tim" />
</node>

3 include

3.1 file 属性

包含(including)其他文件:

<include file="path-to-launch-file" />

这个 file 属性期望我们添加想要包含的文件的完整路径。但是大多数时候,include 元素使用一个 find 命令来搜索一个程序包,代替一个明确的完整路径:

<include file="$(find package-name)/launch-file-name"

注意:roslaunch 命令 将会在程序包(package)的子目录里搜索launch文件。 include 元素必须要指定文件的特定路径,你可以使用 find 来找到这个程序包,但是却不能在这个程序包目录里面自动的找到某个子目录里有launch文件。

举例:

这样做是正确的:

<include file = "find learning_tutrols"/launch/start_demo.launch" / >

这样做是错误的:

<include file = "find learning_tutrols"/start_demo.launch" />

3.2 ns命名空间

include 元素也支持 ns 属性,可以让这个文件里的内容推送到一个命名空间里面:

<include file=". . . " ns="namespace" />

一般我们都会给 include 元素设置一个 ns 属性。

3.3 启动参数(Launch arguments)

为了帮助launch文件配置,roslaunch 支持 launch arguments(启动参数),也叫做 arguments 或者 args。它的功能有点像一个可执行程序的局部变量。它的优点是,你可以通过编写launch文件来避免编写重复代码。为少数的信息使用arguements,可以改变程序的运行。

给参数赋值的几种操作:

  • 在命令行中你可以这样做:给 roslaunch 提供一个 value :
    roslaunch package-name launch-file-name arg-name:=arg-value

  • 在launch文件中,你可以提供一个 value(赋值) 作为 arg 声明的一部分,使用下面的两种语法之一就可以:

    < arg name=“arg-name” default=“arg-value” />
    < arg name=“arg-name” value=“arg-value” />

4.创建组(group)

最后一个要介绍的launch文件特性就是,再来说说:group 元素,它提供了一个方便的方法来在一个大型的launch文件中组织节点。group元素可以达到两个目的:

1 . 组(group)可以把几个节点推送到同一个命名空间中。

<group ns="namespace" />. . .
</group>

2 . 组(groups)里面的每一个节点在启动的时候都会给定默认的命名空间。

如果一个已经被分组的节点有自己的 ns 属性,那么结果:被启动的节点的命名空间会出现嵌套的关系: /group-namespace/ns-namespace/node-name 。

3 . 组(groups)可以通过 判别条件 来启用或禁用节点(nodes):

<group if="0-or-1" />. . .
</group>

如果 if 属性的值是 1 , 标签内封闭的元素(elements)会被包含。如果 if 属性 值是 0 ,则 标签内包含的元素会被忽略。 unless 属性的工作方式类似 if 属性,但是含义颠倒:

<group unless="1-or-0" />. . .
</group>

当然了,通常我们不会给这些属性使用简单的 0 或 1 这样的幅值。建议:结合 arg 的 $() 技术,它们会将你的launch文件的配置变得非常的强大。

对于ros中launch文件的解读相关推荐

  1. ROS中launch文件的编写

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

  2. ROS中launch文件使用笔记

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

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

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

  4. ROS中yaml文件编写格式

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

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

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

  6. 9.使用rosed在ROS中编辑文件

    使用rosed在ROS中编辑文件(rawmeat:http://wiki.ros.org/ROS/Tutorials/UsingRosEd) 注意:本教程翻译于2018.9.17,由wiki.ros. ...

  7. 【RK3399Pro学习笔记】十五、ROS中launch启动文件的使用方法

    目录 Launch文件语法 <launch><launch><launch> <node><node><node> 参数设置 & ...

  8. ROS系统中launch文件无法启动

    方法一:LAUNCH文件无法启动,权限问题,开权限. 方法二: source devel/setup.bash

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

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

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

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

最新文章

  1. PHP中$_SERVER的详细参数与说明
  2. 【最短路】【spfa】小vijos P1447 Updown
  3. python语言程序设计慕课_中国大学MOOC(慕课)_Python语言程序设计基础_试题及答案...
  4. shell磁盘监控自动化处理
  5. webgl坐标转换_OpenGL/WebGL顶点坐标变换过程简介
  6. lambda 复制数组
  7. 基于QGIS初探PostgreSQL的PostGIS插件,包括YUM和编译安装PostGIS
  8. Akka边学边写(3)-- ByteString介绍
  9. Linux系统入门学习:改变libvirt VM镜像的默认位置
  10. 配置中心Nacos与Apollo比较
  11. 彻底解决“IIS配置401错误”
  12. 215. Kth Largest Element in an Array
  13. 完美国际架设mysql_完美国际SF-物理机架设服务端教程
  14. import cv2
  15. 【转载】Java并发编程:volatile关键字解析 by 海子
  16. 养成备份的习惯的重要性
  17. FPGA零基础学习:FPGA芯片简介
  18. HY-SRF05超声波测距
  19. 阿里云 vps 关机 重启 无法连接
  20. jquery.fn jquery.extend jquery.fn.extend

热门文章

  1. 基于51单片机的波形发生器
  2. 深入理解Attention及变种(二)
  3. LeetCode--476. 数字的补数
  4. CSS — 导航栏篇(一)
  5. python 组合优化 回撤最小_【研究】如何用python实现Markowitz投资组合优化
  6. 使用Qt实现FTP客户端
  7. 仿ios相机apk_icamera仿苹果安卓版-icamera仿苹果软件下载-多多root网
  8. 第十六届全国大学生智能车广东赛区高校组合汇总
  9. lunix 下编译draco遇到的问题及解决办法
  10. 论K21O Draco开发板的概论