如何用Qt對ROS項目進行調試及創建GUI界面

一、前言

本文詳細介紹了利用CMakeLists.txt文件把ROS項目導入到QtCreator進行代碼編寫和調試的過程,文末還介紹了ROS中使用Qt界面的方法

這種導入ROS項目到Qt的方法也適用於其他CMake創建的項目,這種方案缺點是導入項目後無法直接在Qt下面新建文件和package到項目,只能用命令行在Qt外面創建之後重新導入到Qt,最近得益於Levi-Armstrong等人的工作,他們開發了一個名爲ros_qtc_plugin 的Qt插件可以方便的導入、創建、編譯、調試ROS項目,博主認爲這是一個目前爲止最完美的解決方案,詳細請看博主的另一篇文章介紹:如何使用Qt插件在Qt中進行ROS開發

本文所用操作系統爲Ubuntu 14.04 64位,Qt版本爲Qt5.5.1(Qt Creator3.5.1)
本文地址:http://blog.csdn.net/u013453604/article/details/52167213
參考:
ROS wiki IDEs
Qt App Templates
Write and Debug code for ROS with QtCreator
ROS: How to develop catkin packages from an IDE

二、創建Qt-ROS快捷方式

因爲Qt本身支持CMake項目,所以從終端啓動QtCreator是可以直接加載運行ROS相關項目的,如果你不想從終端啓動,那麼需要做一些設置來確保啓動QtCreator的同時加載ROS環境變量

這裏我們來創建一個啓動器(即桌面快捷方式):
點擊左上角Ubuntu標誌(或者按下Win鍵)搜索一個叫“啓動應用程序”的軟件,然後選擇“添加”創建一個啓動程序,如下圖

這裏寫圖片描述

(1) 我將這個啓動器命名爲“Qt-ROS”,然後點擊“瀏覽”,選中Qt5.5.1/Tools/QtCreator/bin/下的qtcreator可執行文件,然後“命令”欄會出現qtcreator可執行文件的絕對路徑
(2) 我們還需要在這行絕對路徑前面加一句bash -i -c,用空格和後面的路徑隔開
(3) 然後點擊“添加”,這樣“額外的啓動程序”欄下就出現了名爲“Qt-ROS”的啓動器,用鼠標把它拖到桌面變成了一個桌面快捷方式,把它重命名爲“Qt-ROS”
(4) 右鍵選中它,“屬性”,在“基本”頁點擊名稱左邊的圖標可以設置自定義圖標,我將其設爲原來qtcreator的圖標,圖標地址在
/Qt5.5.1/Tools/QtCreator/share/qtcreator/welcomescreen/widgets/images/qtcreator.png
(5) 再到“權限”頁選中“允許作爲程序執行文件”
這樣qtcreator快捷方式方式就建好了,如下圖

這裏寫圖片描述

用這個快捷方式打開ROS項目之後只需要在終端運行一個roscore,就能開始運行或者調試代碼,並且在Debug模式下可以看到程序內部的許多變量,ROS調試再也不是問題啦


如果你不想那麼麻煩可以直接在桌面新建一個Qt-ROS.desktop文件,然後把下面代碼複製進去

[Desktop Entry]
Exec=bash -i -c qtcreator %F
Icon=QtProject-qtcreator
Type=Application
Terminal=false
Name=Qt-ROS
GenericName=Integrated Development Environment
MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.nokia.qt.qmakeprofile;application/vnd.nokia.xml.qt.resource;
Categories=Qt;Development;IDE;
InitialPreference=9

其中的Exec Icon Name不需要再修改,這個配置可以直接用

三、導入ROS項目到Qt

現在我們用前面創建的Qt-ROS.desktop快捷方式打開Qt,開始導入ROS項目

1、導入單個package

如果你只想導入單個package進行調試請看這裏:
(1) 雙擊前面創建的Qt-ROS快捷方式打開Qt
(2) “open project”或者“文件”——“打開文件或項目”,選擇catkin工作空間裏package包的CMakeLists.txt,如下圖

這裏寫圖片描述

我的catkin工作空間是catkin_qtwstest,裏面有一個package叫test,test的CMakeLists.txt在catkin_qtwstest\src\test下面
(3) 構建路徑中的“構建目錄”選擇catkin_qtwstest/build,進入“下一步”

這裏寫圖片描述

(4) “執行CMake”的步驟如下圖
如果需要Debug,填入參數-DCMAKE_BUILD_TYPE=Debug
如果不需要Debug,你想直接運行,填入參數-DCMAKE_BUILD_TYPE=Release

這裏寫圖片描述

