Использование Сервисов
После создания необходимого типа сообщений, мы можем реализовать сам Сервис
Сервер Сервиса
Напишем программу, которая является сервером сервиса собственно выполняет сложение. src/add_two_ints_server.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import rospy
from base_ros.srv import AddTwoInts, AddTwoIntsResponse
def handle_add_two_ints(req):
print("Returning [%s + %s = %s]"%(req.x, req.y, (req.x + req.y)))
return AddTwoIntsResponse(req.x + req.y)
def add_two_ints_server():
rospy.init_node('add_two_ints_server')
s = rospy.Service('add_two_ints', AddTwoInts, handle_add_two_ints)
print('Ready to add two ints.')
rospy.spin()
if __name__ == "__main__":
add_two_ints_server()
Функция add_two_ints_server реализует обработчик ROS для обработки запроса. При поступлении запроса, вызывается функция handle_add_two_ints, которая суммирует два uint32 и возвращает результат.
Запустим наш сервер:
python3 add_two_ints_server.py
Для быстрой проверки работоспособности сервиса, мы можем выполнить запрос к сервису из командной строки, использую утилиту rosservice
rosservice call /add_two_ints "{x: 1, y: 2}"
Мы увидим в логах запущенного сервиса и в нашем терминале, что программа отработала верно.
Сервис Клиент
Помимо сервера, мы должны уметь создавать и клиенты (программы которые вызывают сервисы).
Пример клиента src/add_two_ints_client.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import rospy
from base_ros.srv import AddTwoInts
def add_two_ints_client(x, y):
rospy.wait_for_service('add_two_ints')
try:
add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts)
resp = add_two_ints(x, y)
return resp.sum
except rospy.ServiceException as e:
print("Service call failed: {}".format(e))
if __name__ == "__main__":
print(add_two_ints_client(10, 22))
Данный скрипт вызывает сервис сложения с значениями 10 и 22.
Если при запущенном сервере add_two_ints_server запустить программу add_two_ints_client.py, то можно увидеть результат сложения.
python3 ~/catkin_ws/src/base_ros/src/add_two_ints_client.py
32
В реальности же, понятно, что сервисы делаю что-то более сложное.
Обучающее видео по созданию Клиента для Сервиса: https://youtu.be/-OPoIGAGuuA