【ROS系列】使用QT编写ROS订阅、发布程序
Linux下一直使用QT进行开发,支持cmake使得很容易导入其他工程。学习ROS过程中,很多函数名称难记,使用QT不仅可以提示补全,还为了以后开发GUI方便吧。
1、安装ros_qtc_plugin
首先安装Qt,Qt我安装的是5.5.1版本,直接下载run文件安装即可。同样,ros_qtc_plugin我也是直接下载run运行安装。安装完成后在Terminal可以见到有qtcreator-ros直接运行即可。
2、ROS工程建立
2.1、新建工作区,点击New Project 选择Other Project -> ROS Workspace:

2.2、填写工作区名称,选择路径。选择路径时建议新建同名文件夹,工作区建立时没有自动新建文件夹:


2.3、新建package:左侧工程栏右击src,点击Add New,选择ROS -> Package

2.4、新建包的名字为hellowrld,配置包属性,一般需要依赖roscpp,这里我们写一对简单的发布、订阅程序,所以同时依赖roscpp message_generation std_msgs rospy,故配置如下:

2.5、现在我们来建立发布者节点文件,右键点击src -> Add New ->ROS ->Basic Publisher Node 命名为pub1.cpp
2.6、建立订阅者节点文件,右键点击src -> Add New ->ROS ->Basic Subscriber Node 命名为sub1.cpp。经过两步我们可以看到添加的两个文件,已经有写好的模板程序:

这时,我们看到Qt上面报错:找不到头文件,而且编辑时也没有提示补全!因为Qtcreator-ros中使用cmake来进行管理文件,在导入文件时没有在添加文件路劲进去cmakeList.txt中去。所以接下来做的就是添加关联!
2.7、添加生成可执行文件,并链接:在helloworld下的CMakeList.txt中添加下面几行:(注:add_executable尽量放在最后,不然生成的可执行文件会在build文件夹中而不是再devel中,最后导致rosrun报错找不到可执行文件(复制过去也行),血淋淋的教训):
add_executable(pub1 pub1.cpp)
target_link_libraries(pub1 ${catkin_LIBRARIES})
add_executable(sub1 sub1.cpp)
target_link_libraries(sub1 ${catkin_LIBRARIES})
2.8、右击blogbook,点击build,成功后重新打开cpp文件就不会再找不到头文件了。同时,工程也编译完毕!
3、执行文件
Qt内部可以添加run使得ROS节点很方便就能执行
3.1、 添加run:点击最右边工具栏Project,再Build & Run中选择run, Add Run Step,选择package:helloworld, Target:pub1或者sub1(添加完一个添加另一个)

3.2、不要忘记先打开一个终端执行roscore,然后点击右边绿色三角或者工具栏中run运行。这时可能会发现没有运行结果??点击一栏:1、issues,2、Search...,3、Applic...点击三角形,选择08 ROS Terminal勾上可视即可。另外,可在发布者Terminal使用ctrl+c中断再运行,再观看订阅者Terminal!

