如何使用Qt插件在Qt中進行ROS開發

一、前言

本文介紹一種Qt下進行ROS開發的完美方案,使用的是ros-industrial的Levi-Armstrong在2015年12月開發的一個Qt插件ros_qtc_plugin,這個插件使得Qt“新建項目”和“新建文件”選項中出現ROS的相關選項,讓我們可以直接在Qt下創建、編譯、調試ROS項目,也可以直接在Qt項目中添加ROS的package、urdf、launch,感謝Levi-Armstrong。目前這個插件還在不斷完善,有問題或者其他功能建議可以在ros_qtc_plugin的項目主頁的討論區提出。

本文是用的操作系統是ubuntu kylin 14.04中文版,ROS版本是indigo,Qt版本是Qt5.5.1(Qt Creator 4.0.3)

本文地址:http://blog.csdn.net/u013453604/article/details/52186375
視頻教程:ros_qtc_plugin插件作者Levi-Armstrong錄製的插件使用教程
參考:
ROS wiki IDEs
1. Setup ROS Qt Creator Plug in
2. Setup Qt Creator for ROS
3. Debugging Catkin Workspace
4. Where to find Qt Creator Plug in Support
github ros-industrial/ros_qtc_plugin項目主頁
插件使用問題


2016-8-18更新:

  1. apt方式安裝
    Levi-Armstrong更新了他的插件安裝方式,現在你可以添加他的源直接用apt-get方式安裝,請見第五部分的補充
    如果apt-get方式方式下載過程太慢的話還是按照下文的方式安裝吧
    博主建議採用apt-get方式安裝,不容易出錯
  2. 頭文件包含的問題
    補充了ros相關頭文件的包含配置

2017-10-28更新:
1.項目wiki地址更新(需要翻牆)
2. apt方式安裝


二、安裝插件ros_qtc_plugin

插件要求Qt 5.5.0以上的版本,下載Qt 5.7.0請到
Qt Offline Installers
Qt 5.7.0 for Linux 64-bit (715 MB) (info)
國內可以從以下源高速下載:
中國科學技術大學
清華大學
北京理工大學
下載下來的qt-opensource-linux-x64-5.7.0.run 記得右鍵“屬性”——“權限”勾選“允許作爲程序執行文件”,再雙擊就能安裝了

1、修改系統配置文件讓Qt啓動器選擇新版的Qt Creator

首先需要修改下面的文件目的是讓Qt的啓動器選擇新版的Qt Creator,我原本安裝的Qt是Qt5.5.1(Qt Creator 3.0.1),然後後面安裝插件的腳本幫我下載了最新版的Qt Creator 4.0.3,花了好長時間下載

$ sudo gedit /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf

打開文件看到的是下面兩行

/usr/lib/x86_64-linux-gnu/qt4/bin
/usr/lib/x86_64-linux-gnu

我們需要把它們替換成如下兩個路徑

/home/zjl/Qt5.5.1/5.5/gcc_64/bin
/home/zjl/Qt5.5.1/5.5/gcc_64/lib

注意/home/zjl是我的主文件夾絕對路徑
後面的路徑是從Qt安裝目錄下面進入5.5/gcc_64/找到binlib文件夾,用這兩個文件夾路徑替換掉default.conf文件原來的兩行就是了,我安裝Qt的時候選擇安裝在主文件夾的Qt5.5.1下,並且我的Qt版本是5.5,所以路徑如上所示,安裝到其他地方或者其他版本的類似


遇到報錯請看下面:
這個插件對Qt的版本要求是最低Qt 5.5.0,如果你的Qt版本過低請安裝新版本。
如果多個Qt版本共存,而你修改上述文件仍無法進行編譯,報錯有類似下面的

make: *** 沒有規則可以創建目標“clean”。 停止。
Project MESSAGE: Cannot build Qt Creator with Qt version 5.2.1.
Project ERROR: Use at least Qt 5.5.0.
make: *** 沒有指明目標並且找不到 makefile。 停止。

