ROSでパッケージを作成する時に他のサービスが発行するトピックに依存している時など、他のサービスが立ち上がるまで待つ必要がある時があります。
その場合、wait_for_service()関数を使用することで実現できます。この関数は、指定したサービスが提供されるまでPythonスクリプトをブロックし、指定されたタイムアウトが経過すると例外を投げます。
コード例
#!/usr/bin/env python
import rospy
from std_srvs.srv import Empty
rospy.init_node('wait_for_service')
# サービスが提供されるまで待機
rospy.wait_for_service('/my_service')
try:
# サービスを使用する
my_service = rospy.ServiceProxy('/my_service', Empty)
response = my_service()
rospy.loginfo(response)
except rospy.ServiceException as e:
rospy.logerr("Service call failed: %s" % e)
この例では、/my_serviceサービスが提供されるまでPythonスクリプトがブロックされます。サービスが提供されると、tryブロック内でmy_service()関数を使用してサービスを呼び出します。もしサービスの呼び出しが失敗した場合は、rospy.logerr()を使用してエラーログを出力します。



