python创建一个ros节点

python创建一个ros节点_第1张图片
创建流程.png

Python编码不需要修改makefile文件,脚本语言,直接执行。
代码解释

  1. talker.py
#!/usr/bin/env python  #调用的是python2.7编译器

import rospy 
from std_msgs.msg import String  

def talker():
    pub = rospy.Publisher('chatter', String, queue_size=10)
      #Publisher函数创建发布节点(topic名‘chatter’,消息类型String,queue_size发布消息缓冲区大小都是未被接收走的)
    
    rospy.init_node('talker', anonymous=True)
      #启动节点talker,同时为节点命名,若anoymous为真则节点会自动补充名字,实际名字以talker_322345等表示,
      #若为假,则系统不会补充名字,采用用户命名。如果有重名,则最新启动的节点会注销掉之前的同名节点
    
    rate = rospy.Rate(10) # 10hz
      #延时的时间变量赋值,通过rate.sleep()实现延时
    
    while not rospy.is_shutdown():
           # 判定开始方式,循环发送,以服务程序跳出为终止点 一般ctrl+c也可
        
        hello_str = "hello world %s" % rospy.get_time()
          # 数据变量的内容 rospy.get_time() 是指ros系统时间,精确到0.01s 
        
        rospy.loginfo(hello_str)
          #在运行的terminal界面info 出信息,可不加,可随意改
        
        pub.publish(hello_str)
          #发布数据 必须发布
        
        rate.sleep()
          # 按rospy.Rate()设置的速率延迟 

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass

  1. listener.py
#!/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)
      #回调函数 收到的参数.data是通信的数据 默认通过这样的 def callback(data) 取出data.data数据

def listener():

    # In ROS, nodes are uniquely named. If two nodes with the same
    # name are launched, the previous one is kicked off. The
    # anonymous=True flag means that rospy will choose a unique
    # name for our 'listener' node so that multiple listeners can
    # run simultaneously.
    rospy.init_node('listener', anonymous=True)
      #启动节点并同时为节点命名 

    rospy.Subscriber('chatter', String, callback)
     #启动订阅,订阅主题‘chatter’,及标准字符串格式,同时调用回调函数,当有数据时调用函数,取出数据

    # spin() simply keeps python from exiting until this node is stopped
    rospy.spin()

if __name__ == '__main__':
    listener()

你可能感兴趣的:(python创建一个ros节点)