本例流程:
发布方代码实现
1.包含头文件
2.初始化ROS节点
3.创建节点句柄
4.创建发布者对象
5.编写发布逻辑并发送数据
本节任务:以 特定hz 频率发布消息,并且文本后添加编号
首先创建完功能包、依赖后,在src下新建.cpp文件或者新建scripts文件>.py。
还需要修改配置文件CMakeLists.txt。
代码如下:
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
/*
发布方实现
1.包含头文件
ROS中的文本类型-----》std_msgs/string.h
2.初始化ROS节点
3.创建节点句柄
4.创建发布者对象
5.编写发布逻辑并发送数据 本节任务:以 特定hz 频率发布消息,并且文本后添加编号
*/
int main(int argc, char *argv[])
{
//设置编码
setlocale(LC_ALL,"");
ros::init(argc,argv,"plumbing_pub");//初始化节点发布者对象
ros::NodeHandle nh;//创建节点句柄
ros::Publisher pub=nh.advertise <std_msgs::String>("topic",10);// 创建发布者对象,消息队列最多缓存10条
// Publisher advertise(const std::string& topic 话题 , uint32_t queue_size 消息长度 , bool latch = false)
std_msgs::String msg;//先创建被发布的消息msg
ros::Rate rate(0.8);//发布频率 内置的函数
int count=0;
while (ros::ok()) //编写循环,在循环中发布数据。意思是节点存在则while循环成立
{
count++;
//msg.data="hello";//消息是hello
std::stringstream ss;
ss << "hello 我是>"<< count;//实现字符串拼接数字
msg.data=ss.str();//可以将数据提取成字符串
pub.publish(msg);
//ROS_INFO("发布的数据是%s",ss.str().c_str);
ROS_INFO("发布的数据是:%s",ss.str().c_str());
rate.sleep();//类似延时函数
}
return 0;
}
效果如下: