ROS学习第十八节——launch文件(详细介绍)

1.概述

关于 launch 文件的使用已经不陌生了,之前就曾经介绍到:

一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,如何优化?

采用的优化策略便是使用roslaunch 命令集合 launch 文件启动管理节点,并且在后续教程中,也多次使用到了 launch 文件。

概念

launch 文件是一个 XML 格式的文件,可以启动本地和远程的多个节点,还可以在参数服务器中设置参数。

作用

简化节点的配置与启动,提高ROS程序的启动效率。

使用

以 turtlesim 为例演示

2.基本操作

ROS学习第四节——launch文件_小明在考研的博客-CSDN博客

3.基础标签

3.1launch文件标签之launch

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

1.属性

  • deprecated = "弃用声明"

    告知用户当前 launch 文件已经弃用

2.子级标签

所有其它标签都是launch的子级

3.2launch文件标签之node

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

1.属性

  • 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

2.子级标签

  • env 环境变量设置

  • remap 重映射节点名称

  • rosparam 参数设置

  • param 参数设置

3.3launch文件标签之include

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

1.属性

  • file="$(find 包名)/xxx/xxx.launch"

    要包含的文件路径

  • ns="xxx" (可选)

    在指定命名空间导入文件

2.子级标签

  • env 环境变量设置

  • arg 将参数传递给被包含的文件

3.4launch文件标签之remap

用于话题重命名

1.属性

  • from="xxx"

    原始话题名称

  • to="yyy"

    目标名称

2.子级标签

列举一个案例解释该标签的使用

运行小乌龟程序以后,使用teleop_twist_keyboard.py功能包并不能控制小乌龟,是因为连个节点的话题是不一样的

 此出就可以使用该标签解决这个问题

<launch >
    <node pkg="turtlesim" type="turtlesim_node" name="t1">
        <remap from = "/turtle1/cmd_vel" to="/cmd_vel" />
    </node>
    <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>

3.5 launch文件标签之param

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

1.属性

  • name="命名空间/参数名"

    参数名称,可以包含命名空间

  • value="xxx" (可选)

    定义参数值,如果此处省略,必须指定外部文件作为参数源

  • type="str | int | double | bool | yaml" (可选)

    指定参数类型,如果未指定,roslaunch 会尝试确定参数类型,规则如下:

    • 如果包含 '.' 的数字解析未浮点型,否则为整型

    • "true" 和 "false" 是 bool 值(不区分大小写)

    • 其他是字符串

2.子级标签

3.6launch文件标签之rosparam

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

1.属性

  • command="load | dump | delete" (可选,默认 load)

    加载、导出或删除参数

  • file="$(find xxxxx)/xxx/yyy...."

    加载或导出到的 yaml 文件

  • param="参数名称"

  • ns="命名空间" (可选)

2.子级标签

3.7launch文件标签之group

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

1.属性

  • ns="名称空间" (可选)

  • clear_params="true | false" (可选)

    启动前,是否删除组名称空间的所有参数(慎用....此功能危险)

2.子级标签

  • 除了launch 标签外的其他标签

3.8 launch文件标签之arg

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

1.属性

  • name="参数名称"

  • default="默认值" (可选)

  • value="数值" (可选)

    不可以与 default 并存

  • doc="描述"

    参数说明

2.子级标签

3.示例

  • launch文件传参语法实现,hello.lcaunch

    <launch>
        <arg name="xxx" />
        <param name="param" value="$(arg xxx)" />
    </launch>
    

命令行调用launch传参

