Robotics StackExchange | Archived questions

how to run both talker and listener codes at the same moment by one Enter or click.

I am using the codes of talker and listener on two computers and running them separately. they are working fine but I'd like to run both by one enter instead of two. I used these codes here

I don't know if I need to add IP address. if yes, please help.

computer 1:

#!/usr/bin/env python
# license removed for brevity
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

computer 2:

#!/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():

    # 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)

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

if __name__ == '__main__':
    listener()

Asked by Redhwan on 2019-11-26 21:19:14 UTC

Comments

You probably want to use launch file.

Asked by ahendrix on 2019-11-26 23:00:53 UTC

@ahendrix how? could you give me some hints, please?

Asked by Redhwan on 2019-11-26 23:16:46 UTC

Sorry; I haven't been able to find a simple tutorial for roslaunch and I don't really have time to write one.

Asked by ahendrix on 2019-11-27 00:11:40 UTC

@ahendrix thanks for your help and reply.

Asked by Redhwan on 2019-11-27 02:29:40 UTC

I am guessing you already have your network configured for communication between your pcs. One way to solve your problem is to use machine tag.

Asked by Choco93 on 2019-11-27 08:33:29 UTC

Do you want to start two processes on two different computers with one command? Did you take a look at: https://answers.ros.org/question/201415/launch-file-to-run-multiple-nodes-in-two-machines-problem-with-environment-file/ ?

Asked by Wilco Bonestroo on 2019-11-27 16:31:03 UTC

Answers