在机器人操作系统(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