ROS 进阶学习笔记(13) - Combine Subscriber and Publisher in Python, ROS

Combine Subscriber and Publisher in Python, ROS

This article will describe an example of Combining Subscriber and Publisher in Python in ROS programming.

This is very useful in ROS development.

We will also discuss briefly how to build and modify a catkin package which is written by Python.

  • Create a catkin package with the command: catkin_create_pkg, under the path: ~/catkin_ws/src
  • Build it with the command: catkin_make, under the path: ~/catkin_ws/
  • Source the catkin setup file under devel folder:
    $ source ~/catkin_ws/devel/setup.bash
  • modify the Python scripts file under the path: ~/catkin_ws/src/<pkg_name>/scripts/nodexxx.py
  • chmod +x nodexxx.py
  • Run this package by Command:  rosrun package_name nodexxx.py
  • Modify the CMakefile.txt for Python: Writing a ROS Python Makefile

More about Create and Build catkin ROS package: This blog

The sourcecode for this Combining Subscriber and Publisher in Python is here:

#!/usr/bin/env python
# License removed for brevity
"""
	learn to write Subscriber and Listener in one python script.
	Function Style
	Author: Sonic http://blog.csdn.net/sonictl
	Date: Feb 29, 2016	
"""
import rospy
from std_msgs.msg import String

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

def listener():

    # In ROS, nodes are uniquely named. If two nodes with the same
    # node 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. http://blog.csdn.net/sonictl
    rospy.init_node('responsor', anonymous=True)

    rospy.Subscriber("uc0Response", String, callback)

    # spin() simply keeps python from exiting until this node is stopped
    rospy.spin()
	
def talker(data):
    pub = rospy.Publisher('uc0Command', String, queue_size=10)
    rospy.loginfo("talker:I heard %s", data.data)

    #while not rospy.is_shutdown():
    resp_str = "resp_str: I heard: " + data.data
    rospy.loginfo(resp_str)
    if data.data == "cigit-pc\n" :
        pub.publish(resp_str)
    else:
        rospy.loginfo("invalid seri data:" + data.data)
		
if __name__ == '__main__':
    #listener()
    try:
        listener()
        #talker()
    except rospy.ROSInterruptException:
        pass


你可能感兴趣的:(ROS 进阶学习笔记(13) - Combine Subscriber and Publisher in Python, ROS)