基於Qt搭建ROS開發環境


參考的博客:

http://blog.csdn.net/u013453604/article/details/52186375

http://blog.csdn.net/dxuehui/article/details/44647861

 

1. Qt插件ros_qtc_plugin安裝

使用ros-industrialLevi-Armstrong201512月開發的一個 Qt插件ros_qtc_plugin,這個插件使得Qt"新建項目"和"新建文件"選項中出現ROS的相關選項,可以直接在Qt下創建、編譯、調 ROS項目,也可以直接在Qt項目中添加ROSpackageurdflaunch

 

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

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

sudo add-apt-repository ppa:levi-armstrong/ppa

sudo apt-get update && sudo apt-get install qt57creator-plugin-ros

若上述安裝運行正常,可略過下面步驟。

1)下載安裝Qt5.7.0

1)打開鏈接http://blog.csdn.net/u013453604/article/details/52186375,選擇國內的高速源下載。

2)下載下來的qt-opensource-linux-x64-5.7.0.run ,右鍵"屬性"——"權限"勾選"允許作為程序執行文件",再雙擊安裝。安裝路徑選擇/home/ubuntu/Qt5.7.0(其中ubuntu為系統名,根據實際情況更改),安裝后出現Qt5.7.0文件夾。

2)修改系統配置文件讓Qt啟動器選擇新版的Qt Creator

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

 

原始:

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

/usr/lib/x86_64-linux-gnu

更改為:

/home/ubuntu/Qt5.7.0/5.7/gcc_64/bin

/home/ubuntu/Qt5.7.0/5.7/gcc_64/lib

注意:/home/ubuntu為主文件夾絕對路徑,需根據實際系統名稱更改。

 

如果多個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,並修改所有的qtchooser/default.conf

 

3)運行Qt Creator配置腳本

下載腳本setup.sh (打開上述博客鏈接,並下載),把它放在主目錄/home/ubuntu下。

 

1)運行前需修改

 

Setup.sh中的 QMAKE_PATH需要修改:

原始:

 

QMAKE_PATH=/opt/qt57/bin/qmake

 

修改為:

 

QMAKE_PATH=/home/ubuntu/Qt5.7.0/5.7/gcc_64/bin/qmake

注意:/home/ubuntu為主文件夾絕對路徑,需根據實際系統名稱更改。

 

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

rm -f $HOME/Desktop/QtCreator.desktop

ln -s $DESKTOP_FILE $HOME/Desktop/QtCreator.desktop12

改成

rm -f $HOME/桌面/QtCreator.desktop

ln -s $DESKTOP_FILE $HOME/桌面/QtCreator.desktop12

在桌面生成一個名為QtCreator.desktop的快捷方式,用這個快捷方式打開Qt就可以正常使用ros_qtc_plugin插件。

2)打開終端運行

 

cd ~

bash setup.sh -u

運行完成無錯誤則安裝成功。

注意:

1)從github下載一個新版的Qt Creator源碼並重新編譯時間很長,建議運行翻牆軟件Lantern,以加快下載速度。

2bash setup.sh -u 命令前面不需要加sudo 否則編譯過程中新建的文件夾和桌面的Qt快捷方式都屬於root用戶,不用命令行你是無法修改和刪除。

運行上述命令時在/home/ubuntu下生成qtc_plugins文件夾,其中包含下載的qt-creatorros_qtc_plugin

3)上述博客中"國內訪問github網速太慢,從Qt官網下載Qt Creator 4.0.3的源碼放在qtc_plugins文件夾下"運行的方式驗證后發現問題,運行bash setup.sh -u后出現很多錯誤,不建議使用。

4)出現錯誤

如果提示"fatal error: qtermwidget5/qtermwidget.h: No such file or directory",則需要到:http://github.com/lxde/qtermwidget 下載qtermwidget-master,並安裝。

安裝qtermwidget-master需要升級cmake,網絡上升級cmake的方案主要3種:

1. (推薦)下載安裝

sudo apt-get install build-essential

wget http://www.cmake.org/files/v3.7/cmake-3.7.1.tar.gz

tar xf cmake-3.7.1.tar.gz

cd cmake-3.7.1

./configure

make

sudo make install

2. 使用PPA

sudo apt-get install software-properties-common

sudo add-apt-repository ppa:george-edison55/cmake-3.x

sudo apt-get update

    若沒有安裝cmake,則

sudo apt-get instal cmake

    若已經安裝了cmake,則

sudo apt-get upgrade

這樣做新版本cmake有些鏈接找不到導致無法安裝。

3. 卸載

apt-get autoremove cmake

千萬不能這樣做,否則你的ROS中好多組件跟着一起卸載了。

 

采用方案1安裝完成后運行

cmake --version

可能出現CMake Error: Could not find CMAKE_ROOT !!!

這是因為cmake的文件夾會變化,變為:/usr/local/share/,所以需要輸入

export CMAKE_ROOT=/usr/local/share/

查看:echo $CMAKE_ROOT

這時就可以編譯qtermwidget

解壓qtermwidget-master.zip之后,首先修改CMakeLists.txt,找到

