一、 开发环境
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