cp scripts/time_pub2.py scripts/date_server.py
vim scripts/date_server.py
プログラムを以下のように改良します。
date_server.py
#!/usr/bin/env python
import rospy
from ros_tutorial.srv import DateTrigger, DateTriggerResponse
from datetime import datetime
def callback_srv(data): #changed
l = []
d = DateTriggerResponse()
d.date = '' #9~12 changed
d.time = ''
try: #add
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(':',''))
d.success = True #22~25 changed
except:
d.success = False
return d
if __name__ == '__main__':
rospy.init_node('date_server') #changed
srv = rospy.Service('date_call', DateTrigger, callback_srv) #changed
rospy.spin()
実行権限を与えます。
chmod +x scripts/date_server.py
コード解説
time_pub2.pyから変更したところを解説していきます。
from ros_tutorial.srv import DateTrigger, DateTriggerResponse
今回作成したサービスファイルをインポートします。
def callback_srv(data):
callback_srvという関数名で定義してます。
d = DateTriggereResponse()
DateTriggereResponseをdという名前でインスタンス化しています。
try:
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(':',''))
d.success = True
def call(self):
for i in range(11):
print(i)
rospy.sleep(0.1)
self.res = self.call()
print("~~~~~~~~~~~~~~~~~~~~~~")
print(self.res)
print("~~~~~~~~~~~~~~~~~~~~~~")
rospy.sleep(1)