一、创建发布者
创建源文件publisher.cpp,并写入以下内容:
#include <iostream>
#include "ros/ros.h"
#include "std_msgs/String.h"
int main(int argc, char* argv[]) {
std::string nodeName = "publisher"; // 节点名称
ROS_INFO("Publisher node name is: %s", nodeName.c_str()); // 日志打印节点名称
ros::init(argc, argv, nodeName); // 初始化ROS1
ros::NodeHandle nodeHandle; // 节点句柄
std::string topicName = "demo2"; // 主题名称
uint32_t queueSize = 1000; // 指定发布者队列的大小
const ros::Publisher &publisher = nodeHandle.advertise<std_msgs::String>(topicName, queueSize); // 创建主题发布者
uint32_t messageId = 0; // 消息ID
double frequency = 1; // 消息发送频率,每秒发送1次
ros::Rate rate(frequency); // 创建消息频率对象
while (ros::ok() == true) { // 循环发送主题消息,直到ROS1关闭
std_msgs::String message; // 创建消息对象
std::string data = "publish message id " + std::to_string(messageId); // 创建消息内容
message.data = data; // 填写消息内容
publisher.publish(message); // 开始发布消息
ROS_INFO("Publish topic message: %s", data.c_str());
++messageId; // 发布完成,消息ID自增1
rate.sleep(); // 执行延时
}
return EXIT_SUCCESS;
}
二、创建订阅者
创建源文件subscriber.cpp,并写入以下内容:
#include <iostream>
#include "ros/ros.h"
#include "std_msgs/String.h"
void topicCallback(const std_msgs::String::ConstPtr &message) { // 主题消息回调函数
if (message.get() != nullptr) {
ROS_INFO("Subscribe topic message: %s", message.get()->data.c_str());
}
}
int main(int argc, char* argv[]) {
std::string nodeName = "subscriber"; // 节点名称
ROS_INFO("Subscriber node name is: %s", nodeName.c_str()); // 日志打印节点名称
ros::init(argc, argv, nodeName); // 初始化ROS1
ros::NodeHandle nodeHandle; // 节点句柄
std::string topicName = "demo2"; // 主题名称
uint32_t queueSize = 1000; // 指定发布者队列的大小
const ros::Subscriber &subscriber = nodeHandle.subscribe<std_msgs::String>(topicName, queueSize, topicCallback); // 创建主题订阅者
ros::spin(); // 阻塞线程,防止退出
return EXIT_SUCCESS;
}
三、编译运行
1、修改编译配置
打开CMakeLists.txt文件,添加以下内容:
# 添加发布者源文件
add_executable(publisher src/publisher.cpp)
# 添加订阅者源文件
add_executable(subscriber src/subscriber.cpp)
# 发布者链接catkin库
target_link_libraries(publisher ${catkin_LIBRARIES})
# 订阅者链接catkin库
target_link_libraries(subscriber ${catkin_LIBRARIES})
2、开始编译
# 执行编译命令
catkin_make
# 新建【终端1】和【终端2】,分别执行以下命令加载运行环境:
source ./devel/setup.sh
3、运行发布者
# 打开【终端1】运行以下命令:
rosrun demo publisher
发布成功的日志打印:
4、运行订阅者
# 打开【终端2】运行以下命令:
rosrun demo subscriber
订阅成功的日志打印: