Ubuntu Qt控制终端运行ros

文章目录

  • gnome-terminal
  • Qt 通过QProcess类
  • Qt 通过system

gnome-terminal

在Ubuntu中可以使用man gnome-terminal命令查看gnome-terminal的使用指南,也可在ubuntu manuals查看:

NAMEgnome-terminal — 一个终端仿真应用.概要gnome-terminal  [-e,  --command=STRING]   [-x, --execute ]  [--window-with-profile=PROFILENAME]  [--tab-with-profile=PROFILENAME]  [--window-with-profile-internal-id=PROFILEID]  [--tab-with-profile-internal-id=PROFILEID]  [--role=ROLE]  [--show-menubar]  [--hide-menubar]  [--geometry=GEOMETRY]  [--working-directory=DIRNAME]  [-?, --help]选项-e, --command=STRING在终端内执行此选项的参数。-x, --execute在终端内执行命令行的其余部分。--window-with-profile=PROFILENAME打开一个新窗口,其中包含具有给定配置文件的选项卡。 可以提供多个这些选项。--tab-with-profile=PROFILENAME在具有给定配置文件的窗口中打开一个选项卡。可以提供多个这些选项,以打开多个选项卡 。--window-with-profile-internal-id=PROFILEID打开一个新窗口,其中包含具有给定配置文件 ID 的选项卡。在内部用于保存会话。--tab-with-profile-internal-id=PROFILEID在窗口中打开具有给定配置文件 ID 的选项卡。 在内部用于保存会话。--role=ROLE为最后一次指定的窗口设置role;仅适用于一个窗口;可以为从命令行创建的每个窗口指定一次。--show-menubar打开最后指定的窗口的菜单栏;仅适用于一个窗口;可以为从命令行创建的每个窗口指定一次。--hide-menubar关闭最后指定的窗口的菜单栏;仅适用于一个窗口;可以为从命令行创建的每个窗口指定一次。--geometry=GEOMETRY指定窗口位置,每个要打开的窗口可以指定一次。--working-directory=DIRNAME将终端的工作目录设置为 DIRNAME。-?, --help显示帮助消息。

用法:

gnome-terminal [选项…] [-- 命令 …]

在终端中输出 gnome-terminal,就会自动弹出一个新的终端.命令执行完或者遇到错误后,这个新终端也会闪退。

在bash中 加上exec bash。这样新终端在执行完命令后也不会退出了,如:

gnome-terminal --bash -c 'python3;exec bash'

– bash -c后面写的是命令。

