ROS开发(三)Topic通信编程

话题模型(发布/订阅)

笔者用的是Python,所以需要在功能包下面创建一个scripts文件夹。

roscd learning_communication
mkdir scripts

创建一个string_publisher.py文件,在里面编写如下代码:

#!/usr/bin/env python

import rospy
from std_msgs.msg import String

def publisher():
    rospy.init_node('string_publisher', anonymous=True)
    pub = rospy.Publisher('chatter', String, queue_size=10)
    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:
        publisher()
    except rospy.ROSInterruptException:
        pass

上面的代码就简单的实现了一个发布者,具体步骤如下:

  • 初始化节点;
  • 向ROS Master注册节点信息,包括发布的话题名称和话题中的消息类型;
  • 设定消息循环发送频率;
  • 创建消息数据,按一定的频率循环发布消息。

创建一个string_subscriber.py文件,编写订阅者:

#!/usr/bin/env python

import rospy
from std_msgs.msg import String

def callback(data):
    rospy.loginfo(data.data)

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

if __name__ == '__main__':
    subscriber()

订阅者实现步骤:

  • 初始化ROS节点;
  • 订阅需要的话题;
  • 通过spin()循环等待话题消息,接收到消息后进入回调函数;
  • 在回调函数中完成消息处理。

本博客采用 知识共享署名-禁止演绎 4.0 国际许可协议 进行许可

本文标题:ROS开发(三)Topic通信编程

本文地址:https://jizhong.plus/post/2019/07/ros-topic.html