然後點擊“執行CMake”——“完成”,package成功導入到Qt
(5) 導入之後如下圖,可以看到src下面有三個.cpp文件,這是我寫的三個節點,在CMakeLists.txt裏我把它們分別編譯成三個可執行文件,名字不變

這裏寫圖片描述

如果想運行這些節點需要在終端運行一個master,節點才能正常運行,執行命令:

$ roscore

Qt界面左下角有個小的電腦圖標“project all”,點擊它可以選擇運行的節點,如圖我選擇名爲“talker”的節點
點擊左下角綠色三角形可以運行,點擊帶爬蟲的綠色三角形可以進行調試
(6) 如下圖是運行時的情況

這裏寫圖片描述

(7) 如果需要更改項目配置可以點擊Qt界面左側的“項目”,如下圖
在“構建”頁的“重新裝配項目”後面有一個“Run CMake…”點擊它可以如(4)更改編譯參數

這裏寫圖片描述

(8) 在“項目”的“運行”頁可以修改一些環境變量,如下圖

這裏寫圖片描述

(9) 如果想重新導入這個項目需要刪除catkin_qtwstest\src\test下的CMakeLists.txt.user文件,然後按照上述操作重新導入

2、導入工作空間所有package

如果你想把一個catkin工作空間裏的所有package導入到Qt請看這裏:
(1) 我們要導入的工作空間名字叫catkin_qtws,它裏面有許多其他的package,進入工作空間根目錄catkin_qtws\src我們可以看到工作空間的CMakeLists.txt是一個符號鏈接,如下圖

這裏寫圖片描述

我們需要把它變成一個真正的CMakeLists.txt,執行如下命令

cd ~/catkin_qtws/src
sed -i '' CMakeLists.txt

然後你會發現catkin_qtws\src下的CMakeLists.txt圖標變得和package裏面的一樣了
(2) 雙擊前面創建的Qt-ROS快捷方式打開Qt
(3) “open project”或者“文件”——“打開文件或項目”,選擇catkin工作空間裏的CMakeLists.txt,如下圖

這裏寫圖片描述

(4) 構建路徑中的“構建目錄”選擇catkin_qtws/build,進入“下一步”

這裏寫圖片描述

(5) “執行CMake”步驟如下圖
如果需要Debug,填入參數-DCMAKE_BUILD_TYPE=Debug
如果不需要Debug,你想直接運行,填入參數-DCMAKE_BUILD_TYPE=Release

這裏寫圖片描述

然後點擊“執行CMake”——“完成”,package成功導入到Qt
(6) 導入之後如下圖,這裏面有很多我寫的package,這裏有一個叫odomframe_test.cpp的文件是ROS wiki上的一個示例代碼,我們以這個odomframe_test節點爲例

這裏寫圖片描述

如果想運行odomframe_test節點需要先在終端運行一個master,節點才能正常運行,執行命令:

$ roscore

Qt界面左下角有個小的電腦圖標“project all”,點擊它可以選擇運行的節點,如圖我選擇名爲“odomframe_test”的節點
點擊左下角綠色三角形可以運行,點擊帶爬蟲的綠色三角形可以進行調試

(7) 如下圖是調試odomframe_test節點的情況

這裏寫圖片描述

(8) 如果想重新導入這個項目需要刪除catkin_qtws\src下的CMakeLists.txt.user文件,然後按照上述操作重新導入

3、在ROS中使用QT界面

在終端可以直接用catkin_create_qt_pkg命令創建帶Qt界面的ROS package,再按照前面說的方法導入到Qt即可
這裏參考的是qt_createTutorialsQt App Templates

(1) 要使用catkin_create_qt_pkg命令需要安裝一個包,執行如下命令:

$ sudo apt-get install ros-indigo-qt-ros

這樣我就可以使用catkin_create_qt_pkg命令創建一個名爲testgui的package

$ cd catkin_qtwstest/src/
$ catkin_create_qt_pkg testgui

如下圖

這裏寫圖片描述

(2) 按照上述方式重新把catkin_qtwstest工作空間導入到Qt中,如下圖

這裏寫圖片描述

在左側的樹狀圖可以看到testgui下的目錄結構,自動生成的main.cppmain_window.cppqnode.cppmain_window.ui包含Qt界面的基本元素
(3) 要運行testgui節點先啓動一個roscore,如圖

$ roscore

這裏寫圖片描述

然後點擊Qt左下角的綠色三角形運行testgui節點,如下圖

這裏寫圖片描述

根據roscore的ROS_MASTER_URI填寫UI界面上的ROS_MASTER_URI,然後點擊“connect”,testgui節點開始在名爲/chatter的topic上發送字符串如圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章