参数说明:帮助选项:-h, --help                     显示帮助选项--help-all                     显示全部帮助选项--help-gtk                     显示 GTK+ 选项--help-terminal                显示终端选项--help-window-options          显示每个窗口的选项--help-terminal-options        显示每个终端的选项GTK+ 选项--class=类                     窗口管理器所使用的程序类--name=名称                    窗口管理器所使用的程序名--gdk-debug=标志               要设置的 GDK 调试标志--gdk-no-debug=标志            要取消的 GDK 调试标志--gtk-module=模块              装入额外的 GTK+ 模块--g-fatal-warnings             将警告变为严重--gtk-debug=标志               要设置的 GTK+ 调试标志--gtk-no-debug=标志            要取消的 GTK+ 调试标志Options to open new windows or terminal tabs; more than one of these may be specified:--window                       打开包含默认配置下一个标签页的一个新窗口--tab                          在最后一个打开的窗口中打开一个默认配置下的新标签页Window options; if used before the first --window or --tab argument, sets the default for all windows:--show-menubar                 打开菜单栏--hide-menubar                 关闭菜单栏--maximize                     最大化窗口--full-screen                  全屏幕窗口--geometry=几何形状            设置窗口大小;例如:80x24,或者 80x24+200+200(列x行+X坐标+Y坐标)--role=角色                    设置窗口角色--active                       将上次指定的标签页设定为所在窗口的当前标签页Terminal options; if used before the first --window or --tab argument, sets the default for all terminals:-e, --command                  在终端中执行此选项的参数--profile=配置文件名           使用提供的配置文件而非默认配置-t, --title=标题               设置初始终端标题--working-directory=目录名     设置工作目录--wait                         等待子进程退出--fd=文件描述符                转发文件描述符--zoom=缩放                    设置终端的缩放系数(1.0 = 正常大小)应用程序选项:--load-config=文件             载入一个终端配置文件--preferences                  显示首选项窗口-p, --print-environment        打印与终端交互的环境变量-v, --verbose                  增加诊断详细程度-q, --quiet                    抑制输出--display=显示                 要使用的 X 显示-t, --title=标题    为打开终端设置初始的标题,便于区分。-c,--command:       -c是指cmd ,后面是要执行的命令,双引号中可以为多个命令命令以分好为结束符号,如果执行多个命令,可以用分号隔开,如:"test1.sh; test2.sh"&                   如果需要同时并行启动多个脚本可以在命令行后面加 & 符号,使命令后台运行.-e excute:          可以出现多次,要注意 -e 后面只能有一个参数,也就是说 -e 后面的所有需要用引号括起来。如:-e 'bash -c "pwd; exec bash;"'如:gnome-terminal -e 'bash -c "ls; exec bash"'exec bash:          是让打开的终端在执行完脚本后不关闭一直存在。 如果直接写bash也行,相当于开了一个子shell。 --window:           表示打开一个终端窗口。如:gnome-terminal --window --window #打开两个终端如:gnome-terminal --window --tab --window --tab --tab #打开两个终端,第一个两个tab,第二个3个tab--tab:              在其中新开辟一个标签页,如果还想要更多标签页就就继续加--tab。--profile=配置文件名           使用提供的配置文件而非默认配置--working-directory=目录名     设置工作目录--wait                         等待子进程退出--fd=文件描述符                 转发文件描述符--zoom=缩放                     设置终端的缩放系数(1.0 = 正常大小)$ 
    因为 -x-e 已经被弃用了。所以被取而代之的是 -- 符号,还有就是 bach -c这条命令,因为是在新启动的终端里执行bash -c,即启动子shell。改之后如:gnome-terminal --tab -- bach -c "ls"&"gnome-terminal --tab -- bash -c " pwd; exec bash;"[终端启动后自动执行命令]有两个参数可以实现这个功能,-e 和 -x,这两个区别在于:-e 可以出现多次。如果在所有 --window 前面,表示对所有 window 和 tab 起作用。如果在 --window 或者 --tab 后面,表示只针对这个 tab 执行;注意: -e 后面只能有一个参数, 也就是说如果有空格,需要用引号-x 只能出现一次,在-x后面的所有内容,均认为是要执行的命令,所以可以出现空格。这些命令是针对所有tab都执行的.注意: \ 连续符号后面不能跟 注释,否则注释后面的内容执行不到。  

例子:

gnome-terminal --window --window #打开两个
gnome-terminal --window --tab --window --tab --tab #打开两个,第一个两个tab,第二个3个tab
gnome-terminal -- bash -c "ls; cd ~/lzk; exec bash" #打开一个终端,然后进入某一子目录

Qt 通过QProcess类

QProcess *process=new QProcess;
process->start("bash");      //启动终端(Windows下改为cmd)
process->waitForStarted();   //等待启动完成
process->write("命令"+‘\n’); //向终端写入命令,注意尾部的“\n”不可省略

Qt 通过system

system("gnome-terminal -x bash -c '设置环境变量; 命令'&");

例子

 system("gnome-terminal -- bash -c 'source /opt/ros/melodic/setup.bash ;roscore'&");system("gnome-terminal -- bash -c 'source /opt/ros/melodic/setup.bash ;rosrun turtlesim turtlesim_node'&");system("gnome-terminal -- bash -c 'source /opt/ros/melodic/setup.bash ;rosrun turtlesim turtle_teleop_key'&");
system("gnome-terminal -x bash -c 'source ~/my_ws/devel/setup.bash;roslaunch my_package file.launch'"); 

注意:system函数中务必添加 source ~/catkin_ws/devel/setup.bash;目的是确保能找到所有相关联的包(Package);否则将不能运行launch文件;
source /opt/ros/melodic/setup.bash 是配置环境变量

#!/bin/bash
# 脚本名称: takeoff_land
# 脚本描述: 该脚本为起飞&降落控制demo启动脚本,包含PX4 SITL,Gazebo仿真环境,无人机控制节点以及起飞&降落控制节点gnome-terminal --window -e 'bash -c "roscore; exec bash"' \
--tab -e 'bash -c "sleep 5; roslaunch prometheus_gazebo sitl_outdoor_1uav.launch; exec bash"' \
--tab -e 'bash -c "sleep 6; roslaunch prometheus_uav_control uav_control_main_outdoor.launch; exec bash"' \
--tab -e 'bash -c "sleep 7; roslaunch prometheus_demo takeoff_land.launch; exec bash"' \
#--tab -e 'bash -c "sleep 7; rosrun prometheus_demo takeoff_land.py; exec bash"' \

sleep命令可以让脚本暂停执行一段时间,其基本语法为:

sleep <seconds>

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

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

相关文章

Cocos游戏开发中的金币落袋效果

引言 Cocos游戏开发中的金币落袋效果 大家好,不知道大家有没有被游戏中的一些小细节打动或吸引。 往往游戏就是通过一些与众不同的细节,去留住玩家。 金币落袋效果正是如此,它比普通的数值变化来得更加形象,给予玩家成就感和满足感。 本文重点给大家介绍一下如何在Coc…

深入探索Java集合框架

在Java编程中&#xff0c;数据的组织和存储是核心部分。为了更有效地管理和操作这些数据&#xff0c;Java提供了一个强大且灵活的集合框架&#xff08;Java Collection Framework&#xff0c;JCF&#xff09;。这个框架不仅简化了数据结构的处理&#xff0c;还提供了高效的性能…

Opencv基本操作 (上)

目录 图像基本操作 阈值与平滑处理 图像阈值 图像平滑处理 图像形态学操作 图像梯度计算 Sobel 算子 Canny 边缘检测 图像金字塔与轮廓检测 图像轮廓 接口定义 轮廓绘制 轮廓特征与相似 模板匹配 傅里叶变换 傅里叶变换的作用 滤波 图像基本操作 读取图像&…

GDPU 算法分析与设计 天码行空 1

实验1 排序算法的效率分析 一、【实验目的】 &#xff08;1&#xff09;复习排序算法的实现过程&#xff1b; &#xff08;2&#xff09;设计平均与最坏情况下时间复杂度的数据环境并理解相关含义&#xff1b; &#xff08;3&#xff09;初步了解算法时间复杂度的分析方法。…

【Maven】Maven 基础教程(二):Maven 的使用

《Maven 基础教程》系列&#xff0c;包含以下 2 篇文章&#xff1a; Maven 基础教程&#xff08;一&#xff09;&#xff1a;基础介绍、开发环境配置Maven 基础教程&#xff08;二&#xff09;&#xff1a;Maven 的使用 &#x1f60a; 如果您觉得这篇文章有用 ✔️ 的话&#…

Qt中关于信号与槽函数的思考

信号与槽函数的思考 以pushbutton控件为例&#xff0c;在主界面上放置一个pushbutton控件&#xff0c;点击右键选择关联槽函数&#xff0c;关联一个click函数&#xff0c;如下图所示&#xff1a; 在该函数中&#xff0c;实现了一个点击pushbutton按钮后&#xff0c;弹出一个窗…

nginx使用详解--反向代理

什么是反向代理&#xff1f; 正向代理&#xff1a; 一般的访问流程是客户端直接向目标服务器发送请求并获取内容&#xff0c;使用正向代理后&#xff0c;客户端改为向代理服务器发送请求&#xff0c;并指定目标服务器&#xff08;原始服务器&#xff09;&#xff0c;然后由代理…

在极狐GitLab 配置 SSL/https

本文作者 徐晓伟 说明 极狐GitLab https 使用的是 nginx 实现的本文使用的域名是IP 192.168.80.14&#xff08;原因&#xff1a;如果使用域名&#xff0c;必须拥有这个域名的所有权&#xff0c;并增加解析才可以&#xff0c;要不然在 Docker 容器中&#xff0c;无法使用域名检…

go并发模式之----使用时顺序模式

常见模式之二&#xff1a;使用时顺序模式 定义 顾名思义&#xff0c;起初goroutine不管是怎么个先后顺序&#xff0c;等到要使用的时候&#xff0c;需要按照一定的顺序来&#xff0c;也被称为未来使用模式 使用场景 每个goroutine函数都比较独立&#xff0c;不可通过参数循环…

DOM 获取父子节点

