1.发布端的实现
新建文件夹和文件如图
输入以下代码
#! /usr/bin/env python
# -*- coding: UTF-8 -*-
#一定要添加这一行,否则中文注释就会报错
#1.导包
import rospy
from std_msgs.msg import String
if __name__ == "__main__":
#2.初始化 ROS 节点:命名(唯一)
rospy.init_node("talker_p")
#3.实例化 发布者 对象
pub = rospy.Publisher("chatter",String,queue_size=10)
#4.组织被发布的数据,并编写逻辑发布数据
msg = String() #创建 msg 对象
msg_front = "hello 你好"
count = 0 #计数器
# 设置循环频率
rate = rospy.Rate(1)
while not rospy.is_shutdown():
#拼接字符串
msg.data = msg_front + str(count)
pub.publish(msg)
rate.sleep()
rospy.loginfo("写出的数据:%s",msg.data)
count += 1
添加可执行权限
chmod +x *.py
修改配置文件
catkin_install_python(PROGRAMS
scripts/deom01_pub_p.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
编译以后,开始运行
使用之前C++写的订阅节点订阅消息并打印出来
或者使用小工具现实
rostopic echo chatter
2.订阅端的实现
根据以上步骤创建文件夹并编写代码
#! /usr/bin/env python
# -*- coding: UTF-8 -*-
"""
需求: 实现基本的话题通信,一方发布数据,一方接收数据,
实现的关键点:
1.发送方
2.接收方
3.数据(此处为普通文本)
消息订阅方:
订阅话题并打印接收到的消息
实现流程:
1.导包
2.初始化 ROS 节点:命名(唯一)
3.实例化 订阅者 对象
4.处理订阅的消息(回调函数)
5.设置循环调用回调函数
"""
#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("listener_p")
#3.实例化 订阅者 对象
sub = rospy.Subscriber("chatter",String,doMsg,queue_size=10)
#4.处理订阅的消息(回调函数)
#5.设置循环调用回调函数
rospy.spin()
同发布端步骤,运行程序
注意配置文件的修改