#!/usr/bin/env python
import rospy
from ros_tutorial.msg import Date
from datetime import datetime
def talker():
l = []
d = Date()
rate = rospy.Rate(10)
while not rospy.is_shutdown():
d.date = ''
d.time = ''
now = datetime.now()
l = str(now)
for i in range(0,10):
d.date += l[i]
for i in range(11,25):
d.time += l[i]
d.date = int(d.date.replace('-', ''))
d.time = float(d.time.replace(':',''))
pub.publish(d)
rate.sleep()
if __name__ == '__main__':
rospy.init_node('time_pub')
pub = rospy.Publisher('Date_and_Time', Date , queue_size=1)
talker()
rospy.spin()
実行権限を与えます。
chmod +x scripts/time_pub2.py
コード解説
#!/usr/bin/env python
import rospy
from ros_tutorial.msg import Date
from datetime import datetime
cp scripts/time_sub.py scripts/time_sub2.py
vim scripts/time_sub2.py
3行目と6行目、10行目に変更を加えます。
time_sub2.py
#!/usr/bin/env python
import rospy
from ros_tutorial.msg import Date #changed
def callback(message):
print("date : %d , time : %f" % (message.date,message.time) ) #changed
if __name__ == "__main__":
rospy.init_node('time_sub')
sub = rospy.Subscriber('Date_and_Time', Date , callback) #changed
rospy.spin()
chmod +x scripts/time_sub2.py
コード解説
変更点だけ解説していきます。
from ros_tutorial.msg import Date
Dateをインポートしています。
print("date : %d , time : %f" % (message.date,message.time) )
dateはint型のため%d、timeはfloat型のため%fで表示しています。
sub = rospy.Subscriber('Date_and_Time', Date , callback)
トピック名をメッセージの型をDateに変更しています。
実行方法
それぞれ別のターミナルで実行しましょう。
roscore
rosrun ros_tutorial time_pub2.py
rosrun ros_tutorial time_sub2.py
実行結果
$ rosrun ros_tutorial time_sub2.py
date : 20181108 , time : 224947.85194
date : 20181108 , time : 224947.95175
date : 20181108 , time : 224948.05449
date : 20181108 , time : 224948.15677
date : 20181108 , time : 224948.25193
date : 20181108 , time : 224948.35248
date : 20181108 , time : 224948.45211
date : 20181108 , time : 224948.55515
date : 20181108 , time : 224948.6551
date : 20181108 , time : 224948.75641
date : 20181108 , time : 224948.85298
date : 20181108 , time : 224948.9519
date : 20181108 , time : 224949.05382
date : 20181108 , time : 224949.15634
date : 20181108 , time : 224949.25606
date : 20181108 , time : 224949.35245
date : 20181108 , time : 224949.45277
date : 20181108 , time : 224949.55351
date : 20181108 , time : 224949.65224
date : 20181108 , time : 224949.75421
date : 20181108 , time : 224949.8536
date : 20181108 , time : 224949.95257