Ubuntu18.04/20.04开机自启运行脚本

news/2025/2/21 17:44:47/

首先,编写一个.sh文件。

#任意目录创建文件
touch start.sh#授予权限
sudo chmod +x start.sh#编辑文件
gedit start.sh

start.sh

#! /bin/bash
gnome-terminal -- bash -c "roslaunch wpr_simulation wpb_stage_robocup.launch; exec bash" 
echo “wpb_stage_robocup.launch  successfully started”
sleep 10sgnome-terminal -- bash -c "roslaunch nav_pkg nav.launch; exec bash" 
echo “nav.launch  successfully started”
sleep 10sgnome-terminal -- bash -c "rosrun nav_pkg wp_node_wait; exec bash" 
exit 0

代码解释:

#!/bin/bash

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

gnome-terminal -- bash -c "roslaunch wpr_simulation wpb_stage_robocup.launch; exec bash" 

在这行代码中

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

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

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

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

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

gnome-terminal -- bash -c "source /home/gyr/Documents/robot/devel/setup.bash; roslaunch wpr_simulation wpb_stage_robocup.launch; exec bash"

 否则会出现以下报错

echo “wpb_stage_robocup.launch  successfully started”

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

sleep 10s

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

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

改进:

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

   改进后的示例程序如下:

#!/bin/bashgnome-terminal --tab -- bash -c "\
roslaunch wpr_simulation wpb_stage_robocup.launch; \
exec bash"echo “wpb_stage_robocup.launch  successfully started”sleep 10s  gnome-terminal --tab -- bash -c "\
roslaunch nav_pkg nav.launch;\
exec bash"echo “nav.launch  successfully started”sleep 10s gnome-terminal --tab -- bash -c "\
rosrun nav_pkg wp_node_wait;\
exec bash"

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

其他说明:

  • --window:创建新窗口。

  • --tab:在现有窗口中添加新标签页。

  • --title:设置标签页标题。

  • source ...:加载 ROS 环境变量(根据实际路径调整)。

  • exec bash:保持标签页不退出。

参考:详细介绍ROS中通过shell文件依次启动多个launch文件_gnome-terminal --tab -- roslaunch-CSDN博客

其次,搜索一个叫 Startup Application 的软件。

点击 Add,编写一个Name

点击 Browse,找到刚刚编写的 .sh 文件,再点 Add,重启之后就可以开机自启啦!


http://www.ppmy.cn/news/1573525.html

相关文章

(LLaMa Factory)大模型训练方法--预训练(Qwen2-0.5B)

❗由于大模型的预训练需要数千个GPU并持续数月的时间,所以一般情况下实际工作中并不会涉及到预训练,本篇文章我们只做的简单流程体验。 1、准备训练数据 说明:LLaMa-Factory的Github上有训练数据格式的详细说明,请见README_zh。 …

STL介绍1:vector、pair、string、queue、map

一、vector&#xff1a;变长数组、倍增思想 1.常用函数 size()&#xff1a;返回元素个数 empty()&#xff1a;返回是否为空 clear()&#xff1a;清空 front() / bcak() push_back() / pop_back()&#xff1a;尾部插入和删除 2.存储方式 #include<iostream> #incl…

vite让每个scss文件自动导入某段内容

写了如下一个scss函数&#xff0c;希望自动导入到每个scss文件里面 vite.config.ts里面如下配置 import fs from fsconst filePath resolve(__dirname, ./src/assets/css/index.scss);const Minxcss fs.readFileSync(filePath, utf8); css: {preprocessorOptions: {scss: {…

Grafana——如何迁移Grafana到一台新服务器

背景 有时候由于服务器更新之类的&#xff0c;我们需要迁移一整套Grafana&#xff0c;这时候该怎么操作呢&#xff1f; 下面让我一步步说明下 安装Grafana 在新的服务器上安装Grafana 这个不再赘述&#xff0c;可以看一下我之前的文章 备份及迁移 迁移配置文件 配置文件即…

Java 不可变集合

1.不可变集合 在 Java 中&#xff0c;不可变集合&#xff08;Immutable Collections&#xff09;是指在创建之后无法修改的集合。这些集合不允许添加、删除或修改元素&#xff0c;一旦创建后&#xff0c;内容就不能改变。Java 提供了一些内置的方式来创建不可变集合&#xff0…

React生产环境下使用mock.js

最近项目中有个需求,甲方要求在生产环境中使用mock.js数据展示前端项目&#xff0c;因为后端接口暂时没有。我的项目是通过vite构建的&#xff0c;前端项目在打包后一般不会将mock代码数据打包到dist文件夹中进而也不会调用mock数据&#xff0c;所以导致前端项目部署到nginx上后…

Postman - Postman 导入 JSON 文件(导入集合或环境变量)

一、Postman 中的 JSON 文件 在 Postman 中导入的 JSON 文件通常是指集合&#xff08;Collection&#xff09;或环境变量&#xff08;Environments&#xff09; 集合是 Postman 中用于管理 API 请求的一种方式&#xff0c;可以通过导入 JSON 文件来加载一个集合 环境变量是 P…

面试题之Vuex,sessionStorage,localStorage的区别

Vuex、localStorage 和 sessionStorage 都是用于存储数据的技术&#xff0c;但它们在存储范围、存储方式、应用场景等方面存在显著区别。以下是它们的详细对比&#xff1a; 1. 存储范围 Vuex&#xff1a; 是 Vue.js 的状态管理库&#xff0c;用于存储全局状态。 数据存储在内…