1. 常用标签

<launch>                <!--根标签-->
<node>                  <!--需要启动的node及其参数-->
<include>               <!--包含其他launch-->
<machine>               <!--指定运行的机器-->
<env-loader>            <!--设置环境变量-->
<param>                 <!--定义参数到参数服务器-->
<rosparam>              <!--加载yaml文件中的参数到参数服务器-->
<arg>                   <!--定义变量-->
<remap>                 <!--设定 topic 映射-->
<group>                 <!--设定分组-->
</launch>               <!--根标签-->

2. 节点属性

2.1. 节点元素的形式

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

在节点标签末尾的斜杠“/”是必须的,但很容易忘。你也可以这样显式地给出结束标签:

<node pkg=”…”type=”…” name=”…”></node> 如果该节点有子节点,例如 remap 或者 param 元素,那么该显式结束标签是必不缺少的。还有就是name属性给节点指派了名称,它将覆盖任何通过调用 ros::int来赋予节点的名称。在默认状态下,从启动文件启动节点的标准输出被重定向到一个日志文件中,而不是在制台显示。该日志文件的名称是: ~/.ros/log/run_id/node_name-number-stout.log 其中,run_id 是节点管理器(master)启动时生成的一个唯一标示符。

2.2. 显示属性

某个单独的节点在控制台中输出信息,只需在节点元素中配置:output=”screen”配置了该属性的节点会将标准输出显示在屏幕上而不是记录到日志文档。

2.3. 复位属性

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

2.4. 必要节点

当一个节点被声明为必要节点即 required="true"终止的时候,roslaunch 会终止所有其他活跃节点并退出。比如在依赖控制台的机器人遥控导航中,关闭了该远程控制节点所在的窗口,roslaunch将会终止其他节点,然后退出。

2.5. 命名空间

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。

2.6. 名称重映射

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

2.7. GDB调试

# 在launch 文件中加下launch-prefix="gdb -ex run --args"

3. 设置变量

<!-- Topic Configure Path -->
<arg name="topic_config" default="$(find my_package)/topic_config.yaml"/>

4. 根据条件设置变量

<arg name="camera" value="false" if="$(eval arg('model')==1)"/>
<arg name="camera" value="true" unless="$(eval arg('model')==1)"/>

5. 示例

<?xml version="1.0"?>
<launch><!--设定命名空间--><arg name="robot_namespace" default="/"/><!-- Sim Time --><param name="/use_sim_time" value="false"/><!-- Topic Configure Path --><arg name="topic_config" default="$(find my_package)/topic_config.yaml"/><node pkg="logger" type="logger_node" name="logger_node" output="screen" args="--topic_config $(arg topic_config) \--output_folder $(find utils)/logger /><!--启动rviz--><node name="rviz" pkg="rviz" type="rviz" args="-d $(find arm_hand)/config/visualization.rviz" required="true" />
</launch>

6. 使用问题汇总

launch文件启动的程序一直占用控制台

现象

在控制台使用launch文件启动的程序,在程序执行完成控制台依然被占用。

原因分析

这是因为launch默认运行roscore,这个roscore一直占用着控制台。

解决方法

1. 在运行该程序之前先开一个终端启动roscore,就不会发生这一问题;

2. 使用rosrun来运行程序,使用方法上和launch类似;

参考文献

  • https://www.jianshu.com/p/e55850b87c7d?from=singlemessage
  • https://www.cnblogs.com/zjiaxing/p/5542614.html

ROS中launch文件使用笔记相关推荐

  1. ROS中launch文件的编写

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

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

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

  3. ROS中yaml文件编写格式

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. n阶乘的c语言代码,求10000的阶乘(c语言代码实现)
  2. 重新设计一款Android App,我会怎么做?
  3. 深交所互动平台_怡达股份股价涨跌幅偏离大盘,深交所:啥原因?
  4. asm java 反编译_dex-tools-2.1-SNAPSHOT 反编译Java class文件和Android dex文件到Java源码的利器 - 下载 - 搜珍网...
  5. 一、搭建Extjs 4.1开发环境
  6. 二叉树两个节点的公共节点
  7. 前端学习(535):多列布局2
  8. Platform Builder实践之配置文件
  9. db2中null和空值的区别_MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?
  10. cpython vm_【协程原理】 - cPython的VM真变态
  11. haproxy基于cookie实现会话绑定
  12. MAVEN项目的搭建
  13. leetcode解题报告:Interleaving String
  14. SHA1算法 C语言实现
  15. rabbitmq完整学习-springboot整合rabbitmq
  16. MySQL索引原理以及查询优化
  17. 论文阅读:Reasoning about Object Affordances in a Knowledge Base Representation
  18. qt4.8.7 2016年4月18日 error reading collection file qthelpcollection cannot load sql
  19. Java用POI导出Excel合并单元格、字体、居中样式
  20. 科技进化的终点,与荣耀全场景的起点

热门文章

  1. 产品经理如何做好数据埋点
  2. 惠普中国前总裁孙振耀:离开时心痛得哭了出来
  3. CleanMyMac扩展管理功能
  4. Java调用C/C++编写的第三方dll动态链接库(zz)
  5. Nagios 安装文档
  6. 性能测试中传——lr理论基础(四)
  7. Android Handler的使用!!!
  8. JSF和Struts的区别概述
  9. linux下安装sbt_如何在Linux上安装SBT
  10. 微信公众号开发本地环境开发_如何在5分钟内使HTTPS在本地开发环境上工作