Использование Сервисов

После создания необходимого типа сообщений, мы можем реализовать сам Сервис

Сервер Сервиса

Напишем программу, которая является сервером сервиса собственно выполняет сложение. 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

results matching ""

    No results matching ""