【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在消息传输(发布、订阅)中很容易协调,应该在多传感器数据的时候十分好用?期待。

转载于:https://www.cnblogs.com/dzqiu/p/9519485.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt 是一个跨平台的应用程序开发框架,ROS(机器人操作系统)是一个用于开发机器人软件的软件框架。订阅 ROS 话题是指使用 Qt 框架编写的应用程序可以获取 ROS发布的话题数据。 在 Qt订阅 ROS 话题需要借助 ROS Qt 包提供的功能。首先,我们需要在 CMakeLists.txt 文件中添加对 Qt 模块的依赖。然后,在应用程序代码中,我们需要包含 Qt 的头文件,并在主函数中初始化 ROS 节点。 接下来,我们可以使用 ROS Qt 包提供的 QROSNode 类创建一个 ROS 节点对象。通过调用节点对象的 subscribe() 函数,我们可以订阅指定的 ROS 话题,并设置回调函数来处理接收到的数据。回调函数会在有新数据发布到话题时自动被调用。 在回调函数中,我们可以根据需要处理接收到的数据,并更新 Qt 应用程序的界面或执行其他操作。例如,我们可以将接收到的数据显示在 Qt 的文本框或标签中,或者根据接收到的数据控制机器人的运动。 需要注意的是,为了在 Qt 应用程序订阅 ROS 话题,我们需要确保 ROS 环境已经正确地设置,包括正确配置 ROS_MASTER_URI 和 ROS_IP。 总之,借助 ROS Qt 包,我们可以很方便地在 Qt 应用程序订阅 ROS 话题,从而实现对机器人软件的控制和监测。 ### 回答2: 在ROS中,我们可以使用Qt订阅ROS话题,以便接收和处理来自其他节点发布消息。 首先,我们需要在Qt应用程序中包含ROSrosbridge库,这样才能与ROS系统进行通信。接下来,我们需要创建一个ROS节点,并使用ros::init()函数来初始化ROS。然后,我们可以创建一个Qt Widget界面,用于显示接收到的消息。 接下来,我们需要定义一个ROS话题订阅者,用于接收特定话题的消息。在Qt中,我们可以使用QObject类的子类来实现订阅者。在订阅者类的构造函数中,我们可以使用ros::NodeHandle对象来订阅特定的ROS话题,并指定回调函数来处理接收到的消息。 在回调函数中,我们可以将接收到的消息转换成我们需要的数据类型,并进行处理。例如,如果我们接收到的消息是一个包含字符串数据的std_msgs::String消息,我们可以使用QString来存储和显示该字符串。 最后,在我们的Qt Widget界面中,我们可以使用Qt信号和槽机制来将接收到的消息发送到需要显示的部件。例如,我们可以将接收到的消息通过一个QLabel部件来显示在界面上。 需要注意的是,在订阅ROS话题之前,我们需要确保ROS系统已经启动,并且所需的ROS节点和话题已经被创建。 通过上述步骤,我们可以使用Qt订阅ROS话题,并实时接收、处理和显示来自其他节点发布消息。 ### 回答3: Qt是一个流行的跨平台应用程序开发框架,它可以用于开发各种类型的应用程序,包括机器人的控制和监控系统。ROS(Robot Operating System)是一个用于机器人软件开发的开源框架,它提供了一系列的工具、库和通信机制,可以方便地实现机器人的感知、控制和协作。 在Qt订阅ROS话题可以通过使用ROSQt增加库(roscpp库)来实现。首先,需要在Qt项目中添加roscpp库的依赖关系。然后,在Qt应用程序中引用roscpp库,并使用roscpp提供的函数来订阅ROS话题。 订阅ROS话题的过程如下: 1. 创建一个Qt的类,用于处理从ROS话题接收到的数据。 2. 在该类的构造函数中,初始化ROS节点,并创建一个订阅器对象。传入订阅器的参数包括订阅的话题名称、订阅消息的类型、回调函数等。 3. 编写回调函数,用于接收消息后的处理操作。回调函数的参数与订阅消息类型相匹配。 4. 在订阅器对象中注册回调函数,以便在接收到新消息时调用。 5. 启动ROS节点的事件循环,以便接收消息并调用相应的回调函数。 通过这样的方式,可以在Qt应用程序中实时地订阅ROS话题,并处理接收到的数据。在接收到新消息时,回调函数会被调用,可以在其中更新界面、执行控制操作或进行其他处理。这样,Qt应用程序就与ROS框架进行了集成,可以实现更方便、灵活的机器人软件开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值