參考的博客:
http://blog.csdn.net/u013453604/article/details/52186375
http://blog.csdn.net/dxuehui/article/details/44647861
1. Qt插件ros_qtc_plugin安裝
使用ros-industrial的Levi-Armstrong在2015年12月開發的一個 Qt插件ros_qtc_plugin,這個插件使得Qt"新建項目"和"新建文件"選項中出現ROS的相關選項,可以直接在Qt下創建、編譯、調 試ROS項目,也可以直接在Qt項目中添加ROS的package、urdf、launch。
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,以加快下載速度。
2)bash setup.sh -u 命令前面不需要加sudo 否則編譯過程中新建的文件夾和桌面的Qt快捷方式都屬於root用戶,不用命令行你是無法修改和刪除。
運行上述命令時在/home/ubuntu下生成qtc_plugins文件夾,其中包含下載的qt-creator和ros_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
可以解決。
使用插件的"新建項目"中的"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) Name和catkin工作空間文件夾名字相同(也可以不同)名為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是空的,如下圖
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"。
1)目前這個package還是空的,沒有任何節點。在test1的src文件夾上右鍵單擊,選擇"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
為了編譯成可執行文件,還需要編輯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文件夾下找不到可執行文件,導致后面選擇運行節點的時候不會出現這個節點
2) 編譯
修改完CMakeLists.txt之后點擊Qt左下角的錘子圖標"構建項目catkin_new",點擊底邊欄的"4 編譯輸出"可以看到編譯結果,如下圖:
1) 運行節點需要修改運行配置,點擊左側欄的"Projects",在"Build Settings"頁的"Edit build configuration"一欄選擇"Default";
2) 在下圖所示光標處 點擊切換到"Run"頁,可以看到一個"Add Run Step"的選項,點擊出現一個"ROS Step"配置項,可以通過下拉菜單選擇package和target(就是該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"窗口
用插件創建或導入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 文件內)。