ROS提供了一个同时启动节点管理器(master)和多个节点的途径,即使用启动文件(launch file)。事实上,在ROS功能包中,启动文件的使用是非常普遍的。任何包含两个或两个以上节点的系统都可以利用启动文件来指定和配置需要使用的节点。通常的命名方案是以.launch作为启动文件的后缀,启动文件是XML文件。一般把启动文件存储在取名为launch的目录中。
 
每个XML文件都必须要包含一个根元素。根元素由一对launch标签定义:<launch> … <launch>元素都应该包含在这两个标签之内。

节点属性之节点元素的形式:

<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)启动时生成的一个唯一标示符。
 

节点属性之显示属性:

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

节点属性之复位属性:

对于每个节点,设置复位属性为真 respawn=”true”,这样当节点停止的时候,roslaunch会重新启动该节点。比如在某个节点因为软件崩溃或硬件故障以及其他原因导致过早退出系统的时候会起到作用。
节点属性之必要节点:当一个节点被声明为必要节点即 required=”true”终止的时候,roslaunch 会终止所有其他活跃节点并退出。比如在依赖控制台的机器人遥控导航中,关闭了该远程控制节点所在的窗口,roslaunch将会终止其他节点,然后退出。
 

节点属性之命名空间:

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。
 

名称重映射:

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

 


包含其他文件:

如果想在启动文件中包含其他启动文件的内容( 包括所有的节点和参数),可以使用包含(include)元素<include file=”$(find package-name)/launch-file-name”>由于直接输入路径信息很繁琐且容易出错,大多数包含元素都使用查找(find)命令搜索功能包的位置来替代直接输入路径。

 


启动参数:

roslaunch还支持启动参数,有时也简称为参数甚至args。在ROS中prarmeter和argument 是不同的,虽然翻译一样。parameter是运行中的ROS系统使用的数值,存储在参数服务器(parameter server)中,每个活跃的节点都可以通过 ros::param::get 函数来获取parameter的值,用户也可以通过rosparam来获得parameter的值而argument只在启动文件内才有意义他们的值是不能被节点直接获取的。

<arg name=”arg-name” default=”arg-value”/>与 <arg name=”arg-name” value=”arg-value”/>两者的唯一区别在于命令行参数(roslaunch xx yy.launch dd:=t)可以覆盖默认值default,但是不能覆盖参数值 value。用$(arg arg-name)在每个该替换出现的地方,roslaunch 都将它替换成参数值。
 
 
 

由浅到深理解ROS(5)- launch启动文件的理解与编写的更多相关文章

  1. ROS launch启动文件的理解与编写

    博客参考:https://blog.csdn.net/weixin_41995979/article/details/81784987 和 https://www.cnblogs.com/zjiaxi ...

  2. ros中launch启动文件的使用方法

    launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROS Master) launch文件中包含很多标签和属性 *launch文件语法 <launch> <node ...

  3. 由浅到深理解ROS(2)

    ROS文件系统 用户可以直接参看官网:http://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem ROS文件系统中的两个最基本的概念:Packa ...

  4. 由浅到深理解ROS(1)

    ROS机器人操作系统 ( Robot Operating System 或简称 ROS),可以帮助提高机器人软件的开发效率.ROS能够提供类似传统操作系统的诸多功能,如硬件抽象.底层设备控制.常用功能 ...

  5. 浅入深出之Java集合框架(下)

    Java中的集合框架(下) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,哈哈这篇其实也还是基础,惊不惊喜意不意外 ̄▽ ̄ 写文真的好累,懒得写了.. ...

  6. 浅入深出Vue:工具准备之PostMan安装配置及Mock服务配置

    浅入深出Vue之工具准备(二):PostMan安装配置 由于家中有事,文章没顾得上.在此说声抱歉,这是工具准备的最后一章. 接下来就是开始环境搭建了~尽情期待 工欲善其事必先利其器,让我们先做好准备工 ...

  7. 浅入深出Vue:前言

    浅入深出Vue系列文章 之前大部分是在做后端,后来出于某些原因开始接触Vue.深感前端变化之大,各种工具.框架令人眼花缭乱.不过正是这些变化,让前端开发更灵活. 博主在刚开始时,参考官网的各个步骤以及 ...

  8. Service由浅到深——AIDL的使用方式

    前言 最近有很多朋友问我这个AIDL怎么用,也许由于是工作性质的原因,很多人都没有使用过aidl,所以和他们讲解完以后,感觉对方也是半懂不懂的,所以今天我就从浅到深的分析一下这个aidl具体是怎么用的 ...

  9. [翻译] C# 8.0 新特性 Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南) 【由浅至深】redis 实现发布订阅的几种方式 .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐

    [翻译] C# 8.0 新特性 2018-11-13 17:04 by Rwing, 1179 阅读, 24 评论, 收藏, 编辑 原文: Building C# 8.0[译注:原文主标题如此,但内容 ...

随机推荐

  1. 12.Python使用requests发送post请求

    1.我们使用postman进行接口测试的时候,发现POST请求方式的编码有3种,具体的编码方式如下: A:application/x-www-form-urlencoded ==最常见的post提交数 ...

  2. 1072. Gas Station (30) 多源最短路

    A gas station has to be built at such a location that the minimum distance between the station and a ...

  3. OpenCV在debug和release模式下选择不同的lib静态库文件

    这两天测试OpenCV显示到MFC的Picture控件上,终于测试成功了,但是换到release模式下就会imread失败.发现问题是导入的lib问题. 因为VS如果通过Property Manage ...

  4. php 实现四种排序两种查找

    function bubbleSort($arr){ $len = count($arr); if($len<=1) { return $arr; } for ($i=0;$i<$len; ...

  5. FPGA之外,了解一下中断

    中断是什么? 中断的汉语解释是半中间发生阻隔.停顿或故障而断开.那么,在计算机系统中,我们为什么需要“阻隔.停顿和断开”呢? 举个日常生活中的例子,比如说我正在厨房用煤气烧一壶水,这样就只能守在厨房里 ...

  6. Java-Runoob:Java String 类

    ylbtech-Java-Runoob:Java String 类 1.返回顶部 1. Java String 类 字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 ...

  7. DataTables warning: table id=DataTables_Table_0 - Requested unknown parameter '1' for row 0. For more information about this error, please see http://datatables.net/tn/4

    今天在做后台的时候,考虑到会员模块和订单模块列表显示差不多,于是乎,偷了个懒,把会员列表显示页面的代码拷贝了过来,修改了一下,变成了订单模块.可是,在订单列表显示的时候老是报下面的错误,截图如下: 后 ...

  8. 使用wifi网卡笔记1----网卡选型、开发环境搭建、内核配置

    1.wifi的STA模式和AP模式 Ap(Access Point)模式指的是可以将网卡设置为路由器用来共享流量或有线网络给别人使用, sta模式指的是当做网卡连接路由器上网 (1):AP也就是无线接 ...

  9. 【BZOJ】1441 Min(数学)

    题目 传送门:QWQ 分析 裴蜀定理. 因为存在 $ a_1 $ $ a_2 $...... $ a_n $的最大公约数为 $ d $,那么必定存在 $ x_1*a_1+x_2*a_2+...x_n* ...

  10. 为什么要用webUI?

    先看看身边有哪些软件已经在用webUI: 1.QQ查找窗口: 2.LOL主界面: 3.EC营销软件功能界面: 三个例子足以说明一切: 1.HTML是目前在用户体验.界面舒适度最先进的语言 2.HTML ...