【古月居《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.hqwc.cn/news/232051.html

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

相关文章

Python基础语法之学习占位符

Python基础语法之学习占位符 一、代码二、效果 一、代码 name "张三" sex "男" age 10 money 12.5# 通过占位符完成拼接 print("姓名&#xff1a;%s" % name) print("姓名&#xff1a;%s,性别&#xff1a;%s" % (name, sex))text…

基于社区电商的Redis缓存架构-缓存数据库双写、高并发场景下优化

基于社区电商的Redis缓存架构 首先来讲一下 Feed 流的含义&#xff1a; Feed 流指的是当我们进入 APP 之后&#xff0c;APP 要做一个 Feed 行为&#xff0c;即主动的在 APP 内提供各种各样的内容给我们 在电商 APP 首页&#xff0c;不停在首页向下拉&#xff0c;那么每次拉的…

00Hadoop数据仓库平台

在这里是学习大数据的第一站 什么是数据仓库常见大数据平台组件及介绍 什么是数据仓库 在计算领域&#xff0c;数据仓库&#xff08;DW 或 DWH&#xff09;也称为企业数据仓库&#xff08;EDW&#xff09;&#xff0c;是一种用于报告和数据分析的系统&#xff0c;被认为是商业智…

【腾讯地图】【微信小程序】地图选点

【相关文章】 【腾讯地图】【微信小程序】地图选点 【腾讯地图】【微信小程序】路线规划 【腾讯地图】【微信小程序】城市记录&#xff08;基于地图选点入门版&#xff09; 【效果展示】 【官方文档】 微信小程序插件-地图选点插件 【完善流程】 当前操作和官方文档操作有部…

Anolis 安装 Conda 和 YoloV8

Anolis 安装 Conda 和 YoloV8 一 Conda 和 YoloV8 安装1.Conda 下载与安装2.YoloV8 安装 二.测试 一 Conda 和 YoloV8 安装 ## 1. anolis 安装 cv2 依赖库 yum install -y mesa-libGL.x86_64 ## Anaconda https://repo.anaconda.com/archive/ ## 重启终端查看版本 conda --ver…

Leetcode2336 无限集中的最小数字

题目&#xff1a; 现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, ...] 。 实现 SmallestInfiniteSet 类&#xff1a; SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。int popSmallest() 移除 并返回该无限集中的最小整数。void addBack(int nu…

判断数组中每个元素是否为负数 numpy.signbit()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断数组中每个元素是否为负数 numpy.signbit() [太阳]选择题 请问以下代码中最后输出结果是&#xff1f; import numpy as np a np.array([-1, 0, 1]) print("【显示】a ",a) pr…

springMVC实验(二)—调式工具APIFOX的使用

【知识要点】 后端开发调试工具 前后端分离已经成为互联网类软件开发主流模式&#xff0c;没有前端操作的支持&#xff0c;如何调试后端程序的就是开发人员必须解决的问题。如&#xff1a;get类请求可以直接使用浏览器就能模拟测试&#xff0c;但是post、put等类型的请求&…

Linux设置Nginx开机自启

文章目录 获取linux系统是多少位: getconf LONG_BIT获取CentOS版本: lsb_release -a获取nginx的版本: nginx -version第一步配置文件 vim /etc/rc.local最底部增加这一行&#xff1a; /usr/local/nginx/sbin/nginx 第二步注册systemctl服务 在/usr/lib/systemd/system目录…

VirtualBox 7.0.8(虚拟机软件)

VirtualBox是一款开源的虚拟机软件&#xff0c;它是使用Qt编写&#xff0c;在Sun被Oracle收购后正式更名成Oracle VM VirtualBox。它可以在VirtualBox上安装并且执行Solaris、Windows、DOS、Linux、OS/2 Warp、BSD等系统作为客户端操作系统。使用者可以在VirtualBox上安装并且运…

用纯 CSS 实现网格背景

是不是在日常开发中经常遇到实现网格的需求&#xff0c;网格通常对网页中展示的元素能起到很好的定位和对齐作用。 这里介绍如何只通过 CSS 来实现这个需求&#xff1f; 使用背景图 这里我们的背景图使用 SVG 来创建&#xff0c;首先&#xff0c;创建绘出一个正方形&#xff0c…

从零构建属于自己的GPT系列1:文本数据预处理、文本数据tokenizer、逐行代码解读

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1&#xff1a;文本数据预处理 从零构建属于自己的GPT系列2&#xff1a;语…