#C++实现话题发布与接收

#C++实现话题发布与接收

1、第一步依旧是进入工作空间里面的src,如果没有工作空间则新建,如果有就直接跳过。

lzw08@ubuntu:~$ cd ros_ws/src

新建工作空间方法如下图所示:
在这里插入图片描述

2、创建工作包

lzw08@ubuntu:~/ros_ws/src$ catkin_create_pkg topic roscpp rospy std_msgs

说明:同样,catkin_create_pkg是创建工作包的命令,“turtle”是工作包的名字,后面跟的都是工作包的依赖。
在这里插入图片描述

3、进入到工作包里面的src文件夹

lzw08@ubuntu:~/ros_ws/src$ cd topic/src

4、创建发布话题的.cpp文件:ptopic.cpp

说明:touch是创建文件(.cpp/.py等)的命令,gedit是打开文件(.cpp/.py/.txt等)的命令

lzw08@ubuntu:~/ros_ws/src/topic/src$ touch ptopic.cpp

打开.cpp文件并粘贴代码

lzw08@ubuntu:~/ros_ws/src/topic/src$ gedit ptopic.cpp 
#include <iostream>
#include <ros/ros.h>
#include "std_msgs/String.h"
using namespace std;

int main(int argc, char *argv[])
{
    string nodeName = "ptopic";
    string topicName = "topic";

    ros::init(argc, argv, nodeName);
    ros::NodeHandle node;

    const ros::Publisher &publisher = node.advertise<std_msgs::String>(topicName,1000);
    int index = 0;
    ros::Rate rate(1);
    while(ros::ok())
    {
	std_msgs::String msg;
	msg.data = "智能机器人实验室 XQ " + to_string(index);
	publisher.publish(msg);
	//ROS_INFO("发布的数据是:",msg.data);
	cout << msg.data << endl;
        rate.sleep();
	index++;
    }
    return 0;
}

5.创建话题订阅者的.cpp文件:stopic.cpp

lzw08@ubuntu:~/ros_ws/src/topic/src$ touch stopic.cpp

打开.cpp文件并粘贴代码

lzw08@ubuntu:~/ros_ws/src/topic/src$ gedit stopic.cpp
#include "ros/ros.h" 
#include <iostream>
#include "std_msgs/String.h" 

using namespace std; 

void topicCallback(const std_msgs::String::ConstPtr &msg) 
{
	cout <<"订阅的机器人是" +(*msg).data << endl;
}

int main(int argc, char **argv)
{
    string nodeName = "stopic";
    string topicName = "topic";

    ros::init(argc, argv, nodeName);
    ros::NodeHandle node;
    const ros::Subscriber &subscriber = node.subscribe(topicName, 1000, topicCallback);
    ros::spin();
    return 0;
}

6、回到上级目录更改编译规则

lzw08@ubuntu:~/ros_ws/src/topic/src$ cd ..
lzw08@ubuntu:~/ros_ws/src/topic$ gedit CMakeLists.txt

1)第5行的注释打开:
在这里插入图片描述
2)第136行注释打开,并改为下图:
在这里插入图片描述
因为写了两个.cpp 文件,所以将改完之后的136行复制一遍粘贴到137行并修改:
在这里插入图片描述
3)第149~151行的注释打开,并修改:
在这里插入图片描述
同样,因为写了两个.cpp 文件,所以将这三行复制一下,粘贴到第152行,并修改:
在这里插入图片描述

7、回到工作空间编译

lzw08@ubuntu:~/ros_ws/src/topic$ cd ~/ros_ws
lzw08@ubuntu:~/ros_ws$ catkin_make

在这里插入图片描述

8、编译完成后就可以运行了

1)同样,运行节点前要先将主节点(roscore)运行起来
打开一个新的终端

lzw08@ubuntu:~$ roscore

在这里插入图片描述
然后这个终端就可以放在一边不管了。

2)打开两个新的终端,分别运行ptopic.cpp和stopic.cpp
运行前都要进入到工作空间内,配置好环境,才能运行

lzw08@ubuntu:~$ cd ros_ws                     //进入工作空间
lzw08@ubuntu:~/ros_ws$ source devel/setup.bash       // 配置环境
lzw08@ubuntu:~/ros_ws$ rosrun topic ptopic      //运行ptopic.cpp

在这里插入图片描述

lzw08@ubuntu:~$ cd ros_ws
lzw08@ubuntu:~/ros_ws$ source devel/setup.bash
lzw08@ubuntu:~/ros_ws$ rosrun topic stopic

在这里插入图片描述

9、如果你先运行stopic后运行ptopic,会发现stopic运行之后没现象

在这里插入图片描述
其实,stopic已经运行起来了,不过它作为话题的订阅者,发布者还没发布话题,所以它订阅不到话题,也就显示不了内容了。

10、利用qt的可视化工具可以看到发布者、订阅者以及话题之间的关系

lzw08@ubuntu:~/ros_ws$ rosrun rqt_graph rqt_graph 

在这里插入图片描述

11、qt还有一个工具可以模拟发布者发布话题,此时只需运行stopic而无需运行ptopic

lzw08@ubuntu:~/ros_ws$ rosrun rqt_publisher rqt_publisher 

在这里插入图片描述
在这里插入图片描述
选择话题名,点击右边绿色的+号,然后勾选上即可
在这里插入图片描述
通过下拉箭头还可以自定义要发布的内容,上图我键入了111111

12、下课下课~

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值