结语:
从这个示例很容易发现ROS在消息传输(发布、订阅)中很容易协调,应该在多传感器数据的时候十分好用?期待。
【ROS系列】使用QT编写ROS订阅、发布程序的更多相关文章
- SLAM+语音机器人DIY系列:(二)ROS入门——4.如何编写ROS的第一个程序hello_world
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- ROS学习手记 - 8 编写ROS的Publisher and Subscriber
上一节我们完成了 message & srv 文件的创建和加入编译,这次我们要玩简单的Publisher 和 Subscriber 要玩 Publisher 和 Subscriber, 需要具 ...
- Qt for Mac:发布程序(widgets和quick2)
当你用Qt开发好程序后,是不是会很期待将你的成果分享给你的小伙伴 可是Qt的库并不是OS X标配的,所以我们要自己去复制库到app包里,才可以让app在其他未安装Qt的电脑上运行. 比较幸运的是,Qt ...
- Qt之新手打包发布程序
工具:电脑必备.QT下的windeployqt Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无 ...
- [SpingBoot guides系列翻译]Redis的消息订阅发布
Redis的消息 部分参考链接 原文 CountDownLatch 概述 目的 这节讲的是用Redis来实现消息的发布和订阅,这里会使用Spring Data Redis来完成. 这里会用到两个东西, ...
- Node.js系列文章:编写自己的命令行界面程序(CLI)
CLI的全称是Command-line Interface(命令行界面),即在命令行接受用户的键盘输入并作出响应和执行的程序. 在Node.js中,全局安装的包一般都具有命令行界面的功能,例如我们用于 ...
- Qt Package Project 打包发布程序
在Qt项目开发完成后,我们想将项目打包发布成一个可执行文件,需要做如下步骤: 首先,将项目中的release文件中的可执行文件拷到一个新建的文件夹中,例如project.exe,用Qt自带的生成必备的 ...
- 利用Qt自带工具发布程序
Qt官方开发环境生成的exe发布方式--使用windeployqt 从开始菜单-->Qt 5.4.0-->5.4-->MinGW 4.9 (32-bit)-->Qt 5.4 f ...
- QT打开ROS工作空间时遇到的问题和解决方法
之前一直觉得不用IDE写程序看着好像我很能的样子. 其实就相当于工业时代我还钻木取火并且告诉别人你们用打火机根本不知道火被点燃的过程是怎样的. 因为这个技能并非人人都会,就可以拿出去到处臭屁 好了, ...
随机推荐
- 20155235 2016-2017-2 《Java程序设计》第7周学习总结
20155235 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十二章 Lambda 认识Lambda语法 Lambda语法概览 Lambda表达式与函数 ...
- Intelj IDEA的pom.xml显示错误can not reconnect
从GitHub上边down下来的开源项目,报错莫名其妙,后来发现是跟本地hosts文件有关系 hosts文件加上 127.0.0.1 localhost 然后pom文件reload一下就
- 第五章:动词(Les verbes)
★及物动词(Les verbes transitifs) 主语发出的动作作用于人或物,它又分为两类,直接及物动词和间接及物动词. ()直接及物动词:动词直接带宾语,不需要介词引导.如: ...
- React 组件的生命周期API和事件处理
一.简单记录React的组件的简洁的生命周期API: A:实例化期: 一个实例第一次被创建时所调用的API与其它后续实例被创建时所调用的API略有不同. 实例第一次被创建时会调用getDefaultP ...
- java基础-day2
第02天 java基础知识 今日内容介绍 u Eclipse的安装.配置及使用 u 运算符 u 键盘录入 第1章 Eclipse开发工具 1.1 Eclipse概述和安装 Eclipse是一个I ...
- 切勿用普通for循环遍历LinkedList
ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...
- [H5-Compress-Image]利用canvas实现 javascript 图片压缩处理_基于requirejs模块化的代码实现
// 还存在有问题的代码,问题在于processFile()中// 问题:在ipone 5c 下,某些图片压缩处理后,上传到服务器生成的文件size为0,即是空白 ;define(['mod/tool ...
- OneDrive不能上了?DNS被污染,解决方法很简单
http://www.expreview.com/34434.html 除了LINE以外,最近微软的OneDrive云存储服务也出现访问故障,不过@月光博客 表示它只是受到DNS污染,被解析为无法访问 ...
- 单元测试工具Numega BoundsChecker
1 前言 我在本文中详细介绍了测试工具NuMega Devpartner(以下简称NuMega)的使用方法. NuMega是一个动态测试工具,主要应用于白盒测试.该工具的特点是学习简单.使用方便.功能 ...
- Python学习-4.Python的模块加载(二)
1.部分函数加载 from SameFolder import printSameFolder printSameFolder() 该代码指从SameFolder.py中加载printSameFold ...