如何使用Qt插件在Qt中进行ROS开发

如果想快速安装,就直接到第5部分,apt-get方式安装

一、前言

本文介绍一种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>
  • 1

这样就可以使得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
  • 9
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值