定义一个发布话题的节点talker, 发布到话题chatter,消息类型字符串。其话题的订阅者代码链接:ROS 订阅话题C++代码详解
#include "ros/ros.h" //包含ros的头文件
#include "std_msgs/String.h" //包含标准信息的字符串消息头文件
#include <sstream>//c++字符流的一个头文件
int main(int argc, char **argv) //标准格式,就是这样写的
{
//初始化一个ros节点,节点的名称是talker
ros::init(argc, argv, "talker");
//创建一个句柄,方便调用ros的API
ros::NodeHandle n;
//创建了一个发布器,发布器的名称是chatter_pub, 发布的消息类型是std_msgs的字符串类型
//并且发布到chatter这个话题上, 发布器的缓存是1000
ros::Publisher chatter_pub = n.advertise<std_msgs::String> ("chatter", 1000);
//用来设定发送的频率,这里设定10hz,一秒钟发送10次
ros::Rate loop_rate(10);
//定义一个用来记数的变量
int count =0;
// 进入循环体,这里的ok是检测状态的,比方按下ctrl+c,他就会返回false,循环停止
while(ros::ok())
{
//声明一个变量,就是消息本身
std_msgs::String msg;
//声明一个c++里边的标准输出流
std:: stringstream ss;
//给这个输出流赋值
ss <<"hello world!" <<count;
//字符串赋值
msg.data= ss.str();
//打印这个消息
ROS_INFO("%s", msg.data.c_str());
//调用发布器把消息发布出去
chatter_pub.publish(msg);
//调用回调函数
ros::spinOnce();
//调用频率控制函数
loop_rate.sleep();
++count;
}
return 0;
}