はじめに
roscore実行時自動で出てくる/rosout/get_loggers
と/rosout/set_logger_level
の2つのサービスを例にROS PythonからServiceを呼ぶ時の手順をまとめました。
サービスについて調べる
1.まず,Service名
の確認
$ rosservice list
/rosout/get_loggers
/rosout/set_logger_level
2.次に,Serviceの型
とその型を定義しているパッケージ
の確認
Serviceの型のスラッシュの前部分,今回はroscpp
であることが判明した。
$ rosservice type /rosout/get_loggers
roscpp/GetLoggers
$ rosservice type /rosout/set_logger_level
roscpp/SetLoggerLevel
3.最後に,Serviceの型の構成
を確認
$ rossrv show roscpp/GetLoggers
---
roscpp/Logger[] loggers
string name
string level
$ rossrv show roscpp/SetLoggerLevel
string logger
string level
---
Pythonからの呼び出し
- サービス名が"/rosout/get_loggers"のサービスを呼び出す
get_loggers.py
# !/usr/bin/env python
import rospy
from roscpp.srv import GetLoggers
rospy.wait_for_service('/rosout/get_loggers')
get_loggers = rospy.ServiceProxy('/rosout/get_loggers', GetLoggers)
response = get_loggers()
print(response)
- サービス名が"/rosout/set_logger_level"のサービスを呼び出す
set_logger_level.py
# !/usr/bin/env python
import rospy
from roscpp.srv import SetLoggerLevel
rospy.wait_for_service('/rosout/set_logger_level')
set_logger_level = rospy.ServiceProxy('/rosout/set_logger_level', SetLoggerLevel)
set_logger_level("rosout","DEBUG")