LIFE LOG(ここにはあなたのブログ名)

あつあつ備忘録

ソフトやハード、時にはメカの備忘録をまとめていきます

【ROS】PublisherとSubscriberの作成

f:id:AtsuyaKoike:20190421152613p:plain
画像元

Publisherの作成

$ roscd ros_start
$ mkdir scripts
$ cd scripts/
$ vi talker.py
#!/usr/bin/env python
import rospy
from std_msgs.msg import String

rospy.init_node('talker') #node name

# chatter : name
# String : std_msg Topic [Publisher]
# pueue_size : buffer
pub = rospy.Publisher('chatter', String, queue_size=10)

rate = rospy.Rate(10) #10kHz

while not rospy.is_shutdown(): #loop
    hello_str = String() #make String data
    #writing data (helloworld and time)
    hello_str.data = "hello world %s" % rospy.get_time()
    #publish
    pub.publish(hello_str)
    #loop(because 10kHz)
    rate.sleep()

Subscriberの作成

$ vi listener.py
#!/usr/bin/env python
import rospy
from std_msgs.msg import String

def callback(message):
    # output
    rospy.loginfo("I heard %s", message.data)

rospy.init_node('listener') # node name
sub = rospy.Subscriber('chatter', String , callback) # if reception->run
rospy.spin() # loop and reception

これで完成です。

実行

以下をそれぞれ別のターミナルで実行してください。

$ roscore
$ rosrun ros_start talker.py 
$ rosrun ros_start listener.py 
[INFO] [1556022065.478649]: I heard hello world 1556022065.47
[INFO] [1556022065.568496]: I heard hello world 1556022065.57
[INFO] [1556022065.668592]: I heard hello world 1556022065.67
[INFO] [1556022065.768532]: I heard hello world 1556022065.77
[INFO] [1556022065.869021]: I heard hello world 1556022065.87
[INFO] [1556022065.968412]: I heard hello world 1556022065.97
[INFO] [1556022066.068923]: I heard hello world 1556022066.07
[INFO] [1556022066.169275]: I heard hello world 1556022066.17
[INFO] [1556022066.268587]: I heard hello world 1556022066.27

このようになれば正常に動いています。