ROS基础---ros通信、ros发布者publisher、publisher.cpp、Talker.cpp

创建ros发布者

该篇为发布者Talker.cpp后面文章会有Listener.cpp对应代码,直接与该篇相连
本人是理科生,做这文档也是为了以后生活中害怕忘记而发布的,并且希望能帮到大家,发布的越多,入坑起来的快。入坑可难受了,天天抠头发。
注:有点详细,免得大家抠头发,阅读可以直接看代码。


我的代码可以不用订阅者Subscriber也可以使用,记得使用前要在终端打开roscore,还有代码的编译catkin_make


配套代码连接区:
配套订阅者Listener
配套CMakeLists.txt设置

详细解读版

#include <sstream>
#include "ros/ros.h"
#include "std_msgs/String.h"

int main(int argc, char **argv)
{
	//初始化节点,前面两个参数ros默认可以不管,直接背
	//第三个参数是节点名字,建议和文件名一样,这样出现节点名相同时好排查
	//因为在ros节点名字不能出现两个及以上的节点名相同
	ros::init(argc, argv, "Talker");

	//创建节点句柄,ros默认可以不管,直接背
	ros::NodeHandle n;

	//向Master注册一个Publisher(P为大写),并通过TalkMsg传播方式发布String类型的信息,在订阅端通过TalkMsg接收该文件发送的信息
	//缓冲队列大小为1000
	ros::Publisher TalkMsg_pub = n.advertise<std_msgs::String>("TalkMsg", 1000);

	//设置一个调用时间时间,每调用一次( 1/5=0.2s )
	ros::Rate work_rate(5);

	//初始一个计数的单位,这个可以不要设置的,无影响
	int count = 0;

	//进入while判断,只要该ros节点无异常就是一直执行下去
	while (ros::ok())
	{
		count+=1;

		//将msg定义为String类型,方便打包发送
		std_msgs::String msg;

		//将AllMsgstringstream类型,方便数据组合
		std::stringstream AllMsg;

		//将我已成功发送第n信息装入AllMsg中
		AllMsg << "to" <<  count <<"message"<<count*count;

		//将AllMsg中的字符串数据存储在msg在
		msg.data = AllMsg.str();

		//这条代码可以不要,实现的功能是在该节点终端打印除发送消息
		ROS_INFO("%s", msg.data.c_str());

		//发布封装好的消息
		TalkMsg_pub.publish(msg);

		//回调函数ros默认背下来就好了
		ros::spinOnce();

		//睡眠等待函数,调用一次,休息0.2s
		work_rate.sleep();
	}
	return 0;
}

精简版

#include <sstream>
#include "ros/ros.h"
#include "std_msgs/String.h"
int main(int argc, char **argv)
{
	
	ros::init(argc, argv, "Talker");
	ros::NodeHandle n;
	ros::Publisher TalkMsg_pub = n.advertise<std_msgs::String>("TalkMsg", 1000);
	
	ros::Rate work_rate(5);
	int count = 0;
	while (ros::ok())
	{
		count+=1;
		std_msgs::String msg;
		std::stringstream AllMsg;
		AllMsg << "to" <<  count <<"message"<<count*count;
		msg.data = AllMsg.str();

		
		ROS_INFO("%s", msg.data.c_str());
		TalkMsg_pub.publish(msg);

		
		ros::spinOnce();
		work_rate.sleep();
	}
	return 0;
}

运行结果
运行结果

发布了19 篇原创文章 · 获赞 3 · 访问量 225

猜你喜欢

转载自blog.csdn.net/weixin_44692299/article/details/104261804