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.pswp.cn/news/710831.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/710831.shtml
英文地址,請注明出處:http://en.pswp.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…