详细介绍ROS中通过shell文件依次启动多个launch文件

news2024/10/5 22:21:58

   本文主要介绍如何在ROS中通过shell文件依次启动多个launch文件,并介绍如何在同一个窗口的不同选项卡中依次启动多个launch文件。

   一、先来看一个简单的示例:

#!/bin/bash

gnome-terminal -- bash -c "roslaunch bringup racecar_gazebo_rviz_znc.launch; exec bash"

echo “racecar_gazebo_rviz_znc.launch  successfully started”

# 两个roslauch之间需要间隔一段时间,否则会相互抢占roscore,导致其中一个roslaunch失败,报runid错误

sleep 10s  

gnome-terminal -- bash -c "roslaunch bringup move_base_znc.launch; exec bash"

echo “move_base_znc.launch  successfully started”

   二、接下来我们逐行对上述示例进行解释:

   1、

#!/bin/bash

   这是脚本的Shebang行,指定了要使用的Shell。在本示例中,脚本将使用bash作为默认Shell。


   2、

gnome-terminal -- bash -c "roslaunch bringup racecar_gazebo_rviz_znc.launch; exec bash"

   在这行代码中

   (1)使用gnome-terminal命令用于打开一个新的终端窗口,在新的终端窗口中运行命令。

   (2)bash -c表示在新的终端中执行一条命令。在-c后面的双引号内写需要在这个终端窗口依次执行的命令,命令间用分号“;”间隔

   (3)在本终端窗口执行依次命令是roslaunch bringup racecar_gazebo_rviz_znc.launch和exec bash,前者启动了名为racecar_gazebo_rviz_znc.launch的ROS launch文件。后者exec bash用于设定在执行完该命令后,保持终端窗口打开而不退出。

   需要注意的是我在.bashrc文件中已经写入了上述文件的环境变量,在本例中为source /home/gly/catkin_ws/devel/setup.bash(根据自己情况修改)

在这里插入图片描述

   若没有再.bashrc文件中写入环境变量,则需要在执行launch文件前,先使用该语句加载环境变量,此时,本行语句变为

gnome-terminal -- bash -c "source /home/gly/catkin_ws/devel/setup.bash; roslaunch bringup racecar_gazebo_rviz_znc.launch; exec bash"

   3、

echo “racecar_gazebo_rviz_znc.launch  successfully started”

   这行语句使用echo 输出一条消息,后面双引号内的内容是输出的信息,本例中输出的是launch文件成功启动的信息,本行语句是非必要语句,可以不写。


   4、

sleep 10s

   这行代码让脚本暂停执行10秒钟。这是为了在启动两个不同的ROS launch文件之间留出一定的时间间隔,以避免它们相互竞争roscore资源并导致其中一个启动失败。

   在本例中,第一个launch文件,会启动roscore(ROS中未启动roscore时,launch文件会自动启动)、gazebo、rviz等环境耗时较长,所以在执行下一条launch文件前等待了10s,具体等待时间,取决于本launch文件启动需要花费的时间,自行修改即可。


   5和6,跟前面的2和3是同样的语法,不再赘述。


   三、保存文件,并赋予可执行权限

   将上述示例中的代码保存为.sh文件,如取名为znc.sh,然后在终端执行下述指令为该文件赋予可执行权限

chmod +x znc2.sh

   上述语句中

   (1)chmod:是设置文件权限的命令。

   (2)+x:表示要添加可执行权限。

   (3)znc.sh:是要添加权限的文件名。

   当然不想使用指令的小伙伴,也可以通过手动设置的方式,赋予文件的可执行权限,如下面的动态演示所示:

在这里插入图片描述


   四、执行该.sh文件

   在本例中,可以在终端输入以下指令,执行该.sh文件

./znc.sh

   效果演示如下:

在这里插入图片描述


   五、示例程序的改进版本

   在上述示例程序中,每个launch文件都会打开一个新的窗口,当需要执行的launch文件较多时,窗口过多会比较乱,因此,我们对上述程序进行简单的改进,使其在同一个窗口的不同选项卡下依次打开多个launch文件。

   改进后的示例程序如下:

