1 前言
本文介紹一種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 14.04 LTS,ROS版本是indigo,Qt版本是Qt5.9。
2 安裝Qt和插件ros_qtc_plugin
插件要求Qt 5.5.0以上的版本,下載Qt 5.7.0可以使用apt-get方式安裝,Ubuntu14.04 安裝指令如下:
$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ 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 libqtermwidget57-0-dev
出現錯誤
下列軟件包有未滿足的依賴關系: qt57creator-plugin-ros : 依賴: libqtermwidget59-0 (>=0.6.1) 但是它將不會被安裝 E: 無法修正錯誤,因為您要求某些軟件包保持現狀,就是它們破壞了軟件包間的依賴關系。
解決辦法
$ sudo apt-get update
$ sudo apt install qt59creator
$ sudo apt-get install qt57creator-plugin-ro
然后可以通過win鍵搜素安裝的qt。
之后可以使用qt進行ROS的程序編寫與編譯。
3 使用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) 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"修改為"
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"修改為"
(3) 添加新的節點
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"。
5) 用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 編譯輸出"可以看到編譯結果,如下圖:
5 運行節點
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"窗口。
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 文件內)。
參考:
github ros-industrial/ros_qtc_plugin項目主頁