ROS-4.创建发布者和订阅者

news/2025/2/2 0:46:20/

ros中非长连接的通信使用topic的方式,publisher向topic发布消息,subscriber订阅topic消息,对于非应答模式的通信适合使用该模式,如下图
在这里插入图片描述
接下来我们实现一个发布者和订阅者

1. 创建功能包

在实现订阅者和发布者的时候我们需要先创建一个功能包

cd catkin_ws/src/catkin_create_pkg learning_topic roscpp rospy std_msgs geomery_msgs turtlesim

2. 创建发布者

2.1. 创建代码

cd catkin_ws/src/learning_topic/src

创建 velocity_publisher.cpp 发布者

#include <ros/ros.h>
#include <geometry_msgs/Twist.h>int main(int argc, char **argv)
{// ros 节点初始化ros::init(argc, argv, "velocity_publisher");// 创建节点句柄ros::NodeHandle node;// 创建一个publisher,发布名为/turtle1/cmd_vel的topic, 消息类型为geometry_msgs::Twist,队列长度为10ros::Publisher turtle_vel_pub = node.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);// 设置循环的频率ros::Rate loop_rate(10);int count = 0;while (ros::ok()){// 初始化geometry_msgs::Twist消息geometry_msgs::Twist vel_msg ;// 线速度x方向0.5m/svel_msg.linear.x = 0.5;// 角速度z方向0.2弧度/svel_msg.angular.z = 0.2;// 发布消息turtle_vel_pub.publish(vel_msg);ROS_INFO("Publish turtle velocity command [%0.2f m/s, %0.2f rad/s]", vel_msg.linear.x, vel_msg.angular.z);loop_rate.sleep();}return 0;
}

2.2. 修改cmake

vi catkin_ws/src/learning_topic/CMakeLists.txt

添加如下内容

add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})

2.3. 编译

cd catkin_ws
# 编译
catkin_make
# 设置环境变量
source devel/setup.sh
# 启动ros核心程序
roscore

2.4. 启动仿真器

另开一个终端

cd catkin_ws
source devel/setup.sh
# 启动海归仿真器rosrun turtlesim turtlesim_node 

此时屏幕上出现一个小海龟
在这里插入图片描述

2.5. 启动发布者

另开一个终端

cd catkin_ws
source devel/setup.sh
# 启动发布者
rosrun learning_topic velocity_publisher  

这个时候看到小海龟在转圈
在这里插入图片描述

3. 创建订阅者

这里我们订阅小海龟的pos信息
在这里插入图片描述

3.1. 创建代码

cd catkin_ws/src/learning_topic/src

创建 pose_subseriber.cp

#include <ros/ros.h>
#include <turtlesim/Pose.h>// 订阅者回掉函数,回掉消息里面处理流程要简单
void pose_callback(const turtlesim::Pose::ConstPtr &msg)
{// 打印pos信息ROS_INFO("Turtle Pos: x:%0.6f, y:%0.6f", msg->x, msg->y);
}int main(int argc, char **argv)
{ros::init(argc, argv, "pose_subscriber");// 创建节点ros::NodeHandle node;// 创建一个订阅者,订阅 /turtle1/pose topic,消息队列为10ros::Subscriber pose_sub = node.subscribe("/turtle1/pose", 10, pose_callback);// 等待发布者消息ros::spin();
}

3.2. 修改cmake

vi catkin_ws/src/learning_topic/CMakeLists.txt

添加如下内容

add_executable(pose_subseriber src/pose_subseriber.cpp)
target_link_libraries(pose_subseriber ${catkin_LIBRARIES})

2.3. 编译

cd catkin_ws
# 编译
catkin_make
# 设置环境变量
source devel/setup.sh
# 启动ros核心程序
roscore

2.5. 启动订阅者

上面小海龟已经动起来了,接下来启动订阅者就能知道小海龟的实时位置
另开一个终端

cd catkin_ws
source devel/setup.sh
# 启动订阅者
rosrun learning_topic pose_bseriber 

这个时候就会在终端上打印小海龟的实时位置


http://www.ppmy.cn/news/1085229.html

相关文章

Shell脚本练习——系统应用相关

显示系统信息 [rootwenzi data]#cat systemInfo.sh #/bin/bash RED"\E[1;31m" GREEN"\E[1;32m" END"\E[0m" echo -e "$GREEN----------------------Host systeminfo--------------------$END" echo -e "HOSTNAME: $REDho…

[管理与领导-67]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 评估你与公司的八字是否相合

目录 前言&#xff1a; 一、概述 二、八字相合的步骤 2.1 企业文化是否相合 2.2.1 企业文化对职业选择的意义 2.2.2 个人与企业三观不合的结果 2.2.3 什么样的企业文化的公司不能加入 2.2 公司的发展前景 2.3 公司所处行业发展 2.4 创始人的三观 2.5 创始人与上司的…

【100天精通Python】Day47:Python网络编程_Web开发:web服务器,前端基础以及静态服务器

目录 1 网络编程与web编程 1.1 网络编程 1.2 web编程 1.3 前后端交互的基本原理 2 Web开发基础 2.1 HTTP协议 2.2 Web服务器 2.3 前端基础 2.3.1 HTML&#xff08;超文本标记语言&#xff09; 2. 3.2 CSS&#xff08;层叠样式表&#xff09; 2.3.3 JavaScript 2.…

【微服务部署】一、使用docker-compose部署Jenkins、SonarQube、PostgreSQL

一、安装 1、编写docker-compose部署Postgres、SonarQube、Jenkins的yml文件jenkins-compose.yml Postgres&#xff1a;作为SonarQube的数据库存储SonarQube&#xff1a;代码质量检查Jenkins&#xff1a;jenkins/jenkins:lts镜像&#xff0c;jenkinsci/blueocean镜像缺少node…

雪花算法生成的ID到前端后精度丢失

最近将id改为雪花算法方式生成&#xff0c;后端使用雪花算法生成id&#xff0c;在返回给前端的时候没有问题&#xff0c;但是在前端使用id反查数据的时候始终查询不到数据。 经过数据跟踪最终定位到是浏览器的问题&#xff0c;因为浏览器无法解析太长的数字&#xff0c;最终导…

Linux命令200例:Dump用来做文件系统备份

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈优质新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…

[国产MCU]-W801开发实例-用户报文协议(UDP)数据接收和发送

用户报文协议(UDP)数据接收和发送 文章目录 用户报文协议(UDP)数据接收和发送1、UDP简单介绍2、W801的UDP创建逻辑2.1 UDP使用步骤2.2 代码实现1、UDP简单介绍 用户数据报协议 (UDP) 是一种跨互联网使用的通信协议,用于对时间敏感的传输,例如视频播放或 DNS查找。它通过在数…

windows主机和Ubuntu虚拟机共享设置

参考文章 Ubuntu Linux 与主机共享文件夹 vim 修改文件出现错误 “ E45: ‘readonly’ option is set (add to override)“ vim退出时报错“E212: Cant open file for writing”的解决办法 VMware 安装后&#xff0c;安装Ubuntu 20.04一路顺利。 1&#xff0c;在VMware设置…