#!/bin/bash

gnome-terminal --tab -- bash -c "\
roslaunch bringup racecar_gazebo_rviz_znc.launch; \
exec bash"

echo “racecar_gazebo_rviz_znc.launch  successfully started”

# 两个roslauch之间需要间隔一段时间,否则会相互抢占roscore,导致其中一个roslaunch失败,报runid错误

sleep 10s  

gnome-terminal --tab -- bash -c "\
roslaunch bringup move_base_znc.launch;\
exec bash"

echo “move_base_znc.launch  successfully started”

   与改进前的示例程序相比,新加入的–tab: 是 gnome-terminal 命令的选项,用于设定在新的选项卡中执行命令。此外,当在一个选项卡中需要执行的语句较多时,写成一行可读性较差,改进后的程序使用了换行符 \ 连接。每行都以一个反斜杠 \ 结尾,表示命令在下一行继续。这样可以使命令更易读。

   接下来,我们来看一下改进后程序的执行效果:

在这里插入图片描述


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

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

相关文章

Word控件Spire.Doc 【其他】教程(9):从 Word 文档中提取 OLE 对象

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

NestJs 管道(Pipe)

🎄Hi~ 大家好,我是小鑫同学,资深 IT 从业者,InfoQ 的签约作者,擅长前端开发并在这一领域有多年的经验,致力于分享我在技术方面的见解和心得 🚀技术&代码分享 我在 94Code 总结技术学习&…

Windows下安装运行Kafka(最底下有遇到的坑与解决方法)

注:安装kafka需要提前安装Zookeeper 一、Zookeeper安装 1. 下载安装包 https://zookeeper.apache.org/releases.html 注意:要下载带bin的安装包 2. 解压并进入ZooKeeper目录,如:D:\onworking\apache-zookeeper-3.7.0-bin&…

ansible剧本模式特殊模块使用

Nginx安装剧本 ansible-playbook test1.yaml //补充参数 -k(-ask-pass):用来交互输入ssh密码 -K(-ask-become-pass):用来交互输入sudo密码 -u:指定用户 -e:命令行指定变量 --syntax-check…

【服务器数据恢复】HP LeftHand存储raid5不可用的数据恢复案例

