首页 > 其他分享 >ROS学习笔记(四)- ROS的launch文件

ROS学习笔记(四)- ROS的launch文件

时间:2023-04-21 17:33:44浏览次数:37  
标签:文件 launch 笔记 参数 ROS my 节点

书接上回,上次已经介绍到launch文件的一些内容了,这次详细记录学习一下。

在ROS中,launch文件是一种XML文件,用于描述ROS系统中的节点、话题、参数等信息,可以用来自动化启动多个节点和启动参数服务器。在实际应用中,launch文件可以让用户非常方便地组织ROS系统的启动和配置。下面详细介绍ROS的launch文件及其所有的使用方法和场景。

一,launch文件的基本结构

一个最简单的launch文件如下所示:

<launch>
    <node name="my_node" pkg="my_package" type="my_node.py" />
</launch>

这个launch文件中包含了一个节点的描述信息。它的基本结构包含两个部分:

  • <launch></launch>:用来标记launch文件的开始和结束。
  • <node>标签:用来描述一个ROS节点。这个标签包含了节点的名称、所在包、执行文件等信息。

在一个launch文件中可以包含多个节点的描述,这些节点可以相互连接,形成一个完整的ROS系统。

二,launch文件的使用方法

在ROS中,可以使用roslaunch命令来启动一个launch文件。命令格式如下:

roslaunch package_name launch_file_name.launch [arg_name:=arg_value]

其中,package_name是节点所在的ROS软件包的名称,launch_file_name是要启动的launch文件的名称。可以通过[arg_name:=arg_value]的方式向launch文件中传递参数。

在launch文件中,可以使用<arg>标签来定义参数,如下所示:

<launch>
    <arg name="my_arg" default="hello" />
    <node name="my_node" pkg="my_package" type="my_node.py" my_arg="$(arg my_arg)" />
</launch>

这个launch文件中定义了一个名为my_arg的参数,它的默认值是hello。然后在node标签中使用$(arg my_arg)的方式来引用这个参数。当使用roslaunch命令启动这个launch文件时,可以通过my_arg:=world的方式修改这个参数的值。

三,launch文件的高级用法

除了基本的节点描述和参数传递,launch文件还支持一些高级用法。下面介绍一些常用的高级用法。

3.1. 组合多个launch文件

在ROS中,可以使用<include>标签来组合多个launch文件。如下所示:

<launch>
    <include file="$(find my_package)/launch/my_subsystem.launch" />
    <node name="my_node" pkg="my_package" type="my_node.py" />
</launch>

这个launch文件包含了另外一个名为my_subsystem.launch的launch文件,同时还启动了一个节点。在实际应用中,这种组合多个launch文件的方式可以让用户非常方便地组织ROS系统。

3.2. 使用节点组

在ROS launch文件中,可以通过group标签来定义节点组。节点组是指一组节点,这些节点将同时启动或停止,可以一起进行管理。使用节点组可以方便地启动和停止多个节点,从而减少手动操作和出错的可能性。如下所示:

<launch>
  <group ns="robot1">
    <node pkg="robot1" name="node1" type="node1" />
    <node pkg="robot1" name="node2" type="node2" />
  </group>

  <group ns="robot2">
    <node pkg="robot2" name="node1" type="node1" />
    <node pkg="robot2" name="node2" type="node2" />
  </group>
</launch>

在这个例子中,定义了两个节点组,robot1robot2。每个节点组都包含两个节点。在这个例子中,ns属性用于设置节点组的命名空间,以便在运行时可以区分不同的节点组。通过在命令行中指定命名空间,可以只启动或停止一个节点组。

在启动这个launch文件时,所有的节点将同时启动。可以使用rosnode list命令来列出当前运行的所有节点。可以使用rosnode info命令来查看特定节点的详细信息。

除了使用命名空间来区分节点组之外,还可以使用其他参数来进一步控制节点组的行为。例如,可以使用respawn="true"参数来指定节点组中的节点是否应该在崩溃后自动重启。可以使用required="true"参数来指定节点组中的节点是否是必需的,如果一个节点失败,整个节点组都将停止。

3.3. 参数替换。

可以在launch文件中定义参数,然后在节点的参数中使用这些参数进行替换,实现动态的配置管理。

假设我们有一个ROS节点my_node,该节点需要在启动时设置一个参数my_param,我们可以在launch文件中定义该参数并传递给该节点。

创建一个launch文件my_launch_file.launch,并定义参数my_param

<launch>
    <arg name="my_param" default="default_value" doc="My custom parameter" />
    <node name="my_node" pkg="my_package" type="my_node" output="screen">
        <param name="my_param" value="$(arg my_param)" />
    </node>
