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()を使用してエラーログを出力します。

Ros

Related Posts

VMWare FusionでUbuntu 18.04のディスク容量を上げる方法
VMWare FusionでUbuntu 18.04のディスク容量を上げる方法
概要 VMWare FusionでUbuntu 18.04の仮想ディスクを起動する際に、ハードディスクの容量を上げる方法について解説します。 手順 1. 仮想ディスクの電源をOFFにする 2. 設定ボタンを押して設定画面を開いた後に、...
Read More
rospyでImageデータを取得してOpenCVの配列として扱う
rospyでImageデータを取得してOpenCVの配列として扱う
概要 PythonでROS開発をする際、sensor_msgs/Image型のトピックを受信して色々な処理をかけたいときには、OpenCVの配列に変換した上で処理を行うと便利です。CvBridgeというsensor_msgs/Imag...
Read More
ネイティブアプリでROS通信をする際はFlutterとroslibがおすすめ
ネイティブアプリでROS通信をする際はFlutterとroslibがおすすめ
概要 ROSを起動させているロボットに対して、スマートデバイスからROSで通信を行いたい時があるときは、Flutterを用いたネイティブアプリで実装するのがおすすめです。 https://rb-station.com/blogs/ar...
Read More