【古月居《ros入门21讲》学习笔记】17_launch启动文件的使用方法

目录

说明:

1. launch文件作用

2. launch文件语法

根元素

参数设置

重映射、嵌套

3. 示例

创建功能包

1_simple.launch

编译

运行

2_turtlesim_parameter_config.launch

启动运行

启动运行显示说明

3_start_tf_demo_c++.launch

启动运行

4_start_tf_demo_py.launch

启动运行

5_turtlesim_remap.launch

启动运行


说明:

1. 本系列学习笔记基于B站:古月居《ROS入门21讲》课程,且使用的Ubuntu与ROS系统版本与课程完全一致;

虚拟机版本Linux系统版本ROS系统版本
VMware WorkStation Pro 16Ubuntu18.04Melodi

2. 课程中的所有示例代码均已跑通,且对Pyhon版本的代码也都做了运行验证,并附带验证过程(错误均已修正);

3. 本节是整个笔记的第17节,对应视频课程的第19节,请自行对应学习;

4. 整个系列笔记基本已经完结,但部分章节仍需润色修改 ,后面会陆续发布,请大家持续关注,      创作不易,感谢支持!
 


1. launch文件作用

  • XML语言编写,可实现多个节点的配置与启动;

  • 不用再打开多个终端,分别使用rosrun命令来启动多个不同节点;

  • 可自动启动ROS Master

image-20230607122715949

2. launch文件语法

根元素

image-20230607132437558

注意:name节点运行时的名称,会取代程序中初始化节点 init 时赋予的名称。

其它可选属性:

  • output: 控制某个节点node是否把日志信息打印到终端;

  • respawn: 启动后的某个节点如果崩溃,控制其是否重启;

  • required: 控制某个节点是否为必须启动的节点,如果必须启动的这个节点崩溃,必须终止其它节点;

  • ns: 命名空间,可以给每个节点做个命名空间,在各自自定义的命名空间中运行节点,避免它们之间的命名冲突;

  • args: 输入参数用的

参数设置

param: 把一个参数加载存储到ROS参数服务器中; rosparam:把一个参数文件中的所有参数全部加载保存到ROS参数服务器中;

arg: 仅在launch文件中使用的参数,也可作为node的输入参数;

注意:paramter 和 argument 都是参数的意思,

前者表示存在ROS参数服务器中的参数,

后者表示只存在launch文件中内部使用的参数

image-20230607135056538

重映射、嵌套

  • remap: 对ROS计算图资源进行重命名,重命名后原来的名字就不存在了;

  • include:嵌套其它launch文件,嵌套的另一个launch文件,便会启动该文件内的所有内容

image-20230607141853488

更多标签可参见:

http://wiki.ros.org/roslaunch/XML

3. 示例

创建功能包

下面演示一些launch文件的实例,

首先创建一个新的功能包learning_launch,包本身不需要添加任何依赖。

cd ~/catkin_ws/src
catkin_create_pkg learning_launch

image-20230607164552344

然后进入到learning_launch文件夹下,新建一个launch文件夹,来存放launch文件

image-20230607164952629

1_simple.launch

cd ~/catkin_ws/src/learning_launch/launch
touch simple.launch

<launch><node pkg="learning_topic" type="person_subscriber" name="talker" output="screen" /><node pkg="learning_topic" type="person_publisher" name="listener" output="screen" /> 
</launch>

打开launch文件复制内容到里面后,文本编辑器的菜单下选择“查看”→“高亮模式”→XML,可方便查看代码

image-20230607170211954

simple.launch文件对之前的learning_topic功能包下的发布和订阅节点的程序进行了整合,

设定了在运行时两节点名分别为talker与listener,并将日志信息打印到终端screen。

编译
cd ~/catkin_ws
catkin_make
source devel/setup.bash(如已配置 **.bashrc**文件,则此步不需要,配置方法在publisher的章节里)

image-20230607171138018

运行

格式:roslaunch 包名 文件名,roslaunch:专门用来启动launch文件的。

roslaunch learning_launch simple.launch

启动后,可以看到发布者和订阅者的日志交替打印到了终端上。

image-20230607171903773

2_turtlesim_parameter_config.launch

cd ~/catkin_ws/src/learning_launch/launch
touch turtlesim_parameter_config.launch

<launch>
​<param name="/turtle_number"   value="2"/>
​<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"><param name="turtle_name1"   value="Tom"/><param name="turtle_name2"   value="Jerry"/>
​<rosparam file="$(find learning_launch)/config/param.yaml" command="load"/></node>
​<node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>
​
</launch>

image-20230607173039411

创建config文件夹,param.yaml文件

cd ~/catkin_ws/src/learning_launch
mkdir config
cd config
touch param.yaml

A: 123
B: "hello"
​
group:C: 456D: "hello"

image-20230608090758358

启动运行

在示例1中我们已经对learning_launch功能包编译过了,因此这里不用再编译,直接运行启动即可

roslaunch learning_launch turtlesim_parameter_config.launch

image-20230608095327842

启动运行显示说明

通过打开的第二个终端 rosparam list命令 ,可以看到turtlesim_parameter_config.launch文件中设置的参数在ros参数服务器中的体现,然后我们对比右侧的launch文件会发现,通过param加载到的ros参数服务器中的参数,写在node节点外面和里面的区别。

参数 /turtle_name1 与 /turtle_name2是写在node节点 turtlesim_node 下的,因此该参数有 turtlesim_node的命名空间,显示出来的参数全名为: /turtlesim_node/turtle_name1 与 /turtlesim_node/turtle_name2; 同理load的param.yaml文件中的参数也带有turtlesim_node的命名空间,并且这个yaml文件中的C/D参数自身还带有group命名空间,因此C/D参数显示出来的全名为:/turtlesim_node/group/C 与 /turtlesim_node/group/D。 而参数 /turtle_number 是写在turtlesim_node节点外面的,因此显示出来的参数全名就叫: /turtle_number 。

3_start_tf_demo_c++.launch

cd ~/catkin_ws/src/learning_launch/launch
touch start_tf_demo_c++.launch

 <launch>
​<!-- Turtlesim Node--><node pkg="turtlesim" type="turtlesim_node" name="sim"/><node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
​<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" /><node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />
​<node pkg="learning_tf" type="turtle_tf_listener" name="listener" />
​</launch>

image-20230608102314762

此示例把tf坐标广播与监听的所有命令使用start_tf_demo_c++.launch文件依次启动了,也无需在命令行中传参数了。

启动运行

同样,前面已经编译过一次了,这里不用再编译,直接运行启动即可

roslaunch learning_launch start_tf_demo_c++.launch

image-20230608110218147

4_start_tf_demo_py.launch

cd ~/catkin_ws/src/learning_launch/launch
touch start_tf_demo_py.launch

<launch>
​<!-- Turtlesim Node--><node pkg="turtlesim" type="turtlesim_node" name="sim"/><node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
​<node name="turtle1_tf_broadcaster" pkg="learning_tf" type="turtle_tf_broadcaster.py"><param name="turtle" type="string" value="turtle1" /></node><node name="turtle2_tf_broadcaster" pkg="learning_tf" type="turtle_tf_broadcaster.py"><param name="turtle" type="string" value="turtle2" /> </node>
​<node pkg="learning_tf" type="turtle_tf_listener.py" name="listener" />
​
</launch>

image-20230608110916117

启动运行

无需编译,直接启动运行即可

roslaunch learning_launch start_tf_demo_py.launch

image-20230608111418843

5_turtlesim_remap.launch

cd ~/catkin_ws/src/learning_launch/launch
touch turtlesim_remap.launch

<launch>
​<include file="$(find learning_launch)/launch/simple.launch" />
​<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"><remap from="/turtle1/cmd_vel" to="/cmd_vel"/></node>
​
</launch>

image-20230608112433337