HP LeftHand存储简介: HP LeftHand存储支持搭建RAID5、RAID6、RAID10磁盘阵列,支持卷快照,卷动态扩容等。服务端和客户端分别如下: LeftHand存储共有三个级别:物理磁盘、基于多个物理磁盘组成的逻辑磁盘(ra…

广东电信突发故障,手机没信号,对讲机的重要性再次凸显

当我们常用的通信网络出现故障时,就会面临全网瘫痪的情况,这个时候无线电通信就显得尤为重要了! 在6月8日下午两点左右,有多位广东电信的用户发现,自己的手机突然出现了打不出去电话,及上不了网的情况&…

Unity编辑器扩展-第四集-获取物体的方法

第三集链接:Unity编辑器扩展-第三集-添加按钮到组件菜单并且重置组件_菌菌巧乐兹的博客-CSDN博客 一、本节目标效果展示 1.改选中单个物体的名字 2.改选中所有物体的名字 3.选中了所有的物体,但只改第一层物体的名称 4.来个有用的(选中的所有…

Python进阶语法之列表推导式

Python进阶语法之列表推导式 Python列表推导式是Python中最有魅力的特性之一,它提供了一种优雅、简洁的方式来创建列表。这种语法不仅使得代码更加简洁,易读,而且在某些情况下还可以提高代码的执行效率。接下来,我们将一起深入探…

SpringBoot中@ControllerAdvice的三种使用场景

一、全局异常处理 代码示例如下: /*** author qinxun* date 2023-06-14* Descripion: 业务层异常枚举*/ public enum ServiceExceptionEnum {SUCCESS(0, "成功"),ERROR(1, "失败"),SYS_ERROR(1000, "服务端发生异常"),MISSING_REQUEST_PARAM_E…

使用同步信号量和互斥信号量解决生产者和消费者问题

生产者和消费者问题 生产者和消费者问题是一个经典的进程同步问题。在这个问题中,生产者不断地向缓冲区中写入数据,而消费者则从缓冲区中读取数据。生产者进程和消费者进程对缓冲区的操作是互斥的,即任意时刻只能有一个进程对这个缓冲区进行…

RTU电流采集上传

RTU电流采集上传 案例说明器件 物联网平台开发代码修改三元组 测试 案例说明 本案例使用HD1(RTU)检测外部电流,并将电流上传阿里云端。 压力传感器输出电流信号,读取压力传感器数值时需要检测电流大小。haasHD1(RTU)有两路ADC—…

深度学习应用篇-元学习[16]:基于模型的元学习-Learning to Learn优化策略、Meta-Learner LSTM

【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化…

[C语言实现]数据结构堆之《害怕二叉树所以天赋全点到堆上了》

🥰作者: FlashRider 🌏专栏: 数据结构 🍖知识概要:详解堆的概念、小根堆与大根堆的区别、以及代码实现。 目录 什么是堆? 如何实现堆? 代码实现堆(小根堆) 定义堆以及堆的初始化和销毁。 堆的插入 堆…

LeetCode·每日一题·1177. 构建回文串检测·前缀和

作者:小迅 链接:https://leetcode.cn/problems/can-make-palindrome-from-substring/solutions/2309940/qian-zhui-he-zhu-shi-chao-ji-xiang-xi-by-n3ps/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获…

最新水文水动力模型在城市内涝、城市排水、海绵城市规划设计中深度应用

随着计算机的广泛应用和各类模型软件的发展,将排水系统模型作为城市洪灾评价与防治的技术手段已经成为防洪防灾的重要技术途径。本次培训将聚焦于综合利用GIS及CAD等工具高效地进行大规模城市排水系统水力模型的建立,利用SWMM实现排水系统水力模拟。讲解…

【RH850/U2A】:GreenHills编译配置

GreenHills编译配置 GreenHills语法.gpj文件.opt文件示例GreenHills编译器在编译我们的文件时涉及它需要哪些文件及相关配置呢?带着疑问我们开始来梳理。 我们还是以具体示例来展开(硬件平台:RH850 U2A8) GreenHills语法 一般我们是需要查看它的帮助文档的,文档在哪里呢?…

CSP第二轮/NOIP 比赛注意事项

一、在哪里写代码 主办方会提前在桌面已在 E 盘根目录下建立以考生准考证编号命名的文件夹,考生应检查该文件夹名称是否正确(包括编号及大小写字母),如有错误须立即上报监考人员,由监考人员进行更改。确认无误后,考生须为每道试题再单独建立一个子文件夹,子文件夹名与对应…

某互联网银行绿色金融背后的“安全秘诀”

​随着银保监会出台《银行业保险业绿色金融指引》、人民银行牵头制定《G20转型金融框架》的发布,金融行业正在持续加大对绿色金融支持力度。某互联网银行为了响应号召,采用数字化无纸化办公,线上零接触服务减少大量碳排放,成为国内…

oracle rac架构解读

一、oracle 数据库架构 单节点数据库,如果实例宕机了,如果一个业务链接在实例上面,那么这个业务就中断了。这个时候系统就不具有可用性了,那么这个时候单节点的可用性是很差的。 对于RAC来说,和单实例一样,…

新榜 | 小红书美妆用户趋势洞察报告

目前,小红书上聚集了大量年轻、高知的女性美妆用户,她们倾向于在小红书平台分享美妆护肤产品和使用经验,用户间的互动、分享氛围浓厚;而这些评论互动也传递了用户的真实诉求,理解用户的关注点对于企业和品牌来说将具有…