0、引言
?? 在開始之前,您需要確保您已經(jīng)為 Qt 配置好了 ROS 開發(fā)環(huán)境了。如果您還沒有配置好,可以參考這篇文章
本文將著手探討如何在 Qt Creator 上編輯 ROS 項目(工作空間)。
1、本教程使用到的相關(guān)軟件或產(chǎn)品
- Ubuntu 20.04.6 LTS
- ROS Noetic Ninjemys LTS
- Qt 6.2.4 LTS
- Qt Creator 10.0.1
2、在帶有 ROS 插件的 Qt Creator 中編輯 ROS 項目
2.1、Qt Creator 新建 ROS 工程
-
在(零)基礎(chǔ)概念篇介紹 ROS 工作空間 時曾說過 “最頂層的工作空間文件夾(可以任意命名)和 src 文件夾(必須命名為"src")是需要自己創(chuàng)建的”。那么我們先創(chuàng)建如下的文件目錄:
workspace #在用戶目錄(~)新建一個“workspace”專門用于存放ROS工作空間 └── catkin_ws1 #這是ROS工作空間文件夾,名字自擬 └── src #創(chuàng)建一個一級目錄“src”文件夾
-
文件目錄創(chuàng)建完成后,打開 Qt Creator,點擊左上角 “文件”==>“New Project” 新建項目,在 “其他項目” 分區(qū)中找到 “ROS Workspace” 新建一個 ROS 工作空間:
-
在彈出的對話框中,我們需要為項目命名并選擇工作空間的路徑,隨后點擊下一步:
項 描述 Name Qt Creator 中 ROS 項目顯示的名字,建議與我們創(chuàng)建的工作空間文件夾名稱保持一致 Distribution ROS 發(fā)行版路徑 Build System 構(gòu)建系統(tǒng)。不出意外的話有三個可選項:①CatkinMake(就是 Catkin);②CatkinTools;③Colcon;任選一個即可,它們都可以用來構(gòu)建和管理 ROS 軟件包,筆者直接按默認使用 CatkinTools(當然最穩(wěn)妥的還是選擇第一個 —— CatkinMake) Workspace Path 工作空間目錄 -
下一步來到“匯總”頁面,如果不打算添加到版本控制系統(tǒng)的話就可以直接點擊 “完成” 了:
可以看到,創(chuàng)建 ROS 項目只會添加后綴為 .workspace 的 XML 文件,這個文件包含了 Qt Creator 中用于管理 ROS 工作空間的配置信息和設(shè)置,可以用于在 Qt Creator 中方便地打開和編輯 ROS 工作空間。
?? XML 文件不一定要用 .xml 作為文件后綴,文件后綴名只是一種幫助用戶和計算機識別文件類型的方式,它并不影響文件的內(nèi)容或格式。因此,XML文件可以使用任何后綴名,只要它遵循XML語法規(guī)則即可。同理,同為輕量級標記語言的 JSON、YAML、TOML 也是如此
-
創(chuàng)建 ROS 項目完成后,可以看到如下圖所示的目錄結(jié)構(gòu):
-
可以看到 .workspace 文件內(nèi)容其實很簡單:一是指定了 ROS 發(fā)行版的文件路徑;二是指定了默認的構(gòu)建系統(tǒng)為我們剛才選擇的 CatkinTools。
-
剛才我們選擇構(gòu)建系統(tǒng)是用一個下拉框選擇的,而下拉框中的每一項都是有索引的,從0開始。我們選擇的 CatkinTools 是第二項(索引為1)。
-
完成 ROS 項目創(chuàng)建后,如果我們此時關(guān)閉該項目,則可以看到除了 .workspace 文件,Qt Creator 還會自動創(chuàng)建一個與 .workspace 文件同名的后綴為 .workspace.user 的 XML 文件,用于存儲與 ROS 工作空間相關(guān)的用戶特定設(shè)置和配置。
-
.workspace.user 文件只包含用戶的設(shè)置,而不包含 Qt Creator 用于管理 ROS 工作空間的配置信息。因此,如果我們想分享 ROS 項目,只需要分享 .workspace 文件,而不需要分享 .workspace.user 文件。
-
2.2、Qt Creator 創(chuàng)建的 ROS 工程導入現(xiàn)有 ROS 軟件包
如果您還沒有現(xiàn)成的 ROS 包,您可以前往筆者的 Github 倉庫下載。
(下載下來的壓縮包解壓后記得把文件夾名稱中的“-master”刪除)
-
由于我們創(chuàng)建 ROS 工程時選擇的構(gòu)建系統(tǒng)是 CatkinTools,Ubuntu 20.04 沒有自帶這個工具,我們需要先下載安裝它:
-
首先同步源:
sudo apt-get update
-
然后安裝 catkin_tools 包:
sudo apt-get install python3-catkin-tools
-
-
此外由于我們現(xiàn)有的 ROS 包用到了 ROS 的地圖服務(map_server)包,但 ROS Noetic 并沒有自帶這個包,我們需要先安裝這個包:
-
首先同步源:
sudo apt-get update
-
然后安裝 map_server 包:
sudo apt-get install ros-noetic-map-server
-
-
安裝完 map_server,還是接著新建 ROS 工程的內(nèi)容。ROS 工程創(chuàng)建完成后,我們前往 ROS 工程的 src 文件夾下粘貼我們現(xiàn)有的 ROS 包:
隨后回到 Qt Creator,關(guān)閉并重新打開項目,Qt Creator 會花一點時間自動構(gòu)建該軟件包,耐心等待即可,完成后如下圖所示: -
接著前往 “項目”>“構(gòu)建和運行”>“運行”==>“執(zhí)行檔” 指定軟件的可執(zhí)行文件所在路徑:
可執(zhí)行文件一般在 “devel”(開發(fā)空間)>“lib”>(與我們導入的 ROS 包同名的那個文件夾)下。
以本文提供的 ROS 包為例,可執(zhí)行文件的絕對路徑為:
/home/xjy/workspace/catkin_ws1/devel/lib/qviz_demo/qviz_demo
-
在(零)基礎(chǔ)概念篇介紹 ROS Master 時曾介紹過“ROS Master 為 ROS 系統(tǒng)中的其余節(jié)點提供命名和注冊服務”(在 ROS 中,一個應用程序進程表現(xiàn)為一個 ROS Node)。所以在運行我們的 ROS 軟件之前,我們需要先啟動 ROS Master:
在 Ubuntu 桌面使用ctrl+alt+T
快捷鍵打開一個終端,然后使用roscore
命令啟動 ROS Master,如下圖所示: -
完成后,就可以愉快地運行我們的 ROS 軟件啦~
(由于我們是在本機上運行的roscore
,所以這里我們 ROS Master 的地址即回環(huán)地址)
2.3、Qt Creator 創(chuàng)建的 ROS 工程新建 ROS 軟件包
如果我們沒有現(xiàn)有的 ROS 軟件包,那么這個時候可能就需要我們自己新建軟件包了。使用 ros_qtc_plugin 插件新建 ROS 包只會添加兩個文件:CMakeLists.txt 和 package.xml,這也是任何 ROS 功能包都必須包含的兩個文件。其中 CMakeLists.txt 文件用于描述構(gòu)建過程和依賴關(guān)系等內(nèi)容;package.xml 用于描述軟件包的名稱、版本號、描述信息、郵件地址、作者、許可證以及其他 catkin 包依賴關(guān)系等內(nèi)容。
由于筆者水平及時間有限,就并沒有研究如何從新建一個 ROS 軟件包到添加各種源碼并成功運行的全過程;這里僅演示如何新建 ROS 包,更多內(nèi)容還請感興趣的讀者自行摸索了。
-
由于我們創(chuàng)建 ROS 工程時選擇的構(gòu)建系統(tǒng)是 CatkinTools,Ubuntu 20.04 沒有自帶這個工具,我們需要先下載安裝它:
-
首先同步源:
sudo apt-get update
-
然后安裝 catkin_tools 包:
sudo apt-get install python3-catkin-tools
-
-
ROS 工程創(chuàng)建完成后,我們右擊項目名稱,點擊 “添加新文件”:
(或者左上角 “文件(F)”==>“New File”) -
選擇 ROS 分類下的 Package 添加即可:
-
在 “Package Details” 頁面,除了包名稱(Name)是必填項,其他所有項都是默認填寫有內(nèi)容或者可忽略不填(后續(xù)有需求隨時可在 CMakeLists.txt 或 package.xml 內(nèi)手動添加相應內(nèi)容):
- Name:軟件包名稱,ROS 約定軟件包名稱應是小寫字母 + 下劃線(_)分割單詞的格式。ROS 軟件包名稱是其在 ROS 系統(tǒng)中的唯一標識符,因此請確保使用唯一的名稱。
- Path:軟件包的路徑,指定軟件包的存儲位置。通常,ROS 軟件包被存儲在ROS 工作空間的 src 目錄下。
- Version:軟件包的版本號,用于標識軟件包的不同版本。ROS 軟件包版本號通常采用 Semantic Versioning 規(guī)范,即 major.minor.patch(主版本號.次版本號.修訂號)格式。
- License:軟件包的許可證類型,用于說明軟件包的使用和分發(fā)條款。如果對許可證不太了解,可以參考:什么是License?許可證?協(xié)議?都有哪些License? - 知乎。
-
Dependencies/Catkin:ROS 軟件包依賴的其他 ROS 軟件包的名稱,通常在這一欄我們需要填寫對
roscpp
的依賴以使用 ROS 的 C++ 接口。如果想要添加多個依賴,可以使用英文逗號(,)或者空格隔開。 - Dependencies/System:ROS 軟件包依賴的系統(tǒng)庫的名稱,通常這一欄可以不填。
- Dependencies/Boost:ROS 軟件包依賴的 Boost 庫的名稱(Boost 是一個開源的、免費的 C++ 庫集合,包含了大量的高質(zhì)量、可重用的代碼庫。Boost 庫覆蓋了廣泛的 C++ 編程領(lǐng)域,包括容器、日期時間、算法、數(shù)值計算、多線程、文件系統(tǒng)、正則表達式等方面),通常這一欄可以不填。
-
Description:ROS 軟件包的簡要描述,通常包括軟件包的用途、功能、特性等。這些信息將在軟件包的 package.xml 文件中被包含,并在使用
rospack
命令或者其他 ROS 工具時顯示出來。
-
下面是一個 “Package Details” 頁面填寫完成的實例展示:
-
填寫完成后,點擊 “下一步(N)”??梢源_認新建 ROS 包只會添加兩個文件(CMakeLists.txt 和 package.xml):
-
點擊“完成(F)” 即可成功向 ROS 工程添加一個新建的 ROS 軟件包。完成后如下圖所示:
-
完成后,右擊項目名稱,點擊“重新構(gòu)建”:
-
稍等片刻就可以看到項目構(gòu)建成功的提示,說明我們新建的 ROS 軟件包是沒有任何問題的:
2.4、在 ROS 軟件包中使用 Qt 組件
既然是在 Qt Creator 中編輯 ROS 項目,那怎么能夠?qū)υ?ROS 軟件包使用 Qt 組件不感興趣呢??(′▽`)
下面介紹在 ROS 項目中如何添加對 Qt 各種各樣的組件的引用,以便使用這些組件。如果您想要使用 Qt 框架開發(fā)基于 ROS 的桌面應用程序,那么請勿錯過 2.4 小節(jié)。??
-
讓我們緊接著 2.3 小節(jié) 的內(nèi)容繼續(xù)。新建 ROS 軟件包并構(gòu)建成功后,我們點擊“項目”==>“構(gòu)建”,找到
Build Environment
構(gòu)建環(huán)境: -
可以看到 ROS 項目是重新設(shè)置了 CMAKE_PREFIX_PATH 的:
什么是 CMAKE_PREFIX_PATH?
-
點擊該環(huán)境變量,選中其值,并點擊右方的“Edit”:
-
在彈出的對話框中點擊“添加”:
-
找到 Qt 組件庫所在目錄(在 Qt 的安裝目錄下),點擊“打開”:
-
可以看到路徑列表中已經(jīng)添加了 Qt 組件庫所在路徑了,點擊右下方“確定(O)”以保存更改:
-
完成后可以看到 CMAKE_PREFIX_PATH 中已經(jīng)成功添加了我們新增的路徑了:
-
回到 ROS 軟件包的 CMakeLists.txt 文件,我們可以在其中嘗試查找一個 Qt 組件:
# 查找 Qt6 的 Charts 組件 find_package(Qt6Charts REQUIRED)
-
保存更改,隨后右擊項目名稱,點擊“重新構(gòu)建”:
-
構(gòu)建成功!說明 CMake 已經(jīng)成功找到該 Qt 組件啦~:
文章來源:http://www.zghlxwxcb.cn/news/detail-818307.html
-
后續(xù)小伙伴們就能在項目中愉快地使用各種 Qt 組件了,只需要在 CMakeLists.txt 中通過
target_link_libraries
命令將模塊鏈接到目標項目即可。例如:文章來源地址http://www.zghlxwxcb.cn/news/detail-818307.html# 向項目添加可執(zhí)行文件(僅作演示,畢竟我們新建的 ROS 軟件包中并沒有 main.cpp 源文件) add_executable(${PROJECT_NAME}_node main.cpp) # 將 Qt6 Charts 模塊鏈接到目標 target_link_libraries(${PROJECT_NAME}_node Qt6::Charts)
到了這里,關(guān)于在 Qt Creator 上創(chuàng)建 ROS 項目并新建/導入 ROS 包的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!