ROS发布和订阅节点内容的C++程序模板,不用再一个个敲代码了。。。

ROS发布和订阅节点内容的C++程序模板,不用再一个个敲代码了。。。

在这之前默认大家已经会编译包、编译节点和调用了哦

节点发布

#include "ros/ros.h"	//包含了使用ROS节点的必要文件
#include "std_msgs/String.h"	//包含了使用的数据类型,自己可以替换哦
#include <sstream>
 
int main(int argc, char **argv)
{
	ros::init(argc, argv, "node_a");	
    //初始化ROS,节点名命名为node_a,节点名必须保持唯一

	ros::NodeHandle n;	//实例化节点, 节点进程句柄

	ros::Publisher pub = n.advertise<std_msgs::String>("str_message", 1000);	
    //告诉系统要发布话题了,话题名为“str_message”,类型为std_msgs::String,缓冲队列为1000。

    ros::Rate loop_rate(10);	//设置发送数据的频率为10Hz

    //ros::ok()返回false会停止运行,进程终止。
	while(ros::ok())
	{
		std_msgs::String msg;

		std::stringstream ss;

		ss<<"Hello World";

		msg.data = ss.str();

		ROS_INFO("node_a is publishing %s", msg.data.c_str());

		pub.publish(msg);	//向话题“str_message”发布消息

		ros::spinOnce();	//不是必须,若程序中订阅话题则必须,否则回调函数不起作用。

		loop_rate.sleep();	//按前面设置的10Hz频率将程序挂起
	}
 
	return 0;
}

订阅节点

#include "ros/ros.h"
#include "std_msgs/String.h"

//话题回调函数
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
	ROS_INFO("node_b is receiving [%s]", msg->data.c_str());
}
 
 
int main(int argc, char **argv)
{
	ros::init(argc, argv, "node_b");	//初始化ROS,节点命名为node_b,节点名必须唯一。

	ros::NodeHandle n;	//节点句柄实例化

	ros::Subscriber sub = n.subscribe("str_message", 1000, chatterCallback);	
    /*向话题“str_message”订阅,一旦发布节点(node_a)在该话题上发布消息,本节点就会调用 
    chatterCallbck函数。*/
 
	ros::spin();	//程序进入循环,直到ros::ok()返回false,进程结束。
 
	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值