include_directories(

"${CMAKE_SOURCE_DIR}/lib"

"${CMAKE_BINARY_DIR}/lib"

"${CMAKE_BINARY_DIR}"

)

add_definitions(-Wall)在其下面添加:

set(CMAKE_PREFIX_PATH "/home/leon/Qt5.7.0/5.7/gcc_64/"),注意修改路徑。保存,並運行

cmake .

make

sudo make install

如果不添加會出現錯誤

CMake Warning at CMakeLists.txt:5 (FIND_PACKAGE):

By not providing "FindQt5Widgets.cmake" in CMAKE_MODULE_PATH this project

has asked CMake to find a package configuration file provided by

"Qt5Widgets", but CMake did not find one.

Could not find a package configuration file provided by "Qt5Widgets" with

any of the following names:

Qt5WidgetsConfig.cmake

qt5widgets-config.cmake

Add the installation prefix of "Qt5Widgets" to CMAKE_PREFIX_PATH or set

"Qt5Widgets_DIR" to a directory containing one of the above files. If

"Qt5Widgets" provides a separate development package or SDK, be sure it has

been installed.

運行完成后,在運行:

cd ~

bash setup.sh -u

運行無錯誤后,雙擊桌面qt圖標,如果出現libqtermwidget5.so.0: cannot open shared object file: No such file or directory。這個文件在/usr/local/lib/文件下,所以輸入

export LD_LIBRARY_PATH=/where/you/install/lib:$LD_LIBRARY_PATH

sudo ldconfig

可以解決。

 

 

 

2. 使用ros_qtc_plugin插件新建項目

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

1)新建項目

1) "File"—"New File or Project",選擇"Import Project"—"Import ROS Workspace"—"choose"

2) Namecatkin工作空間文件夾名字相同(也可以不同)名為catkin_new,然后選擇"Browse"——"創建文件夾"(點擊右上角帶"+"文件夾),創建一個名為catkin_new的文件夾,如下圖,按回車,再選擇"Choose"

3)出現一個對話框,詢問新建的工作空間未被初始化,是否執行初始化,選擇"yes"
這里相當於執行一次catkin_init_workspace命令,使工作空間初始化.

4) 點擊下方的"Generate Project File",再點擊"Next"

5) "Project Management"步驟可以配置版本控制系統,將"Add to version control"中的"Git"修改為"<None>",然后執行"Finish"

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

(2) 創建package

1) catkin_new下面的src上右鍵單擊,選擇"Add New...",如下圖

2) 然后選擇"ROS"——"package"——"choose"

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

4) "Project Management"步驟可以配置版本控制系統,將"Add to version control"中的"Git"修改為"<None>",然后執行"Finish"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(3) 添加新的節點

 

1)目前這個package還是空的,沒有任何節點。在test1src文件夾上右鍵單擊,選擇"Add New...".

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

3) 節點名稱寫為"node1",則生成一個名為node1.cpp的源文件

4) "Project Management"步驟可以配置版本控制系統,將"Add to version control"中的"Git"修改為"<None>",然后執行"Finish"

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

4. 編譯節點

1) 修改CMakeLists.txt

為了編譯成可執行文件,還需要編輯test1makefile。為test1CMakeLists.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文件夾下找不到可執行文件,導致后面選擇運行節點的時候不會出現這個節點

 

2) 編譯

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

 

5. 運行節點

 

1) 運行節點需要修改運行配置,點擊左側欄的"Projects",在"Build Settings"頁的"Edit build configuration"一欄選擇"Default";

2) 在下圖所示光標處 點擊切換到"Run"頁,可以看到一個"Add Run Step"的選項,點擊出現一個"ROS Step"配置項,可以通過下拉菜單選擇packagetarget(就是該package下的節點),下拉菜單可以通過鍵入首字母初步定位到你要找的 package位置
"Add Run Step"
的選項其實也是一個下拉菜單,可以選擇"Add Launch Step"的選項運行launch文件 .

3)點擊Qt左下角的小電腦圖標,選擇"Default"的構建配置,再點擊Qt左下角的綠色三角形即可運行"運行設置"頁下面配置好的所有Step

 

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

 

6. 頭文件包含

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

 

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

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

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

7. 修改Qt Creator快捷方式

 

使從快捷方式啟動Qt Creator的同時加載ROS環境變量,否則通過Cmakelists.txt導入的ROS工程運行時出現CMAKE_PREFIT_PATH找不到的錯誤,如下:

/home/ubuntu/catkin_new/src/ros_tutorials/roscpp_tutorials/CMakeLists.txt:5: error: By not providing "Findcatkin.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "catkin", but CMake did not find one.

打開terminal,輸入下面的命令:

gedit /home/leon/.local/share/applications/Qt-Creator-ros.desktop

 

修改 Exec 變量一行,在中間添加 bash -i -c 即改為 Exec=bash -i -c /home/leon/qtc_plugins/qt-creator-build/bin/qtcreator ,注意修改路徑,保存並退出。添加 bash -i -c 是為了在通過快捷方式啟動Qt Creator的同時加載ROS環境變量(ROS環境變量加載腳本配置在 ~/.bashrc 文件內)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM