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

2023-05-16

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:=
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Ubuntu16.04及ROS Kinetic环境下安装使用RealSense SR300

    Ubuntu16 04及ROS Kinetic环境下安装使用RealSense SR300 1 准备条件 需要安装Ubuntu16 04及ROS Kinetic 2 安装驱动 安装realsense的驱动流程可以根据Github上的官方推荐
  • 最快实现一个自己的扫地机

    作者 良知犹存 转载授权以及围观 欢迎关注微信公众号 羽林君 或者添加作者个人微信 become me 扫地机介绍 扫地机器人行业本质是技术驱动型行业 产品围绕导航系统的升级成为行业发展的主旋律 按功能划分 扫地机器人分为四大系统 即导航系
  • 安装完成后启动应用程序,并开启UAC

    我一直在使用 WIX Windows Installer XML 技术为我们的产品构建一个安装程序 如果安装后选中该复选框 则预期的行为是启动产品 这已经工作了一段时间了 但我们最近发现 Win 7 和 Vista 的 UAC 正在阻止该应
  • Xcode 错误:无法启动 [目录] -- 无效的主机字符串:'localhost'

    我正在尝试在命令行工具中运行以下代码 import
  • 如何将视频或图像序列转换为包文件?

    我是 ROS 新手 我需要转换预先存在的视频文件 或者large可以连接到视频流中的图像数量 bagROS 中的文件 我在网上找到了这段代码 http answers ros org question 11537 creating a ba
  • 无法加载 LZ4 支持的 Python 扩展。 LZ4 压缩将不可用

    我是 ROS 新手 我刚刚打开终端并输入roscore和另一个终端并键入rostopic node我收到这个错误 上面写着 无法加载 LZ4 支持的 Python 扩展 LZ4 压缩将不可用 我搜索并去了https pypi org pro
  • 从 Java 启动文件

    我想从 Java 程序启动一个文件 文档 并满足以下要求 方法必须适用于 Mac Windows 和 Linux 系统 我不允许使用 Runtime getRuntime exec cmd exe C filename 我要启动的文件必须是
  • 从电子邮件链接打开 iPhone 应用程序

    我正在开发一个程序 向用户发送电子邮件 并在电子邮件中嵌入打开 iPhone 应用程序的链接 问题是 当用户单击链接打开应用程序时 邮件已删除冒号 因此该链接不再有效 创建的链接基本上如下所示 br br br a href Open Ap
  • 检测应用程序是否从应用程序“外部”启动/恢复

    我目前正在为应用程序构思一项功能 我希望有一种通用方法 方法来检测应用程序本身是否已从 启动或恢复outside 该应用程序 Outside 在这种情况下 意味着 应用程序由启动器图标启动 恢复 通过按导航栏 按键上的 应用程序按钮 来启动
  • 我们进行一些检查后是否可以退出 iOS 应用程序

    如果应用程序已过时 我们不希望用户进入您的应用程序 当我们在应用程序启动之前进行一些日期检查时 是否可以退出 iOS 应用程序 或者可以在加载主视图后退出应用程序吗 在应用程序启动之前 否 当操作系统调用时 启动动画已经在进行中main 一
  • 错误状态:平台不允许不安全的 HTTP:http://0.0.0.0:9090

    我正在尝试从我的 flutter 应用程序连接到 ws local host 9090 使用 rosbridge 运行 的 Ros WebSocket 服务 但我在 Flutter 中收到以下错误 错误状态 平台不允许不安全的 HTTP h
  • 我的代码的 Boost 更新问题

    我最近将 boost 更新到 1 59 并安装在 usr local 中 我的系统默认安装在 usr 并且是1 46 我使用的是ubuntu 12 04 我的代码库使用 ROS Hydro 机器人操作系统 我有一个相当大的代码库 在更新之前
  • 在 Ubuntu 18.10 上安装 ROS Melodic

    I can t是唯一对 Cosmic 与 Wayland 和 Melodic 的组合感兴趣的人 我会坦白说 我似乎已经在 XPS 13 9370 上成功管理了此操作 或者至少安装脚本 最终 成功完成 然而 有一个非常棘手的解决方法 无论结果
  • catkin_make 编译报错 Unable to find either executable ‘empy‘ or Python module ‘em‘...

    文章目录 写在前面 一 问题描述 二 解决方法 参考链接 写在前面 自己的测试环境 Ubuntu20 04 一 问题描述 自己安装完 anaconda 后 再次执行 catkin make 遇到如下问题 CMake Error at opt
  • 如何打开两个Javafx窗口?

    我正在使用 javafx 想在按钮的 setOnAction 中编写代码来关闭 javafx1 类并运行 javafx2 类 但我看到错误 应用程序启动不得被调用多次 我怎样才能解决这个问题 This code is in the clas
  • Installshield安装成功后,不启动exe

    我正在使用单个 MSI 项目 成功安装后 我选择复选框来启动我的软件 然后单击完成 即使我检查并单击 完成 它也不会启动我的软件 到目前为止 我发现确保启动目录有效的唯一方法是 启动产品 复选框的属性选项卡 其属性设置为 LAUNCHPRO
  • 如何订阅“/scan”主题、修改消息并发布到新主题?

    我想通过订阅message ranges来改进turtlebot3的LDS 01传感器 通过应用一些算法修改messange ranges并将其发布到新主题 如下所示 但是当我运行编码时出现错误 错误是 遇到溢出的情况 错误是 运行时警告
  • 通过按 JButton 运行外部 jar 文件

    我正在尝试运行一个 jar 文件 该文件位于与按下 JButton 不同的目录中 我有按钮和 GUI 设置 但我不知道如何启动单独的 jar 文件 我在这段代码块中放置了什么 private void jButton1MouseReleas
  • Android开放电话应用

    我只想打开 Android 设备的电话应用程序 我不想向该应用程序提供电话号码 只是想打开它 我正在使用手机应用程序的包名称来打开它 因为我可以使用下面的代码通过该包名称打开任何我想要的应用程序 Intent launchIntent ge
  • 在午夜更新应用程序徽章,并提供以下选项:应用程序未启动或在后台,徽章数量可能会减少

    我正在阅读许多有关本地通知的内容以及它们如何帮助更新应用程序徽章编号 我想在午夜更新此徽章 并将其值设置为我在午夜之前无法知道的数字 因此 如果可能的话 我想在午夜启动一个功能来更新 加载一些数据 检查要显示的数字 并将其显示在徽章上 当然

随机推荐