话题通信是ros当中比较常用的通信手段。在使用话题通信(topic)时需要着重注意两个角色:发布方与订阅方。两者之间的关系不难理解,以生活中的订阅杂志为例,发布方假设为某出版社,订阅方为杂志读者,订阅话题可以理解为邮寄地址,
读者通过与出版社约定好邮寄地点,出版社每个月定期到邮寄地点发放杂志,读者收到杂志。
订阅方与发布方约定好同一通信话题,发布方以某一频率通过话题发布信息,订阅方接受信息。
题目:
使用 ROS 话题(Topic)机制实现消息发布与订阅
要求:编写代码实现 ROS 中消息的发布与订阅:创建一个发布者,每隔 100ms 依次发送斐波
拉契数列的数字到话题/fibonacci 中;创建一个订阅者,订阅该话题,输出订阅结果。
如,订阅者依次输出: 1 1 2 3 5 8 …
用python语言编写程序
自定义msg文件
int32 feibo
发布方代码
#!/usr/bin/env python
import rospy
from mission01.msg import number_f
if __name__ == "__main__":
#2.初始化ros节点
rospy.init_node("fibonacci_pub")
#3.创建发布者对象
pub = rospy.Publisher("fibonacci",number_f,queue_size=10)
#4.组织数据并发布
#设置发布频率
rate = rospy.Rate(10)
#创建数列消息
num=number_f()
n1=0
n2=1
#循环
while not rospy.is_shutdown():
num.feibo=n2
pub.publish(num)
n2=n1+n2
n1=num.feibo
rospy.loginfo("%d",num.feibo)
rate.sleep()
订阅方代码
#! /usr/bin/env python
import rospy
from mission01.msg import number_f
def printout(rrrr):
rospy.loginfo("%d",rrrr.feibo)
if __name__ == "__main__":
#2.初始化ros节点
rospy.init_node("fibonacci_sub")
#3.创建订阅对象
sub = rospy.Subscriber("fibonacci",number_f,printout,queue_size=100)
#4.使用回调函数处理消息
#5.spin()
rospy.spin()
萌新代码,请大佬们批评指正