【ROS学习】节点运行管理launch文件的基本操作

launch文件的概念和作用

launch 文件是一个 XML 格式的文件,可以启动本地和远程的多个节点,还可以在参数服务器中设置参数。
launch文件的作用是:简化节点的配置与启动,提高ROS程序的启动效率。

使用场景

launch文件在ros中使用还是比较广泛的,比如:一个程序中可能需要启动多个节点。ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,这个时候就可以使用launch文件进行优化。

launch的创建

工程中创建一个 launch 文件夹,里面存储项目的launch文件
在这里插入图片描述
由于launch文件不牵扯到编译,所以更改完launch文件,其实不用编译,直接运行命令:

source ./devel/setup.bash

更新环境,然后运行 roslaunch 项目名 launch文件:

roslaunch launch_base test01.launch

launch文件中的层级结构和命令

1 根标签launch

launch标签是所有 launch 文件的根标签,充当其他标签的容器。

属性:

deprecated = “弃用声明” 告知用户当前 launch 文件已经弃用。运行时,会有红色的警告信息,说此文件已经过时或者弃用

2 node标签

node标签用于指定 ROS 节点,是最常见的标签,需要注意的是: roslaunch 命令不能保证按照 node 的声明顺序来启动节点(节点的启动是多进程的)

属性:

pkg=“包名” 节点所属的包
type=“nodeType” 节点类型(与之相同名称的可执行文件)
name=“nodeName” 节点名称(在 ROS 网络拓扑中节点的名称)
args=“xxx xxx xxx” (可选) 将参数传递给节点
machine=“机器名” 在指定机器上启动节点
respawn=“true | false” (可选) 如果节点退出,是否自动重启
respawn_delay=" N" (可选) 如果 respawn 为 true, 那么延迟 N 秒后启动节点
required=“true | false” (可选) 该节点是否必须,如果为 true,那么如果该节点退出,将杀死整个 roslaunch
ns=“xxx” (可选) 在指定命名空间 xxx 中启动节点
clear_params=“true | false” (可选) 在启动前,删除节点的私有空间的所有参数
output=“log | screen” (可选) 日志发送目标,可以设置为 log 日志文件,或 screen 屏幕,默认是 log

子级标签

env 环境变量设置
remap 重映射节点名称
rosparam 参数设置
param 参数设置

3 include标签

include标签用于将另一个 xml 格式的 launch 文件导入到当前文件

属性

file=“$(find 包名)/xxx/xxx.launch” 要包含的文件路径
ns=“xxx” (可选) 在指定命名空间导入文件

<launch>
    <include file="$(find launch所在项目名)/launch/***.launch"/>
</launch>

子级标签

env 环境变量设置
arg 将参数传递给被包含的文件

4 remap 标签

该标签用于话题的重命名。有时候某些话题需要与其他话题进行同步,则需要该命令进行重新映射。

属性

from=“xxx” 原始话题名称
to=“yyy” 目标名称

子级标签 不含
示例:
本例子中将小乌龟案例中的 /turtle1/cmd_vel 话题映射到 /cmd_vel ,所以该话题可以使用 ROS中内置的 teleop_twist_keyboard 进行小乌龟速度的控制

<node pkg="turtlesim" type="turtlesim_node" name="myTurtle" output="screen">
        <remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
</node>

在这里插入图片描述
在这里插入图片描述
将remap注释掉后,再开启teleop_twist_keyboard就发现一直在等待订阅 /cmd_vel 的内容
在这里插入图片描述

5 param标签

param标签主要用于在参数服务器上设置参数,参数源可以在标签中通过 value 指定,也可以通过外部文件加载,在node标签中时,相当于私有命名空间

属性

name=“命名空间/参数名” 参数名称,可以包含命名空间
value=“xxx” (可选) 定义参数值,如果此处省略,必须指定外部文件作为参数源
type=“str | int | double | bool | yaml” (可选) 指定参数类型,如果未指定,roslaunch 会尝试确定参数类型,规则如下:如果包含 ‘.’ 的数字解析未浮点型,否则为整型"true" 和 “false” 是 bool 值(不区分大小写),其他是字符串

子级标签 不含
示例

<launch>
<param name="param_A" type="int" value="100"/>
<node pkg="turtlesim" type="turtlesim_node" name="myTurtle" output="screen">
 <param name="param_A" type="int" value="100"/>
 </node>
 </launch>

在这里插入图片描述

6 rosparam标签

rosparam 标签可以从 YAML 文件导入参数,或将参数导出到 YAML 文件,也可以用来删除参数,rosparam标签在node标签中时被视为私有。

属性

command=“load | dump | delete” (可选,默认 load) 加载、导出或删除参数
file=“$(find xxxxx)/xxx/yyy…” 加载或导出到的 yaml 文件
param=“参数名称”
ns=“命名空间” (可选)

子级标签 不含
示例
可以发现 rosparam 在node节点中会增加该节点对应的命名空间

<launch>
 <!-- 测试rosparam load 加载yaml文件 -->
    <rosparam command="load" file="$(find launch_base)/launch/param.yaml"/>
    <node pkg="turtlesim" type="turtlesim_node" name="myTurtle" output="screen">
         <rosparam command="load" file="$(find launch_base)/launch/param.yaml"/>
    </node>
</launch>

在这里插入图片描述
测试 dump 和 delete

<launch>
<rosparam command="dump" file="$(find launch_base)/launch/param_out.yaml"/>
<rosparam command="delete" param="bg_R"/>
</launch>
7 group标签

group标签可以对节点分组,具有 ns 属性,可以让节点归属某个命名空间

属性

ns=“名称空间” (可选)
clear_params=“true | false” (可选)
启动前,是否删除组名称空间的所有参数(慎用…此功能危险)

子级标签

除了launch 标签外的其他标签

示例
相当于启动了两个小乌龟节点

<launch>
    <group ns="first">
        <node pkg="turtlesim" type="turtlesim_node" name="myTurtle" output="screen" />
        <node pkg="turtlesim" type="turtle_teleop_key" name="myTurtleCon" output="screen" />
     </group>
      <group ns="second">
        <node pkg="turtlesim" type="turtlesim_node" name="myTurtle" output="screen" />
        <node pkg="turtlesim" type="turtle_teleop_key" name="myTurtleCon" output="screen" />
     </group>
</launch>
8 arg标签

arg标签是用于动态传参,类似于函数的参数,可以增强launch文件的灵活性

属性

name=“参数名称”
default=“默认值” (可选)
value=“数值” (可选) 不可以与 default 并存
doc=“描述” 参数说明

子级标签 不含
示例

<launch>
<!-- 类似声明固定的参数 -->
    <arg  name="car_len"   default="15"/>
    <param name="A" value="$(arg car_len)"/>
    <param name="B" value="$(arg car_len)"/>
    <param name="C" value="$(arg car_len)"/>
</launch>

命令

roslaunch hello.launch car_len:=

猜你喜欢

转载自blog.csdn.net/qq_29750461/article/details/128828579
今日推荐