DOM 是以树状结构排列的&#xff0c;所以父子关系是相对的&#xff0c;当li为我们的目标节点的时候&#xff0c;ul为其父节点&#xff0c;其他li为它的兄弟节点&#xff0c;li里面包含的标签为子节点&#xff0c;以此类推。 那我们如何找父节点&#xff1f; 元素.parentNode&am…

libigl 网格质量矩阵

文章目录 一、简介二、应用三、实现效果参考资料一、简介 在 libigl 中,igl::massmatrix 是一个用于计算给定三角网格的质量矩阵的函数。质量矩阵在有限元分析和其他模拟技术中非常有用,它通常用于描述网格中各个节点的质量或者用于计算模拟过程中的惯性效应。 igl::massmatr…

分布式系统如何做数据对账?

前言 在分布式系统中&#xff0c;虽然我们会使用各种分布式事务的方案&#xff0c;来保证各个系统之间的一致性。但是&#xff0c;很多时候往往事与愿违。 尤其是现在很多公司都采用最终一致性的方案&#xff0c;而所谓最终一致性&#xff0c;无论是本地消息表、事务消息、还…

蓝桥杯:数组分割(Java)

目录 问题描述输入格式输出格式代码实现 问题描述 小蓝有一个长度为N的数组A[A0,A1,… AN-1]。现在小蓝想要从A对应的数组下标所构成的集合Ⅰ0,1,2,…,N -1中找出一个子集R1&#xff0c;那么R1在Ⅰ中的补集为R2。记S1∈∑Ar&#xff0c;S2∈∑Ar&#xff0c;我们要求S1和S2均为…

node 之 npm

1.什么是包 node.js中的第三方模块又叫做包 就像电脑和计算机指的是相同的东西&#xff0c;第三方模块和包指的是同一个概念&#xff0c;只不过叫法不同 2.包的来源 不同于 Node.js 中的内置模块与自定义模块&#xff0c;包是由第三方个人或团队开发出来的&#xff0c;免费供所…

【计算机网络——应用层】http协议

文章目录 1. http协议1.1 http协议简介1.2 url组成1.3 urlencode与urldecode 2. http协议的格式2.1 http协议的格式2.2 一些细节问题 3. http的方法、状态码和常见响应报头3.1 http请求方法3.2 http状态码3.3 http常见的响应报头属性 4. 一个非常简单的http协议服务端5. http长…

【X806开发板试用】文章一 ubuntu开发环境搭建

一、环境配置 官方链接&#xff1a; 环境配置 1.安装必要的库和软件 sudo apt-get install build-essential gcc g make zlib* libffi-dev e2fsprogs pkg-config flex bison perl bc openssl libssl-dev libelf-dev libc6-dev-amd64 binutils binutils-dev libdwarf-dev u-b…

pix2pix-zero

pix2pix-zero&#xff1a;零样本图像到图像转换 论文介绍 Zero-shot Image-to-Image Translation 关注微信公众号: DeepGoAI 项目地址&#xff1a;https://github.com/pix2pixzero/pix2pix-zero 论文地址&#xff1a;https://arxiv.org/abs/2302.03027 本文介绍了一种名为…

Golang 函数中 defer 和 return 的调用顺序

先来看一段代码&#xff1a; package mainimport "fmt"func f() (ret int) {defer func() {ret}()return 1 } func main() {fmt.Println(f()) }上面这段代码的输出是2&#xff0c;不是1 原因在于&#xff1a; 1&#xff09;ret 是在执行 return 1 语句后发生的 2&…

基于SpringBoot多模块项目引入其他模块时@Autowired无法注入

基于SpringBoot多模块项目引入其他模块时Autowired无法注入 一、问题描述1、解决方案 一、问题描述 启动Spring Boot项目时报 Could not autowire. No beans of ‘xxxxxxxx’ type found. 没有找到bean的实例&#xff0c;即spring没有实例化对象&#xff0c;也就无法根据配置文…

【LeetCode-中等】209.长度最小的子数组-双指针/滑动窗口

力扣题目链接 1. 暴力解法 这道题的暴力解法是两层嵌套for循环&#xff0c;第一层循环从 i 0 开始遍历至数组末尾&#xff0c;第二层循环从 j i 开始遍历至找到总和大于等于 target 的连续子数组&#xff0c;并将该连续子数组的长度与之前找到的子数组长度相比较&#xff0…