官方示例
#include "ros/ros.h"
#include "std_msgs/String.h"
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
ROS_INFO("I heard: [%s]", msg->data.c_str());
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "listener");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
ros::spin();
return 0;
}
个人输出Hokuyo urg-04lx 数据示例
#include "ros/ros.h"
#include "std_msgs/String.h"
#include "sensor_msgs/LaserScan.h"
//此处通过rostopic info得知所想要订阅节点的结构体Type,然后添加对应节点的头文件如上
using namespace std;
//C++
void chatterCallback(const sensor_msgs::LaserScan::ConstPtr& msg)
//此处sensor_msgs::LaserScan如上
{
ROS_INFO("I heard: [%f]", msg->angle_max);
cout << msg->angle_max <<endl;
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "listener");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("scan", 1000, chatterCallback);
//“订阅的节点名”
//1000是队列大小,以防我们处理消息的速度不够快,当缓存达到 1000 条消息后,再有新的消息到来就将开始丢弃先前接收的消息
//调用chatterCallback函数
ros::spin();
//ros::spin() 进入自循环,可以尽可能快的调用消息回调函数。如果没有消息到达,它不会占用很多 CPU,所以不用担心
return 0;
}