如何在ROS1系统中使用话题(Topic)和服务(Service)进行节点间通信 python版本

首先创建ROS工作空间(如果还没有创建过)
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
创建一个发布者节点
cd ~/catkin_ws/src
catkin_create_pkg my_publisher rospy
cd my_publisher/src
touch my_publisher_node.py
chmod +x my_publisher_node.py

下面以hello world为例
将下面的代码保存到my_publisher_node.py文件中
 

python
#!/usr/bin/env python

import rospy
from std_msgs.msg import String

def talker():
    pub = rospy.Publisher('chatter', String, queue_size=10)
    rospy.init_node('talker', anonymous=True)
    rate = rospy.Rate(10) # 10hz
    while not rospy.is_shutdown():
        hello_str = "hello world %s" % rospy.get_time()
        rospy.loginfo(hello_str)
        pub.publish(hello_str)
        rate.sleep()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass
创建一个订阅者节点
cd ~/catkin_ws/src
catkin_create_pkg my_subscriber rospy
cd my_subscriber/src
touch my_subscriber_node.py
chmod +x my_subscriber_node.py
将下面的代码保存到my_subscriber_node.py文件中:

python
#!/usr/bin/env python

import rospy
from std_msgs.msg import String

def callback(data):
    rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)

def listener():
    rospy.init_node('listener', anonymous=True)
    rospy.Subscriber("chatter", String, callback)
    rospy.spin()

if __name__ == '__main__':
    listener()
运行发布者和订阅者节点
打开两个终端窗口,分别运行:

roscore
在第一个终端中运行发布者节点:

cd ~/catkin_ws/
source devel/setup.bash
rosrun my_publisher my_publisher_node.py
在第二个终端中运行订阅者节点:

cd ~/catkin_ws/
source devel/setup.bash
rosrun my_subscriber my_subscriber_node.py
此时,在订阅者节点所在的终端中可以看到类似如下输出:

[INFO] [1624323142.380634]: I heard hello world 1901.017
[INFO] [1624323142.481275]: I heard hello world 1901.117
[INFO] [1624323142.581449]: I heard hello world 1901.217
...
这表明订阅者成功接收到了发布者所发送的消息。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值