使用include,调用另一个launch文件simple.launch,启动该文件内的所有内容, 并使用remap,将topic名/turtle1/cmd_vel改为/cmd_vel。`

启动运行

同样,前面已经编译过一次了,这里不用再编译,直接运行启动即可

roslaunch learning_launch turtlesim_remap.launch

image-20230608113115573

在另一个终端里输入 rostopic list 可以看到话题名已经改成了/cmd_vel 然后向新话题名 /cmd_vel 发布一个新的速度指令,海龟就动起来了,图示如上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/181218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在右键菜单中添加自定义事件

一、覆盖默认右键菜单的方式 出于安全和用户体验的考虑&#xff0c;不允许直接修改或向默认的右键菜单&#xff08;浏览器的上下文菜单&#xff09;添加自定义项。因为允许网页脚本更改或扩展默认的上下文菜单可能会造成用户困惑&#xff0c;并有可能被恶意网站利用来进行钓鱼或…

嵌入式开发为什么需要输出调试信息?

嵌入式开发为什么需要输出调试信息&#xff1f; 因为输出调试信息是嵌入式开发中一项非常重要的实践&#xff0c;它有助于保证软件的可靠性、稳定性和性能&#xff0c;也是故障排查的关键工具之一。 嵌入式开发输出调试信息主要有以下作用&#xff1a; 1.错误排查与问题定位 输…

卓越进行时 | 西安交通大学校友莅临赛宁网安参观考察

近日&#xff0c;为了深入贯彻网络安全强国战略建设&#xff0c;积极发挥网络安全企业的先进作用&#xff0c;推动校企合作与协作共赢。西安交通大学领导携校友会来到赛宁网安网络安全卓越中心进行参观考察&#xff0c;为进一步的校企合作和产业孵化奠定基础。 活动期间&#…

docker安装Sentinel zipkin

文章目录 引言I Sentinel安装1.1 运行容器1.2 DOCKERFILE 参考1.3 pom 依赖1.4 .yml配置(整合springboot)II 资源保护2.1 Feign整合Sentinel2.2 CommonExceptionAdvice:限流异常处理类III zipkin引言 消息服务和请求第三方服务可不配置Sentinel。 I Sentinel安装 Sentinel …

list简单使用

目录 介绍 头文件 简单使用 Member functions Constructor operator ​编辑 Iterators Capacity empty size Element access: front/back Modifiers push_front pop_front push_back pop_back insert erase swap resize clear Operations remove uniq…

关于网站的favicon.ico图标的设置需要注意的几点

01-必须在网页的head标签中放上对icon图标的说明语句&#xff1a; 比如下面这样的语句&#xff1a; <link rel"shortcut icon" href"/favicon.ico">否则&#xff0c;浏览器虽然能读到图标&#xff0c;但是不会把图标显示在标签上。 02-为了和本地开…

从 0 搭建 Vite 3 + Vue 3 Js版 前端工程化项目

之前分享过一篇vue3+ts+vite构建工程化项目的文章,针对小的开发团队追求开发速度,不想使用ts想继续使用js,所以就记录一下从0搭建一个vite+vue3+js的前端项目,做记录分享。 技术栈 Vite 3 - 构建工具 Vue 3 Vue Router - 官方路由管理器 Pinia - Vue Store你也可以选择vue…

九、LuaTable(表)

文章目录 一、定义二、Table(表)的构造三、Table 操作&#xff08;一&#xff09;Table连接&#xff08;二&#xff09;插入和移除&#xff08;三&#xff09;Table 排序&#xff08;四&#xff09;Table 最大值 一、定义 table 是 Lua 的一种数据结构用来帮助我们创建不同的数…

基于SSM的教室信息管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的教室信息管理系统,java项目。 …

Unity中Shader的BRDF解析(三)

文章目录 前言一、BRDF中的镜面反射项二、分别解析每一个参数1、D、G函数&#xff1a;speclarTerm2、其他中间步骤3、光照颜色4、F函数&#xff08;菲涅尔函数&#xff09; &#xff1a;FresnelTermIBL在下篇文章中继续解析 三、最终代码.cginc文件:Shader文件&#xff1a; 前言…

贪心 376. 摆动序列

376. 摆动序列 题目&#xff1a; 连续数字&#xff08;前减后&#xff09;的差严格在正负之间交替&#xff0c;差值不能有0为摆动序列。 [1,7,4,9,2,5] 是一个摆动序列&#xff0c;因为差值 (6,-3,5,-7,3) 是正负交替出现的 给定一个整数序列&#xff0c;返回作为摆动序列…

Docker监控Weave Scope的安装和使用

1.本地安装Weave Scope 1&#xff09;创建文件夹。 mkdir /usr/local/bin/scope 2&#xff09;从本地上传文件。 rz scope.bin以资源形式已上传到文章开篇。 3&#xff09;修改scope.bin文件为可执行文件。 chmod 755 /usr/local/bin/scope/scope.bin 4&#xff09;执行sco…

AntDB数据库:从海量数据处理,到5G计费商用核心

AntDB数据库自2008年研发面世以来&#xff0c;首先被应用于运营商的核心系统&#xff0c;满足运营商海量数据处理的需求。随着数字科技的不断发展&#xff0c;AntDB也在不断地更新迭代&#xff0c;逐渐地为更多行业与客户提供更全面的服务。5G时代来临&#xff0c;AntDB抓住发展…

《微信小程序开发从入门到实战》学习三十六

4.2 云开发JSON数据库 4.2.6 云开发JSON数据库 在集合对象上调用add方法可以在集和中可以插入一条记录&#xff0c;代码如下&#xff1a; db.collection(testOne).add({ // 在JSON数据库的testOne集合中增加一个记录 data:{ name: "write paper" }, // 插入数据成功…

华住三季报:韧性增长超预期,夯实可持续发展底座

美股研究社获悉&#xff0c;2023年11月27日&#xff0c;华住集团2023年第三季度业绩发布会在线上举行。受华住三季度财报向好表现&#xff0c;多家证券公司给予买入评级。中信证券认为&#xff0c;本季度华住集团国内外RevPAR修复优于前期指引上限、净开店数优于预期。且华住集…

如何手工获取并更新ESXi中macOS的VMware Tools版本

正文共&#xff1a;1128 字 22 图&#xff0c;预估阅读时间&#xff1a;1 分钟 前面我们介绍了如何在VMware ESXi创建macOS虚拟机&#xff08;VMware ESXI部署macOS Monterey&#xff09;&#xff0c;也大概介绍了如何安装VMware Tools&#xff0c;因为VMware Tools可以提供对虚…

一名技术Leader应该是创作者

今天看了一本书叫做《黑客与画家》。它里面提到一个很重要的概念就是黑客&#xff08;优秀的程序员&#xff09;是一名建筑师&#xff0c;而不是一名工程师。 传统的主管和互联网的Leader 这两者有什么区别呢&#xff1f;关键点在于建筑师是思考做什么&#xff0c;而工程师是…

超实用电脑技巧分享,快速提高工作效率!

“我是个刚开始学习使用电脑的新手&#xff0c;想问问大家有什么比较好用的电脑使用技巧可以推荐一下吗&#xff1f;非常感谢&#xff01;” 在使用电脑时&#xff0c;如果我们适当掌握一些技巧&#xff0c;可以有效提高效率。那么&#xff0c;今天小编就给大家分享一些常见的电…

前五年—中国十大科技进展新闻(2012年—2017年)

前五年—中国十大科技进展新闻&#xff08;2012-2017&#xff09; 2017年中国十大科技进展新闻1. 我国科学家利用化学物质合成完整活性染色体2. 国产水下滑翔机下潜6329米刷新世界纪录3. 世界首台超越早期经典计算机的光量子计算机诞生4. 国产大型客机C919首飞5. 我国首次海域天…

新手怎样用云服务器搭建跨境电商网站?

随着互联网的发展&#xff0c;需要用到服务器的行业越来越多&#xff0c;像是跨境电商行业更是必不可少&#xff0c;这里主要讲讲如何使用云服务器创建一个跨境电子商务网站。 准备工作&#xff1a;准备一台云服务器&#xff0c;并安装宝塔面板&#xff0c;配置好搭建网站所需…