话题通信

话题通信是基于发布订阅模式的,即一个节点发布消息,另一个节点订阅该消息。
流程:编写发布方实现–编写订阅方实现–(用python实现时,为python文件编写可执行权限)–编写配置文件–编译执行

要求:编写发布订阅实现,要求发布以10Hz(每秒10次)的频率发布文本,订阅方订阅消息并将消息内容打印输出。

前期准备工作:创建一个ROS功能包–vscode中编译ros(修改.vscode/tasks.json 文件)
src目录下创建ros功能包、设置包名、添加依赖

话题发布

  1. C++实现
    –>在ros功能包下的src目录新建demo01_pub.cpp文件(必要时修改 .vscode/c_cpp_properties.json文件)
    发布者C++代码如下:
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
/*发布方实现:1.包含头文件ROS中文本类型 -->std_msgs/String.h2.初始化ros节点3.创建节点句柄;4.创建发布者对象5.编写发布逻辑并发布数据
*/
int main(int argc, char *argv[])
{setlocale(LC_ALL,"");  //防止中文乱码//初始化ROS节点;ros::init(argc,argv,"ergouzi");//创建节点句柄;ros::NodeHandle nh;//创建发布者对象;ros::Publisher pub = nh.advertise<std_msgs::String>("fang",10);//编写发布逻辑并发布数据//要求以 10Hz 的频率发布数据,并且文本后添加编号//先创建被发布的消息std_msgs::String msg;//发布频率ros::Rate rate(10);//设置编号int count = 0;//编写循环,循环中发布数据while (ros::ok()){count++;//实现字符串拼接数字std::stringstream ss;ss << "hello --> " << count;//msg.data = "hello";msg.data = ss.str();pub.publish(msg);//添加日志;ROS_INFO("发布的数据是:%s",ss.str().c_str());rate.sleep();}return 0;
}

修改Cmakelist.txt文件并编译执行
执行:启动roscore
rosrun plumbing_pub_sub demo01_pub
发布话题完毕

  1. Python实现
#!/usr/bin/env python
# -*- coding: UTF-8 -*-#导包
import rospy
from std_msgs.msg import Stringif __name__ == "__main__":#初始化ROS节点 rospy.init_node("sandai")  #创建发布对象pub = rospy.Publisher("che",String,queue_size=10)#4.组织被发布的数据,并编写逻辑发布数据 msg = String()rate = rospy.Rate(10)count = 0while not rospy.is_shutdown():count += 1msg.data = "hello" + str(count)pub.publish(msg)rospy.loginfo(msg.data)rate.sleep()

话题订阅

  1. C++实现

–>在ros功能包下的src目录新建demo02_sub.cpp文件(必要时修改 .vscode/c_cpp_properties.json文件)
订阅者C++代码如下:

#include "ros/ros.h"
#include "std_msgs/String.h"
/*发布方实现:1.包含头文件ROS中文本类型 -->std_msgs/String.h2.初始化ros节点3.创建节点句柄;4.创建订阅者对象5.处理订阅的数据6.声明一个spin()函数
*/
void doMsg(const std_msgs::String::ConstPtr &msg){//通过msg获取并操作订阅到的数据ROS_INFO("翠花订阅到的数据:%s",msg->data.c_str());
}
int main(int argc, char *argv[])
{setlocale(LC_ALL,"");//初始化ros节点ros::init(argc,argv,"cuihua");//创建节点句柄;ros::NodeHandle nh;//创建订阅者对象ros::Subscriber sub = nh.subscribe("fang",10,doMsg); //处理订阅的数据ros::spin();return 0;
}

配置CMakeList.txt文件

执行:启动roscore
rosrun plumbing_pub_sub demo02_sub
话题订阅发布结果如下:

  1. Python实现
  • 1.在scripts目录下新建demo02_sub_p.py
#! /usr/bin/env python
# -*- coding: UTF-8 -*-#1.导包
import rospy
from std_msgs.msg import String
def doMsg(msg):rospy.loginfo("I heard:%s",msg.data)if __name__ == "__main__":#2.初始化 ROS 节点:命名(唯一)rospy.init_node("huahua")#3.实例化订阅者对象sub = rospy.Subscriber("che",String,doMsg,queue_size=10)#4.处理订阅的消息(回调函数)#5.设置循环调用回调函数rospy.spin()
  • 2.为python代码添加可执行权限
chmod +x *.py
ll
  • 3.编译执行
    启动roscore
    启动发布节点:
source ./devel/setup.bash
rosrun plumbing_pub_sub demo01_pub_p.py

启动订阅节点:

source ./devel/setup.bash
rosrun plumbing_pub_sub demo02_sub_p.py

注:订阅者不能完全订阅发布者消息,解决办法:对发布代码加一行:rospy.sleep(3),休眠3秒钟

ROS通信机制(一)--话题通信基本操作相关推荐

  1. ROS通信机制一---话题通信

    文章目录 总述 1. 话题通信模型 2. 话题通信基本实现示例 2.1 发布者 2.1.1 创建发布者topic_pub.cpp文件 2.1.2 修改CMakeLists.txt文件 2.1.3 编译 ...

  2. ROS通信机制:话题、服务、参数

    目录 话题通信 理论模型 流程 通信样例 自定义消息的通信 服务通信 理论模型 服务通信自定义srv 参数服务器 理论模型 参数操作 话题通信 话题通信是ROS中使用频率最高的一种通信模式,话题通信是 ...

  3. ROS通信机制(一) —— 话题(topic)与msg文件

    文章目录 简述 特点 相关常用命令 通信模型 核心元素 通信过程 代码示例(发布者和订阅者) 发布者(talker.cpp) 订阅者(listener.cpp) 配置 CMakeLists.txt 编 ...

  4. 3.ROS编程学习:话题通信python

    目录 1.建立scripts文件夹与python文件 2.发布者实现 3.订阅者实现 4.CMakeList.txt配置 5.添加可执行权限 6.运行roscore+rosrun 7.计算图 8.注意 ...

  5. ROS 通信机制(已整理)

    文章目录 节点与节点管理器 ROS通信机制 1. 话题通信 1.1 基本话题通信 1.1.1 C++实现 发布方 demo01_pub.cpp 订阅方 demo01_sub.cpp 1.1.2 Pyt ...

  6. ROS通信机制--键盘控制乌龟运动线速度角速度XYZ值的解释

    目录 前言 案例实现 线速度角速度X.Y.Z值的取值和作用 (END) 前言 在学习ros之初,想必大家运行的第一个案例就是键盘控制乌龟运动.这是ros内置的小案例,采用的通信机制为话题通信.本文介绍 ...

  7. 【ROS入门-4】嘴对嘴讲解ROS的核心概念——ROS话题通信机制

    文章目录 前言 ROS系列文章 ROS的通信机制 话题(topic) 发布者 订阅者 消息(Message) 用C++来写话题通信的代码 发布者 订阅者 使用rqt_graph 源码附录 引用说明 参 ...

  8. ROS话题通信c++和python实现

    机器人是一种高度复杂的系统性实现,在机器人上可能集成各种传感器(雷达.摄像头.GPS...)以及运动控制实现,为了解耦合,在ROS中每一个功能点都是一个单独的进程,每一个进程都是独立运行的.更确切的讲 ...

  9. Chapter2 ROS通信机制----基础篇(Ⅰ)vs配置及通信基础

    目录 一.复习及launch 1.1 深入理解配置信息(非常重要) 1.2 launch文件演示 二.ROS通信机制-----基础 2.1 本节导论 2.2 话题通信 2.2.1 话题通信概述 2.2 ...

  10. ROS自主导航学习———ROS通信机制

    前言 前面ROS很多都忘记了 ,现在来重新回顾一下内容 ROS 中的基本通信机制主要有如下三种实现策略: 话题通信(发布订阅模式) 服务通信(请求响应模式) 参数服务器(参数共享模式) Action通 ...

最新文章

  1. datatable对两个csv的join操作
  2. Hive注册表那点事(5.0 VS 6.0)
  3. 实现线段切割法_漫画:如何实现抢红包算法?
  4. Java 12:使用开关表达式进行映射
  5. 【Python爬虫】Scrapy爬虫框架
  6. redis logfile 只读_docker 配置redis主从,哨兵sentinel
  7. linux驱动编写(dma驱动)
  8. js判断数组中重复元素并找出_javascript查找数组中重复元素的方法
  9. Tomcat加载类机制 - 我们到底能走多远系列(14)
  10. Turnserver服务器搭建
  11. 【iOS】使用 otool 命令查看 App 所使用的动态库
  12. SQL Server2012版完全卸载
  13. 基于SpringBoot实现在线抽奖系统
  14. mac下用ImageOptim压缩png图片
  15. html5图片高斯模糊,CSS实现图片高斯模糊但边界清楚的效果
  16. 河南省软件测试竞赛证书,河南省大学生国家安全知识竞赛
  17. Google Dapper,大规模分布式系统的跟踪系统
  18. Linux Qt cannot find -lGL
  19. (附超声射频数据)matlab实现b超原始信号数据生成图像
  20. 北美哪些跨境电商平台十大排行榜

热门文章

  1. 系统设计.短链系统设计
  2. 字符串查找及常见操作1
  3. html5图片文字环绕效果,HTML5实现Word中文字全环绕图片效果
  4. uni-app 107群二维码生成(一)
  5. AE指纹解锁动画制作
  6. java游戏有个三国战棋类_FC经典卡带,爆笑三国,或许是我们最早接触的战棋类三国游戏...
  7. 虚拟机开机时显示内部错误
  8. Excel中常用的几个快捷键及小技巧
  9. c语言排序算法(使用链表)
  10. sudo和su命令的联系和区别详解