发布方(C++):
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
/*
需求: 实现基本的话题通信,一方发布数据,一方接收数据,
实现的关键点:
1.发送方
2.接收方
3.数据(此处为普通文本)
PS: 二者需要设置相同的话题
消息发布方:
循环发布信息:Hello... 后缀数字编号
实现流程:
1.包含头文件
2.初始化 ROS 节点:命名(唯一)
3.实例化 ROS 句柄
4.实例化 发布者 对象
5.组织被发布的数据,并编写逻辑发布数据
*/
int main(int argc, char *argv[])
{
// 解决乱码问题
setlocale(LC_ALL,"");
// 2.初始化ROS节点,这里是节点名
ros::init(argc,argv,"besproma_pub_node");
// 3.实例化 ROS 句柄
ros::NodeHandle nh;
// 4.实例化发布者对象,参数是话题名,buffer大小
ros::Publisher pub = nh.advertise<std_msgs::String>("besproma_topic",10);
// 以10HZ的平率发布数据
ros::Rate rate(10);
//设置编号,让数据发布时带上编号
int count = 0;
// 加入休眠 ros::Duration(3.0).sleep(); 延迟第一条数据的发送,防止前几条数据的丢失
ros::Duration(3.0).sleep();
// 5.组织被发布的数据,并编写逻辑发布数据,程序会一直在这里循环
std_msgs::String msg;
while(ros::ok()){
// 发布的内容和编号拼接
count++;
std::stringstream ss;
ss<<"hello ..."<<count;
msg.data = ss.str();
// msg.data = "hello";s
pub.publish(msg);
ROS_INFO("发布的数据是: %s",ss.str().c_str());
rate.sleep();
}
return 0;
}
接收方(C++):
#include "ros/ros.h"
#include "sstream"
#include "std_msgs/String.h"
/*
需求: 实现基本的话题通信,一方发布数据,一方接收数据,
实现的关键点:
1.发送方
2.接收方
3.数据(此处为普通文本)
消息订阅方:
订阅话题并打印接收到的消息
实现流程:
1.包含头文件
2.初始化 ROS 节点:命名(唯一)
3.实例化 ROS 句柄
4.实例化 订阅者 对象
5.处理订阅的消息(回调函数)
6.设置循环调用回调函数
*/
// 回调函数
vo