launch文件学习

以launch标签开头以表明是launch文件.

& -->>launch文件是XML格式标记文本,后缀名无关紧要,一般为.launch/.xml/.test/无后缀 最简单的配置如下:

<launch> <node name="you_define_node_name" pkg="package_name" type="exe_name" /> </launch>

启动上面的launch文件就会启动package_name包下的exe_name执行文件,you_define_node_name自定义的node_name

&-->>launch文件的位置并不是很重要,如果放在任意一个位置,可以运行下面指令: $roslaunch path-to-where/file.launch

&-->><launch> tag是launch文件根元素/根标签,其他标签包含在其中,/标志结束,多行时标签tag成对存在可以包含其他标签

if 或unless 属性 


组(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文件的配置变得非常的强大。 

<arg name="rviz" default="true" />

<group if="$(arg rviz)">
    <node launch-prefix="nice" pkg="rviz" type="rviz" name="rviz" args="-d $(find location)/rviz_cfg/velodyne_gazebo.rviz" />
    <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find simulte)/urdf/xacro/gazebo/mbot_kinect_lidar_gazebo.xacro'" /> 
  </group>

一、 node标签

  <node pkg="pkg_name" type="exe_name" name="node_name1" args="arg1 arg2 arg3" respawn="true" output="screen">  

1.pkg:功能包名称

2.type:可执行文件,节点名称

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

4.output = “screen” 
将节点的标准输出打印到终端屏幕,默认输出为日志文档。
5.respawn=”true” 
复位属性,该节点停止时,会自动重启,默认为false。
6.required=”true” 
必要节点,当该节点终止时,launch文件中的其他节点也被终止。
7.launch-prefix = “command-prefix” 
roslaunch 命令 的一个潜在的缺点:相比我们原来对每个节点在单独的终端使用 rosrun 命令启动的做法,roslaunch 则是让所有的节点共享同一个终端。 那些只需要生产简单的日志消息文件而不需要终端(console)输入的节点是容易管理的,而那些依赖终端输入的节点,比如 turtle_teleop_key 节点,它可能要优先的保留在独立的终端上。 
在例子launch文件中,我们给 teleoperation 节点使用了这个属性:launch-prefix=”xterm -e”.因为这个属性,启动这个 node 元素的 rosrun 命令大致相当于:xterm -e rosrun turtlesim turtle_teleop_key. 
xterm 命令会开一个新的终端窗口。 -e 参数告诉 xterm :执行其命令行剩余部分(rosrun turtlesim turtle_teleop_key)。

用于预先添加到节点的启动参数的命令/参数。这是一个强大的功能,使您能够启用gdb,valgrind,xterm,漂亮或其他方便的工具。

8.ns = “namespace” 
在例子launch文件中,使用这个属性创建了两个无关的 turtlesim 模拟器。 
turtlesim 话题名字(turtle1/cmd_vel、turtle1/color_sensor 和 turtle1/pose )被从全局命名空间移动 到 /sim1 和 /sim2 的单独命名空间里。
9.args属性 
节点需要的输入参数,arg参数只在launch文件中合法(相当于局部变量).


二、 remap标签

<node pkg="turtlesim" name="mimic" type="mimic">

<remap from="input" to="turtlesim1/turtle1"/>

<remap from="output" to="turtlesim2/turtle1"/>

</node>

 <remap from="input" to="turtlesim1/turtle1"/>的意思就是将当前节点订阅的话题input的映射到话题turtlesim1/turtle1;而<remap from="output" to="turtlesim2/turtle1"/>的意思就是将当前节点发布的话题映射到话题turtlesim2/turtle1

三、参数设置

<param>是ROS系统中运行的参数,存储在参数服务器中。

 <!-- 运行robot_state_publisher节点,发布tf  -->
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher">
        <param name="publish_frequency" type="double" value="50.0" />
    </node>

<rosparam>读取YAML文件的参数到ROS参数服务器。

<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true"> 

  <rosparam file="$(find simulte)/config/mbot/costmap_common_params.yaml" command="load" ns="global_costmap" />

<arg> launch文件内部的局部变量。

 <arg name="rviz" default="true" />

<group if="$(arg rviz)">
    <node launch-prefix="nice" pkg="rviz" type="rviz" name="rviz" args="-d $(find location)/rviz_cfg/gazebo.rviz" />
    <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find simulte)/mbot_kinect.xacro'" /> 
  </group>