那麼你就要到/usr/lib/x86_64-linux-gnu/ 下看看到底有幾個qtchooser 了,博主有臺電腦曾經是Qt5.2.0,然後卸載,重裝了Qt5.7.0,結果上述腳本里面的cd $QTC_BUILD && qmake $QTC_SOURCE/qtcreator.pro -r 這行一直過不了,原因是qtcreator.pro 裏面設置了版本檢查,而Qt選擇器選擇的一直是Qt5.2.0,上述修改沒有起到作用,我到/usr/lib/x86_64-linux-gnu/ 下面查看發現兩個地方有qtchooser

/usr/lib/x86_64-linux-gnu/qtchooser/default.conf
和
/usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf

於是我把另一個qtchooser 下面的default.conf 也做了上述修改,即

$ sudo gedit /usr/lib/x86_64-linux-gnu/qtchooser/default.conf

把裏面的內容修改爲

/home/zjl/Qt5.7.0/5.7/gcc_64/bin
/home/zjl/Qt5.7.0/5.7/gcc_64/lib

2、運行Qt Creator配置腳本

下載這個腳本setup.sh (你可以右鍵“另存爲”來下載它),我把它放在了主目錄/home/zjl下,那麼cd到該位置執行以下命令來運行它

$ cd ~
$ bash setup.sh -u

這裏$ bash setup.sh -u 命令前面不需要加sudo 否則編譯過程中新建的文件夾和桌面的Qt快捷方式都屬於root用戶,不用命令行你是無法修改和刪除的。。。。
期間腳本從github下載一個新版的Qt Creator源碼並重新編譯花了好長時間,下載速度只有10kb/s,只好讓它下載一晚上。。。期間如果網絡斷開導致下載中斷你還得再運行一次,再等好久,可以從官網下載最新的Qt Creator 4.0.3源碼,具體請看下面的說明


值得注意的是這個腳本中有個路徑需要根據實際情況修改,如果你的ubuntu是英文版可以不用管,如果你是中文版的系統,你的桌面文件夾名字不是Desktop而是桌面的話你就要修改setup.sh文件中的第84行,原文是

rm -f $HOME/Desktop/QtCreator.desktop
ln -s $DESKTOP_FILE $HOME/Desktop/QtCreator.desktop

改成

rm -f $HOME/桌面/QtCreator.desktop
ln -s $DESKTOP_FILE $HOME/桌面/QtCreator.desktop

我修改過的腳本可以在這裏下載

這樣它就會在桌面生成一個名爲QtCreator.desktop的快捷方式,你用這個快捷方式打開Qt就可以正常使用ros_qtc_plugin插件了


下載QtCreator太慢請看下面:
腳本中是從github下載90MB的QtCreator最新版源碼,國內訪問github網速太慢,可以從
Qt官網下載Qt Creator 4.0.3的源碼壓縮包qt-creator-opensource-src-4.0.3.tar.gz (21 MB)(還有其他
下載下來之後解壓得到101MB的qt-creator-opensource-src-4.0.3 文件夾,將其改名爲qt-creator,放在qtc_plugins文件夾下(qtc_plugins與腳本setup.sh處於同一級目錄),重新執行腳本即可


“文件”——“新建文件或項目”你會看到如下界面

這裏寫圖片描述

三、使用ros_qtc_plugin插件新建項目

使用插件的“新建項目”中的“Import ROS Workspace”選項不僅可以新建工作空間還可以導入現有的工作空間,而“新建文件”中的“ROS”下面的“Package”、“Basic Node”等選項可以創建package和和節點、launch文件、urdf文件等
現在我們來創建一個新的catkin工作空間,並且在裏面創建一個package

1、新建項目

“文件”——“新建文件或項目”,選擇”Import ROS Workspace”——“choose”如上圖

然後填寫catkin工作空間的名字和位置,如下圖

這裏寫圖片描述

我這裏的Name和catkin工作空間文件夾名字相同(也可以不同)名爲catkin_new,然後選擇“瀏覽”——“創建文件夾”,創建一個名爲catkin_new的文件夾,如下圖,按回車,再選擇“打開”

這裏寫圖片描述

出現一個對話框,詢問新建的工作空間未被初始化,是否執行初始化,我們選擇“yes”
這裏相當於執行一次catkin_init_workspace命令,使工作空間初始化

這裏寫圖片描述

然後點擊下方的“Generate Project File”,再點擊“下一步”
在“項目管理”步驟可以配置版本控制系統,我們選擇“完成”,如下圖

這裏寫圖片描述

建好的工作空間catkin_new是空的,如下圖

這裏寫圖片描述

2、創建package

接下來我們在這個工作空間創建一個新的package
catkin_new下面的src上右鍵單擊,選擇“添加新文件”,如下圖

這裏寫圖片描述

然後選擇“ROS”——“package”——“choose”

這裏寫圖片描述

填寫package的名字,如test1
填寫作者(Authors)和維護者(Maintainers),如果你的Qt環境部沒有配置中文支持請不要用中文,否則無法新建package,或者新建的package裏面的package.xml會是空文件
在“Dependencies”下的“Catkin”一欄填寫依賴,通常用C++寫節點需要添加對roscpp的依賴
如下圖

這裏寫圖片描述

點擊“完成”

3、添加新的節點

目前這個package還是空的,沒有任何節點
我們在test1的src文件夾上右鍵單擊,選擇“添加新文件”

這裏寫圖片描述

選擇“ROS”——“Basic Node”——“choose”,創建一個節點,也就是新建一個.cpp文件

這裏寫圖片描述

節點名稱寫爲“node1”,則生成一個名爲node1.cpp的源文件

這裏寫圖片描述

用ROS模板新建的node1.cpp的源文件如下圖,是自動生成的一個Hello World程序

這裏寫圖片描述

4、編譯節點

爲了讓它編譯成可執行文件我們還需要編輯test1的makefile,如下圖
爲test1的CMakeLists.txt加上下面幾行,意思是把node1.cpp編譯成名爲node1的節點

add_executable(node1 src/node1.cpp)
target_link_libraries(node1
  ${catkin_LIBRARIES}
)

提醒
值得注意的是上面幾行需要放在include_directories後面,在構建項目的時候纔會在catkin_new/devel/lib/test1裏面生成可執行文件node1.exe,這樣後面進行“運行配置”的時候test1包下面纔會出現node1節點;
如果把上面幾行放在include_directories前面會使得構建過程直接在catkin_new/build/test1下面生成可執行文件node1.exe,而devel文件夾下找不到可執行文件,導致後面選擇運行節點的時候不會出現這個節點

這裏寫圖片描述

修改完CMakeLists.txt之後點擊Qt左下角的錘子圖標“構建項目catkin_new”,點擊底邊欄的“4 編譯輸出”可以看到編譯結果,如下圖

這裏寫圖片描述

5、運行節點

如果你想運行某個節點還需要修改運行配置,點擊左側蘭的“項目”,在“構建設置”頁的“編輯構建配置”一欄選擇“Default”,然後在下圖所示光標處點擊切換到“運行設置”頁,可以看到一個“Add Run Step”的選項,點擊出現一個“ROS Step”配置項,可以通過下拉菜單選擇package和target(就是該package下的節點),下拉菜單可以通過鍵入首字母初步定位到你要找的package位置
“Add Run Step”的選項其實也是一個下拉菜單,可以選擇“Add Launch Step”的選項運行launch文件
配置好如圖,點擊Qt左下角的小電腦圖標,選擇“Default”的構建配置,再點擊Qt左下角的綠色三角形即可運行“運行設置”頁下面配置好的所有Step

這裏寫圖片描述

運行結果可以點開底邊欄的“ROS Terminals”查看,如下圖,
打印了一句
[ INFO] [1470932511.713873863]: Hello world!
如果沒有“ROS Terminals”,可以在下圖鼠標所在位置底邊欄有兩個上下三角形的地方打開“ROS Terminals”窗口

這裏寫圖片描述

四、ROS界面開發

結合我另一篇博客的內容在ROS中使用QT界面
我們可以使用catkin_create_qt_pkg 命令在工作空間創建好一個帶GUI的ROS package,然後用ros_qtc_plugin插件的“Import ROS Workspace”功能導入這個這個package所在的工作空間,然後可以看到如下圖所示

這裏寫圖片描述

我用 catkin_create_qt_pkg 命令創建的package名爲testgui,它包含一個自動生成的界面文件和相應的節點,你可以在左側欄雙擊main_window.ui 文件然後在“設計”頁面編輯UI界面,我在自動生成的頁面上添加了一個空的按鈕名爲“PushButton”,然後配置“運行設置”運行testguitestgui 節點,可以看到如下圖界面,點擊界面上的“connect”按鈕,節點就會在/chatter 話題上不斷髮送字符串,然後在界面上顯示出來

這裏寫圖片描述

五、補充

2016-8-18更新:

1、apt-get方式安裝

Levi-Armstrong更新了他的插件安裝方式,現在你可以添加他的源直接用apt-get方式安裝

Ubuntu 14.04:

sudo add-apt-repository ppa:levi-armstrong/qt-libraries-trusty
sudo add-apt-repository ppa:levi-armstrong/ppa  
sudo apt-get update && sudo apt-get install qt57creator-plugin-ros

如果你以前使用過舊的軟件源以下命令可以刪除它們

sudo add-apt-repository --remove ppa:beineri/opt-qt57-trusty
sudo add-apt-repository --remove ppa:beineri/opt-qt571-trusty

或者嘗試以下命令刪除

sudo rm /etc/apt/sources.list.d/beineri-opt-qt57-trusty-trusty.list
sudo rm /etc/apt/sources.list.d/beineri-opt-qt571-trusty-trusty.list

Ubuntu 16.04

sudo add-apt-repository ppa:levi-armstrong/qt-libraries-xenial  
sudo add-apt-repository ppa:levi-armstrong/ppa  
sudo apt-get update && sudo apt-get install qt57creator-plugin-ros

刪除舊的軟件源請運行

sudo add-apt-repository --remove ppa:beineri/opt-qt57-xenial
sudo add-apt-repository --remove ppa:beineri/opt-qt571-xenial

安裝完之後“文件”——“新建文件或項目”看看有沒有ROS相關的選項吧

2017-10-28更新:
Ubuntu 16.04

sudo add-apt-repository ppa:levi-armstrong/qt-libraries-xenial 
sudo add-apt-repository ppa:levi-armstrong/ppa 
sudo apt update && sudo apt install qt57creator 
sudo apt install qt57creator-plugin-ros

2、頭文件包含的問題

菜單欄“文件”——“Reload Project Build Info ···”可以更新文件狀態,如果某些頭文件添加之後IDE提示找不到,而你能確定頭文件確實存在,那麼你可以放心編譯,之後IDE可以找到頭文件並提供代碼補全和提示功能。

用插件創建或導入ROS package之後還需要修改.workspace文件,如下圖

這裏寫圖片描述

<IncludePaths>標籤下加入下面這行

<Directory>/opt/ros/indigo/include</Directory>

這樣就可以使得Qt找到ros頭文件,比如<ros/ros.h>
如下圖,頭文件包含語句不再提示找不到文件,輸入ros相關函數可以自動補全

這裏寫圖片描述

如果添加了上述路徑仍提示找不到ros頭文件,你可以保存之後重新打開該項目,博主某臺電腦的Qt就是不能實時更新工作空間的文件變化真是憂傷,不過其他電腦都能實時更新文件狀態,不用重新打開項目

3、模塊找不到的問題

使用上面的命令行安裝qt57及ROS插件之後發現Qt某些模塊的名字變了,需要加qt57前綴,比如Qt的模塊:
按照官網Qt Serial Port的說法只要在.pro文件加上

QT += serialport

然後頭文件包含

#include <QtSerialPort/QtSerialPort>

就可以用串口模塊了
如果遇到如下報錯

Project ERROR: Unknown module(s) in QT: serialport

需要安裝libqt5serialport5-dev

sudo apt install libqt5serialport5-dev

如果上述libqt5serialport5-dev無法安裝,提示依賴錯誤,我們可以安裝qt57serialport

sudo apt install qt57serialport

之後再像之前那樣調用serialport模塊即可:

QT += serialport

#include <QtSerialPort/QtSerialPort>

另外可以用apt-cache search命令查看軟件源中可供安裝的相關包的名字

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