</launch>

在上面的launch文件中,我们定义了一个参数my_param,并设置了默认值为default_value。然后我们启动了一个名为my_node的节点,该节点从参数服务器中读取参数my_param的值,并将其设置为节点的参数。

在启动时可以通过以下命令启动该launch文件,并设置参数my_param的值为my_custom_value

roslaunch my_package my_launch_file.launch my_param:=my_custom_value

在上面的命令中,我们使用了:=操作符来指定参数my_param的值为my_custom_value

当launch文件启动时,参数my_param将被替换为my_custom_value,节点my_node将使用新的参数值启动。

使用ROS launch文件实现参数替换可以方便地配置ROS系统,避免了手动修改参数文件的麻烦。



标签:文件,launch,笔记,参数,ROS,my,节点
From: https://www.cnblogs.com/lihan829/p/17341176.html

相关文章

  • 主席树 学习笔记
    考试的时候用到了,顺便学习一下。upd:2023.04.21终于把坑填了。0x00前言主席树(又称可持久化线段树,函数式线段树)是一种常用的数据结构。它以保存每次修改时的历史版本为主要思想,拥有大量的应用场景(可持久化trie/并查集/数组\(\ldots\))(当然,常数也是很大的)。0x01引入例题:HDU2......
  • 读书笔记 - 《Monolith to Microservices》
    如果你的产品目前是B/S或者C/S架构,想要考虑重构成微服务,这本书绝对是一个很好的参考,作者通过自己的实践经历,详述了以下几个方面:不要因为别人都做微服务,你就想要把自己的系统转成微服务,首先需要分析自己系统碰到的问题,找到最适合的解决办法,微服务不是万能的,不能解决所有问题考虑......
  • 工数上笔记
    工数分析上第五章常微分方程一阶微分方程可分离变量的微分方程:\(\cfrac{dy}{dx}=f(x)g(y)\)\[\int\cfrac{dy}{g(y)}=\intf(x)dx\]齐次方程:\(\cfrac{dy}{dx}=f(\cfrac{y}{x})\)\[设u=\frac{y}{x}\]\[\cfrac{dy}{dx}=u+x\cfrac{du}{dx}~~=>\small{可分离变量}\]\(......
  • Windows 离线安装Microsoft Store中的应用
    准备工作这个地址主要是用于下载Microsoft应用的离线安装包https://store.rg-adguard.net/微软应用商店地址https://apps.microsoft.com/store/apps以TranslucentTB为例子https://apps.microsoft.com/store/detail/translucent-tb%E6%B1%89%E5%8C%96/9P16GBJP9L6Z?hl=zh-......
  • Aras学习笔记 (53) - 根据ID快速找到文件Vault路径
    Step1:首先在对象类File中根据名称找到ID;Step2:右键文件-->Share-->CopyID;Step3:在Console中输入下命令:top.aras.IomInnovator.getFileUrl("[文件ID]",top.aras.Enums.UrlType.SecurityToken)结果如下: ......
  • IP地址笔记
    一、简单局域网构成局域网:一般称为内网。简单局域网构成:交换机、网线、PC(其他IT终端)。交换机:用来组建内网的局域网的设备。交换机用来组建局域网,不能连接内外网,有很多接口。路由器用来连接内外网。二、IP地址IP地址就是一个唯一标识,是一段网络编码(二进制),常用的IPv4由32位组......
  • SQL Server 语句笔记
    创建表Createtable表名(列1 char(6))notnull primarykey,列2varchar(50),列2,smallint)修改表Altertable 表名 add 列1char(10)notnull创建索引Createuniqueclustered index编号_INDon产品编号删除索引DropIndex 产品.产......
  • DELL笔记本安装supportAssist方法for win11
    先安装,https://www.advanceduninstaller.com/卸载本机自带的supportAssist然后重新下载supportAssist地址:https://www.dell.com/en-us/shop/supportassistforpcs/cp/supportassistforpcs安装即可 ......
  • VUE学习笔记
    VUE学习笔记1.函数体格式简写格式:“方法名(){}”===>全写格式:“方法名:function(){}”2.定义对象格式对象名:{}3.全局事件总线相关的函数注册全局事件总线:在main.js的VUE实例中创建事件总线beforeCreate(){ Vue.prototype.$bus=this },1.$emit1、this.$emit('自......
  • CF笔记
    https://codeforces.com/problemset/problem/1819/B分析:总面积总是不变的考虑第一刀横着劈开这样一块宽度是最大的同理竖着劈开高度是最大的这样两种情况通过算面积能够求出剩下的长宽度考虑贪心对于剩下的块如果有长宽相匹配的就直接匹配顺序不重要特别的如果两次......