话题通信之python实现

在机器人操作系统(ROS)中,话题通信是一种常见的通信方式,它允许不同的节点之间通过主题进行数据交换。本文将介绍如何使用Python实现ROS话题通信,包括发布者和订阅者的编写。这种方法与使用C++实现类似,但Python的简洁性使得代码更加易于理解和维护,具体C++示例请看开始通信之旅-----话题通信-CSDN博客

在已经编写好的文件目录下我们重新开始python的实现

1.发布方的实现

依据编写第一个ros程序_visual studio code ros-CSDN博客这个链接创建一个pub_demo.py文件

1.导入所需包

python 复制代码
#1.导入包
import rospy
from std_msgs.msg import String

2.创建发布节点

python 复制代码
    #  2.创建发布者节点
    rospy.init_node("Fabuzhe")

3.创建发布主题等相关信息

python 复制代码
    pub = rospy.Publisher(name="topic",data_class=String,queue_size=10)

4.编写发布数据

python 复制代码
    message = String()

    message. Data = "hello"

5.设定发送频率

python 复制代码
 rate = rospy.Rate(4)

完整代码如下

python 复制代码
#! /usr/bin/env python 
#设置解释器
#1.导入包
import rospy
from std_msgs.msg import String


'''
    1.导入所需包
    2.创建发布者节点
    3.创建发布主题等相关信息
    4.编写发布数据并发送
    5.设定发送频率
'''
if __name__ == '__main__':
    #  2.创建发布者节点
    rospy.init_node("Fabuzhe")
    #  3.创建发布主题等相关信息
    pub = rospy.Publisher(name="topic",data_class=String,queue_size=10)
    #  4.编写发布数据
    message = String()
    message.data = "hello"
    #  5.设定发送频率
    rate = rospy.Rate(4)
    while not rospy.is_shutdown():
        #发送数据
        pub.publish(message)
        #按照频率发送
        rate.sleep()
        continue
    pass

打开CMakeLists.list文件

找到catkin_install_python打开注释

并将其改为如下代码

python 复制代码
catkin_install_python(PROGRAMS
  scripts/pub_demo.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

按下ctrl + shift +b编译如果没问题则会如下图

打开终端1(注意终端路径)输入

复制代码
roscore

打开终端2

输入如下指令

复制代码
source ./devel/setup.bash
python 复制代码
rosrun topicComm pub_demo.py

打开终端3输入

python 复制代码
rostopic echo topic

若成功则会输出如下图所示

如果你想停止发送请在终端2和终端3中按下ctrl + c

2.订阅方的实现

依据编写第一个ros程序_visual studio code ros-CSDN博客这个链接创建一个sub_demo.py文件

1.导入所需包

python 复制代码
#1.导入包
import rospy
from std_msgs.msg import String

2.创建订阅节点

python 复制代码
    #  2.创建订阅者节点
    rospy.init_node("Dingyuezhe")

3.创建订阅主题等相关信息

python 复制代码
    #  3.创建订阅主题等相关信息
    rospy.Subscriber(name="topic",data_class=String,callback=subCallblack,queue_size=10)

4.编写订阅回调函数

python 复制代码
def subCallblack(message):
    rospy.loginfo("我是订阅者接收到信息为%s",message)

5.spin()重复回调

python 复制代码
    rospy.spin()

完整代码如下

python 复制代码
#! /usr/bin/env python 
#设置解释器
#1.导入包
import rospy
from std_msgs.msg import String

def subCallblack(message):
    rospy.loginfo("我是订阅者接收到信息为%s",message)

'''
    1.导入所需包
    2.创建订阅者节点
    3.创建订阅主题等相关信息
    4.编写订阅回调函数
    5.spin()重复回调
'''
if __name__ == '__main__':
    #  2.创建订阅者节点
    rospy.init_node("Dingyuezhe")
    #  3.创建订阅主题等相关信息
    rospy.Subscriber(name="topic",data_class=String,callback=subCallblack,queue_size=10)

    rospy.spin()
    pass

打开CMakeLists.list文件

找到catkin_install_python打开注释

并将其改为如下代码

python 复制代码
catkin_install_python(PROGRAMS
  scripts/pub_demo.py
  scripts/sub_demo.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

按下ctrl + shift +b编译如果没问题则会如下图

打开终端1(注意终端路径)输入

复制代码
roscore

打开终端2

输入如下指令

复制代码
source ./devel/setup.bash
python 复制代码
rosrun topicComm pub_demo.py

打开终端3输入

python 复制代码
rosrun topicComm sub_demo.py 

若成功则会输出如下图所示

如果你想停止发送请在终端2和终端3中按下ctrl + c

相关推荐
傻啦嘿哟24 分钟前
Python SQLite模块:轻量级数据库的实战指南
数据库·python·sqlite
Q_Q51100828533 分钟前
python+django/flask+uniapp基于微信小程序的瑜伽体验课预约系统
spring boot·python·django·flask·uni-app·node.js·php
XueminXu36 分钟前
Python读取MongoDB的JSON字典和列表对象转为字符串
python·mongodb·json·pymongo·mongoclient·isinstance·json.dumps
techdashen1 小时前
12分钟讲解Python核心理念
开发语言·python
jie*1 小时前
小杰机器学习(nine)——支持向量机
人工智能·python·机器学习·支持向量机·回归·聚类·sklearn
闭着眼睛学算法1 小时前
【华为OD机考正在更新】2025年双机位A卷真题【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】
java·c语言·javascript·c++·python·算法·华为od
郝学胜-神的一滴1 小时前
谨慎地迭代函数所收到的参数 (Effective Python 第31条)
开发语言·python·程序人生·软件工程
haing20191 小时前
SCARA 机器人轨迹运动奇异点规避方法
机器人·轨迹规划·奇异位置
没有梦想的咸鱼185-1037-16632 小时前
【遥感技术】从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类
pytorch·python·深度学习·机器学习·数据分析·cnn·transformer
钟爱蛋炒饭2 小时前
基于深度学习神经网络协同过滤模型(NCF)的视频推荐系统
python·神经网络·机器学习