四、<include>标签

    <include  file="$(find simulte)/launch/velodyne.launch"/>

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

 

示例:

<launch>
    <!-- comment注释  -->
    <arg name="arg_1" />
    <param name="param_1" value="$(arg arg_1)"/>

    <include file="$(find pkg_name)/path-to/included.launch" ns="namespace">   
    <arg name="arg_2"  value="value" />
    </include>

    <arg name="arg_3"  default="value" />
    <arg name="arg_4"  value="value" />
    <node pkg="pkg_name" type="exe_name" name="node_name1" args="arg1 arg2 arg3" respawn="true" output="screen">  
        <param name="name1" type="double" value="10.0"/>
        <param name="name2" value="$(arg arg_1)"/>
        <param name="name3" value="$(env ENVIRONMENT_VARIABLE_NAME)"/>
        <param name="name4" command="$(find pkg_name)/path-to/exe '$(find pkg_name)/path-to/arg.txt'"/>
        <remap from="laser_topic" to="/scan"/>
        <remap from="base_link" to="$(arg arg_1)"/>
        <rosparam command="load" file="$(find pkg_name)/example.yaml"/>
        <param name="frame_id" value="$(arg frame_id)"/>
    </node>   

    <node pkg="pkg_name" type="exe_name" name="node_name2" args="arg1 arg2 arg3" respawn="true" output="screen"> 
        <param name="name1" type="double" value="10.0"/>
        <param name="name2" value="$(arg arg_1)"/>
        <param name="name3" value="$(env ENVIRONMENT_VARIABLE_NAME)"/>
        <param name="name4" command="$(find pkg_name)/path-to/exe '$(find pkg_name)/path-to/arg.txt'"/>
        <remap from="laser_topic" to="/scan"/>
        <remap from="base_link" to="$(arg arg_1)"/>
        <rosparam command="load" file="$(find pkg_name)/example.yaml"/>
        <param name="frame_id" value="$(arg frame_id)"/>
    </node> 

    <node pkg="pkg2_name" type="exe_name" name="node_name3" args="arg1 arg2 arg3" respawn="true" output="screen">  
        <param name="name1" type="double" value="10.0"/>
        <param name="name2" value="$(arg arg_1)"/>
        <param name="name3" value="$(env ENVIRONMENT_VARIABLE_NAME)"/>
        <param name="name4" command="$(find pkg_name)/path-to/exe '$(find pkg_name)/path-to/arg.txt'"/>
    </node> 
上面的launch文件首先声明了一些参数,之后include另一个launch文件,included.launch文件中的节点会按深度优先执行配置和启动;
之后该launch文件启动3个节点,前两个节点来自同一个包的同一个可执行文件,节点命名不能相同,每个节点可以进行自己的参数配置;
之后该launch文件启动rviz节点,参数传递 rviz的配置文件,不同配置用于显示不同的信息
<group>可以作为一组标签的容器,从而使该组有独立的名称空间
所以标签可使用 if/unless属性,如果条件成立则包含标签
launch常用标签tag:
<arg> 参数声明,arg_1 通过命令行传递,arg_2 传递到included.launch, arg_3 默认值可以被重写覆盖,agr_4不能被重写
<include> 包含其他文件,包含文件中定义的参数、变量、节点都会按深度优先遍历依次执行生效
<param>:设置变量到参数服务器,参数服务器的概念看ros wiki
<rosparam>: dump/load、delete parameters from/to  Parameter Server,常用来加载程序的参数配置文件到参数服务器,然后程序从参数服务器取得参数值;
<remap>:名称映射 from:被映射名称 to:目标名称,名称映射的概念看ros wiki
<node> 启动节点,
    <node>常用属性tag:
    pkg:"pkg_name"  包名
    type:"exe_name"  节点类型,即编译生成的可执行文件
    name:"node_name" 节点名称,自定义但不能重复
    args:"arg1 ..."  传递节点的参数列表
    respawn:"true" 如果节点退出自动重启 default:false
    output:"screen" 标准输出/标准错误输出重定向屏幕,log重定向log文件,default:log
    required:"true" 如果节点退出,杀死全部launch进程
    launch-prefix:"prefix arguments" 前置的参数,可以使用其他工具如gdb,valgrind等
    <node>常用标签tag:
    param
    remap
    rosparam
lannch机制不保证节点的启动顺序,虽然launch文件是顺序分析,但节点初始化的时间长度不一,启动时间不一</node>

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值