一、 开发环境
ubuntu20.04
ros版本noetic
参考视频
https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?p=52&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=4cd1b6f268e2a29a11bea5d2568836ee
二、 创建两个功能包
//创建工作空间
工作空间目录中执行catkin_make
//创建两个功能包
工作空间中的src目录中执行catkin_create_pkg publisher roscpp std_msgs
工作空间中的src目录中执行catkin_create_pkg subscriber roscpp std_msgs
三、 编写发布者
main.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"#include <sstream>//发布者
int main(int argc,char *argv[])
{//中文支持setlocale(LC_ALL,"");//初始化ros节点//指定节点名称ros::init(argc,argv,"publisher");//创建ros节点句柄ros::NodeHandle n;//创建发布者对象ros::Publisher pub = n.advertise<std_msgs::String>("fang",10);//编写发布逻辑std_msgs::String msg;//发布频率ros::Rate rate(1);int count = 0;//如果节点活着循环发布while(ros::ok){count++;std::stringstream ss;ss << "hello:" << count;msg.data = ss.str();pub.publish(msg);ROS_INFO("发布数据:%s",msg.data.c_str());rate.sleep();ros::spinOnce();}return 0;
}//通过ros工具打印话题消息
//rostopic echo fang
四、 编写订阅者
main.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"#include <sstream>//回调函数
void doMessage(const std_msgs::String::ConstPtr &msg)
{ROS_INFO("订阅数据:%s",msg->data.c_str());
}//订阅者
int main(int argc,char *argv[])
{//中文支持setlocale(LC_ALL,"");//初始化ros节点//指定节点名称ros::init(argc,argv,"subscriber");//创建ros节点句柄ros::NodeHandle n;//创建订阅者对象ros::Subscriber pub = n.subscribe("fang",10,doMessage);//回头处理回调函数ros::spin();return 0;
}//通过ros工具打印话题消息
//rostopic echo fang