环境:Ubuntu16.04+ROS Kinetic
2018.8更新:经测试在安装ros_qtc_plugin时,会同时安装Qt5.9,因此可以直接安装ros_qtc_plugin,然后进行第一步的(5)进行配置,而不需要额外安装Qt。
2018.9更新:修改ros工作空间的导入方式
目录
一、安装Qt5.10.1
二、配置ros_qtc_plugin
三、安装配置ros-kinetic-qt-ros
四、配置qt5版本
下载链接:http://download.qt.io/archive/qt/
(1)选择qt-opensource-linux-x64-5.10.1.run下载。
(2)前期准备,安装GNU开发工具集和OpenGL开发库。
sudo apt-get install build-essential libgl1-mesa-dev libevent-pthreads-2.0.5 doxygen xorg-dev
(3)打开终端,cd到qt-opensource-linux-x64-5.10.1.run的路径下,并输入下面命令安装,可根据版本不同修改命令:
chmod+x qt-opensource-linux-x64-5.10.1.run
sudo ./qt-opensource-linux-x64-5.10.1.run
(4)按提示安装,选上需求项。
(5)修改系统配置文件,选择新版Qt Creator
sudo gedit /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf
修改内容如下,根据自己安装的qt路径进行修改,如果文件空白,可以直接添加。
/opt/Qt5.10.1/5.10/gcc_64/bin
/opt/Qt5.10.1/5.10/gcc_64/lib
(6)修改Qt启动器
找到qtcreater的快捷方式并找到其路径,打开终端,cd到该路径下并用gedit打开快捷方式,在绝对路径前增加内容:bash -i -c。这步必须完成,否则无法编译ROS工程。
图标路径(通常)
/usr/share/applications
修改前
Exec=/opt/qt59/bin/qtcreator %F
修改后
Exec=bash -i -c /opt/qt59/bin/qtcreator %F
(1)下载安装ros_qtc_plugin
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
安装成功后,在新建项目的其他项目中可以看到ROS Workspace(注意Qt的版本要求最低为Qt 5.5.0)
修改构建套件,新建套件并配置为自己的套件,同时删除CMake Configuration里的 CMAKE_PREFIX_PATH,防止覆盖系统中与其同名的值,完成设置后需将新建的套件设置为默认套件。
删除内容:
CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
(2)新建工程
注意:不建议直接采用qt creator创建工作空间,容易产生无法导入所有文件的情况
1、qt creator中选择其他项目中的ROS Workspace来新建工作空间。
2、新建工作空间为空,可以在src目录下选择新建文件,创建包(注意:需要在Catkin里填写依赖包)。
3、在新建功能包中可以通过添加新文件创建节点。
(3)导入工程
手段二为常用导入手段,较手段一简单,但经验证无法导入所有文件,造成在程序编写中出现问题。因此建议采用手段一。
手段一(推荐)
1、qt creator中选择其他项目中的ROS Workspace来新建工作空间。
2、工作空间的名字与需要导入的工作空间同名,然后选择需要导入工作空间的路径。
3、进入 Projects,修改Build设置,删除默认Build Steps和Clean Steps,然后新建自定义steps,填写内容参考如下。选择bulid文件目标下该功能包的目录。
4、修改Run设置,新建自定义Executable,选择执行目录和执行文件,根据需要执行的节点选择对应执行文件。
手段二(不推荐)
打开终端,cd到工作空间的src目录下,运行下面命令,修改CMakeList.txt状态。
cd ~/catkin_ws/src
ls -l # Take note of the actual symlink target
sed -i '' CMakeLists.txt
ls -l # The symlink should have gone away
qt creator中选择打开文件,选择CMakeList.txt即可导入。
ROS自带功能包可以直接创建带有Qt界面的package,方法为通过catkin_create_qt_pkg命令创建,然后导入Qt中进一步修改为适合自己的GUI节点。
安装命令:
sudo apt-get install ros-kinetic-qt-ros
功能包创建命令:
cd qt_gui_ws/src/
catkin_create_qt_pkg gui_node
补充:修复qtcreator无法输入中文问题
安装fcitx
sudo apt-get install fcitx-libs-qt fcitx-libs-qt5
获取libfcitxplatforminputcontextplugin.so并移动到qt目录下platforminputcontexts中
#获取
sudo find / -name "libfcitxplatforminputcontextplugin.so"
cp -a ~/
chmod +x ~/libfcitxplatforminputcontextplugin.so
#移动
cp libfcitxplatforminputcontextplugin.so /opt/qt59/plugins/platforminputcontexts
通过catkin_create_qt_pkg命令创建的功能包默认采用qt4版本,但后续开发需要改用qt5的话,或者需要整合rviz(kinetic版本之后的rviz基于qt5版本),只需要修改CMakeList.txt文件即可。
(1)删除qt4配置信息
##############################################################################
# Qt Environment
##############################################################################
# this comes from qt_build's qt-ros.cmake which is automatically
# included via the dependency call in package.xml
rosbuild_prepare_qt4(QtCore QtGui) # Add the appropriate components to the component list here
##############################################################################
# Sections
##############################################################################
# ${CMAKE_CURRENT_SOURCE_DIR}:/home/robot/ros_workspace/robot_ws/src/robot_gui
file(GLOB QT_FORMS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ui/*.ui)
file(GLOB QT_RESOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} resources/*.qrc)
file(GLOB_RECURSE QT_MOC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS include/robot_gui/*.hpp)
QT4_ADD_RESOURCES(QT_RESOURCES_CPP ${QT_RESOURCES})
QT4_WRAP_UI(QT_FORMS_HPP ${QT_FORMS})
QT4_WRAP_CPP(QT_MOC_HPP ${QT_MOC})
(2)添加qt5配置信息,并修改kit为Qt5版本
##############################################################################
# Qt Environment
##############################################################################
## This setting causes Qt's "MOC" generation to happen automatically.
## CMAKE_AUTOMOC: pre build
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
# this comes from qt_build's qt-ros.cmake which is automatically
# included via the dependency call in package.xml
find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${Qt5Core_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS})
##############################################################################
# Sections
##############################################################################
file(GLOB QT_FORMS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ui/*.ui)
file(GLOB QT_RESOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} resources/*.qrc)
file(GLOB_RECURSE QT_MOC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS include/robot_gui/*.hpp)
QT5_WRAP_UI(QT_FORMS_HPP ${QT_FORMS})
QT5_ADD_RESOURCES(QT_RESOURCES_CPP ${QT_RESOURCES})
QT5_WRAP_CPP(QT_MOC_HPP ${QT_MOC})
(3)给执行文件添加依赖
target_link_libraries(node ${QT_LIBRARIES} ${catkin_LIBRARIES} Qt5::Widgets)
(4)修改kit为qt5
参考:
https://github.com/Levi-Armstrong/ros_qtc_plugins/wiki/Setup-Qt-Creator-for-ROS#section1.6(最为详细)
https://www.ncnynl.com/archives/201701/1277.html
https://blog.csdn.net/u013453604/article/details/52186375
https://ros-industrial.github.io/ros_qtc_plugin/_source/How-to-Install-Users.html
https://blog.csdn.net/wyy626562203/article/details/79300593