cp scripts/time_pub2.py scripts/date_server.py
vim scripts/date_server.py
プログラムを以下のように改良します。
date_server.py
#!/usr/bin/env python import rospyfrom ros_tutorial.srv import DateTrigger, DateTriggerResponsefrom datetime import datetimedefcallback_srv(data): #changed l = [] d =DateTriggerResponse() d.date =''#9~12 changed d.time =''try:#add now = datetime.now() l =str(now)for i inrange(0,10): d.date += l[i]for i inrange(11,25): d.time += l[i] d.date =int(d.date.replace('-', '')) d.time =float(d.time.replace(':','')) d.success =True#22~25 changedexcept: d.success =Falsereturn dif__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)