roslaunch hello.launch xxx:=值
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS Launch文件ROS系统中一个非常重要的工具,它用于启动ROS系统中的多个点(Node),并且提供了一种灵活的方式来配置点之间的通信和参数设置。本文将介绍ROS Launch文件的基本概念、语法和用法,并且通过一个实际的例子来演示如何使用ROS Launch文件来启动一个机器人系统。 一、ROS Launch文件的基本概念 ROS Launch文件是一个XML格式的文件,它用于启动ROS系统中的多个点(Node)。ROS Launch文件可以包含多个点,每个点都有一个唯一的名称(Name)和一个要启动的点(Type)。此外,ROS Launch文件还可以包含参数(Parameter)和环境变量(Environment Variable),用于配置点之间的通信和参数设置。 二、ROS Launch文件的语法 ROS Launch文件的语法非常简单,它由标签(Tag)和属性(Attribute)组成。以下是ROS Launch文件的基本语法: ``` <launch> <!-- ROS点定义 --> <node name="node_name" pkg="package_name" type="node_type" args="args" /> <!-- 参数设置 --> <param name="param_name" value="param_value" /> <!-- 环境变量设置 --> <env name="env_name" value="env_value" /> </launch> ``` 其中,`<launch>`标签是ROS Launch文件的根标签,表示整个文件。`<node>`标签用于定义ROS点,其中`name`属性表示点名称,`pkg`属性表示点所在的ROS软件包,`type`属性表示点类型(即执行文件名),`args`属性表示点启动时的参数。`<param>`标签用于设置点的参数,其中`name`属性表示参数名称,`value`属性表示参数值。`<env>`标签用于设置环境变量,其中`name`属性表示环境变量名称,`value`属性表示环境变量值。 三、ROS Launch文件的用法 ROS Launch文件可以用于启动一个或多个ROS点,并且可以配置点之间的通信和参数设置。以下是一个使用ROS Launch文件启动一个机器人系统的例子。 假设我们有一个机器人系统,包括一个激光雷达点(Laser Node)、一个摄像头点(Camera Node)、一个运动控制点(Motion Control Node)和一个SLAM点(SLAM Node)。现在,我们要使用ROS Launch文件来启动这个机器人系统,并且配置点之间的通信和参数设置。 首先,我们需要创建一个名为`robot.launch`的ROS Launch文件,并且将它保存到`/path/to/robot/`目录下。以下是`robot.launch`文件的内容: ``` <launch> <!-- 启动激光雷达点 --> <node name="laser_node" pkg="laser_pkg" type="laser_node" /> <!-- 启动摄像头点 --> <node name="camera_node" pkg="camera_pkg" type="camera_node" /> <!-- 启动运动控制点 --> <node name="motion_control_node" pkg="motion_control_pkg" type="motion_control_node" /> <!-- 启动SLAM点 --> <node name="slam_node" pkg="slam_pkg" type="slam_node" /> <!-- 配置点之间的通信 --> <remap from="laser_scan" to="slam_scan" /> <remap from="camera_image" to="slam_image" /> <!-- 配置点的参数 --> <param name="laser_range_min" value="0.1" /> <param name="laser_range_max" value="10.0" /> <param name="camera_resolution" value="640x480" /> <param name="motion_control_speed" value="0.5" /> </launch> ``` 在上述ROS Launch文件中,我们使用`<node>`标签启动了四个ROS点,分别是激光雷达点、摄像头点、运动控制点和SLAM点。其中,`name`属性分别为`laser_node`、`camera_node`、`motion_control_node`和`slam_node`,`pkg`属性分别为`laser_pkg`、`camera_pkg`、`motion_control_pkg`和`slam_pkg`,`type`属性分别为`laser_node`、`camera_node`、`motion_control_node`和`slam_node`。 此外,我们还使用`<remap>`标签配置了点之间的通信,将激光雷达点的输出`laser_scan`重定向到SLAM点的输入`slam_scan`,将摄像头点的输出`camera_image`重定向到SLAM点的输入`slam_image`。我们还使用`<param>`标签配置了点的参数,分别是激光雷达点的`laser_range_min`和`laser_range_max`,摄像头点的`camera_resolution`和运动控制点的`motion_control_speed`。 现在,我们可以使用以下命令来启动机器人系统: ``` roslaunch /path/to/robot/robot.launch ``` 以上命令将启动ROS Launch文件中定义的所有点,并且配置点之间的通信和参数设置。如果出现任何问题,可以使用ROS Launch文件中的调试信息来定位问题,并且进行调试。 四、总结 ROS Launch文件ROS系统中一个非常重要的工具,它用于启动ROS系统中的多个点,并且提供了一种灵活的方式来配置点之间的通信和参数设置。本文介绍ROS Launch文件的基本概念、语法和用法,并且通过一个实际的例子来演示如何使用ROS Launch文件来启动一个机器人系统。如果您想深入了解ROS Launch文件的更多内容,请参考ROS官方文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值