ROS中的常用组件---launch启动文件

每当我们需要运行一个ROS节点或工具时,都需要打开一个新的终端运行一个命令。当系统中的节点数量不断增加时,每个节点一个终端的模式会变得非常麻烦。启动文件(Launch File)是ROS中一种同时启动多个节点的途径,还可以自动启动ROS Master节点管理器,可以实现每个节点的各种配置,为多个节点的操作提供了很大便利。

运行.launch文件命令

$ roslaunch package_name file.launch

launch文件实例:

<launch>
  <node name="mbot_teleop" pkg="mbot_teleop" type="mbot_teleop.py" output="screen">
    <param name="scale_linear" value="0.1" type="double"/>
    <param name="scale_angular" value="0.4" type="double"/>
  </node>
</launch>

一.launch文件的替代参数

1.指定包的相对路径。文件系统到包目录的路径将被内联的替换。

. $(find pkg)

例如:

$(find rospy)/manifest.xml

2.产生基于名称的匿名ID。名字本身是一个独特的标识符:不同的$(anon name)用法将创建相同的“匿名”的名字。主要用于“节点名称”属性中以创建匿名节点。ROS要求每个节点都有唯一的名字。

. $(anon name)

例如:

<node name="$(anon foo)" pkg="rospy_tutorials" type="talker.py"/>

3.计算由<arg>标签指定的值。

. $(arg foo)

在声明arg的同一启动文件中必须有对应的<arg>标签

例如:指定my_foo到foo参数

<param name="foo" value="$(arg my_foo)">

二.launch文件基本元素

1.<launch>

XML文件必须包含一个根元素,launch文件的根元素采用<launch>标签,它的唯一目的是作为其他元素的容器(文件中的其他内容都必须包含在这个标签中)

<launch>
    ...
    ...
    ...
</launch>

2.<node>

启动文件的核心是启动ROS节点,采用<node>标签定义。语法如下:

<node pkg="package_name" type="executable_name" name="node_name"/>

pkg:定义节点所在的功能包名称;

type:定义节点的可执行文件名称;

name定义节点运行的名称,将覆盖节点中init()赋予节点的名称。

以上是哪个是最常用的属性,在应用中我们还可能用到其他的一些属性:

output="screen":将节点的标准输出打印到终端屏幕,默认输出为日志文档。

resapwn="true"复位属性,该节点停止时,会自动重启,默认为false。

required="true":必要节点,当该节点终止时,launch文件中的其他节点也被终止

ns="namespace"命名空间,为节点内的相对名称添加命名空间前缀

args="arguments":节点需要的输入参数

三.参数设置

launch文件支持参数设置的功能,类似于编程语言中的变量声明

1.<param>  ---代表parameter,是ros系统运行中的参数,存储在参数服务器中。

在launch文件中通过<param>元素加载parameter;launch文件执行后,parameter就加载到ROS的参数服务器上了。

使用方法:

<param name="namespace/param_name" value="param_value">

运行launch文件后,"namespace/param_name"这个parameter的值就设置为"param_value",并且加载到ROS参数服务器上了

name="namespace/param_name"定义参数名。参数名中可以包含命名空间,但指定的全局名称应该避免。

value="param_value":定义参数的值。

其余属性:textfile

textfile="$(find package_name)/path/file.txt"

该文件的内容以字符串的形式读取和存储。该文件必须是本地可访问的。

2.<rosparam>  ---加载多个参数

在很多复杂的系统中参数的数量很多,如果用<param>一个一个地设置会非常麻烦,ROS就提供了<rosparam>这种加载方式:

<rosparam file="$(find 2dnav_pr2)/config/costmap_common_params.yaml" command="load" ns="local_costmap"/>

<rosparam>可以帮助我们将一个YAML格式文件中的参数全部加载到ROS参数服务器中,需要设置command属性为“load”,还可以选择设置命名空间“ns”。

3.<arg>---代表argument

argument是另外一个概念,类似于launch文件内部的局部变量,仅限于launch文件使用,便于launch文件的重构,和ROS节点内部的实现没有关系。它可以通过指定值来创建更多能重复使用和配置的文件。arg声明是针对单一启动文件,就像是一种方法中的局部参数一样。必须明确传递arg值到被包含的文件中,就像在方法调用中一样。有三种调用格式:

(1)声明参数arg_name。arg_name既可以作为命令行参数传递,也可以通过<include>传递(如果被包含的话)

<arg name="arg_name"/>

(2)声明有默认值arg_value的arg_name。arg_name能被覆盖(通过命令行参数传递(顶层),也可以通过<include>传递(如果被包含的话))。

<arg name="arg_name" default="arg_value"/>

(3)声明有常值的arg_name。arg_name不能被重写。这种用法保证了启动文件内部的参数化

<arg name="arg_name" value="bar">

launch文件中需要使用到argument时,可以使用如下方式调用:

<param name="foo" value="$(arg arg_name"/>
<node name="node" pkg="package" type="type" args="$(arg arg_name)"/>

四.重映射机制---<remp>

ROS提供一种重映射的机制,简单来说就是取别名,类似于C++中的别名机制,我们不需要修改别人功能包的接口,只需要将接口名称重映射一下,取个别名,我们的系统就认识了(接口的数据类型必须相同)。launch文件中的<remap>标签可以帮我们实现这个重映射的功能。

<remp>标签允许通过名称映射参数到ROS节点,其适用于在其范围内随后的所有声明。用法如下:

<remap from="original_name" to="new_name"/>

from="original_name":定义需要映射的参数名称

to="new_name":定义目标名称

五.嵌套复用---<include>

在复杂的系统当中,launch文件往往有很多,这些launch文件之间也会存在依赖关系。如果需要直接复用一个已有launch文件中的内容,可以使用<include>标签包含其他launch文件,这和C语言中的include几乎是一样的。使用方式:

<include file="$(dirname)/other.launch"/>

 

 

 

参考

胡春旭:《ROS机器人开发实践》

古月居:http://www.guyuehome.com/2195

ROS官网:http://wiki.ros.org/roslaunch/XML

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值