Action. Пример клиента

На прошлом уроке мы рассмотрели серверную часть экшн-сервера ROS, а в этом напишем клиента для нашего экшна.

Как правило, клиент экшн-сервера - это часть какого-то большого пакета, который реализует взаимодействие с пользователем. Например, в rviz передача цели, до который роботу надо ехать при помощи системы навигации, происходит именно через экшн-клиент RVIZ.

Как мы помним, наш экшн-сервер считал ряд Фибоначчи до заданного члена и возвращал нам всю последовательность. Клиент, которого мы будем писать, будет передавать задание серверу на расчет последовательности и выводить результат после окончания расчета.

import rospy
import actionlib

from actionlib_tutorials.msg import FibonacciAction, FibonacciGoal

def fibonacci_client():

    client = actionlib.SimpleActionClient('fibonacci', FibonacciAction)
    client.wait_for_server()
    goal = FibonacciGoal(order=5)
    client.send_goal(goal)

    client.wait_for_result()

    return client.get_result()


rospy.init_node('fibonacci_client')
result = fibonacci_client()

print("Have result:")
print(result)

Подключаем все необходимые библиотеки и сообщения

import rospy
import actionlib

from actionlib_tutorials.msg import FibonacciAction, FibonacciGoal

Инициализируем клиента для сервера. В параметрах укажем имя Экшен Сервера (fibonacci) и тип используемых сообщений (FibonacciAction)

client = actionlib.SimpleActionClient('fibonacci', FibonacciAction)

Ожидаем подключение к серверу (необходимо запустить сервер, чтобы программы клиент смогла работать далее)

client.wait_for_server()

Создадим объект `Goal, обозначим, что хотим расчет до 5. И запустим выполнение задания.

goal = FibonacciGoal(order=5)
client.send_goal(goal)

Далее мы ожидаем выполнение задания. После получения результата мы его возвращаем и выходим функции.

client.wait_for_result()
return client.get_result()

Запустим и проверим

Перед запуском клиента проверим, что у нас запущен Action Server

python3 action_client.py
====
sequence: [0, 1, 1, 2, 3, 5]

Наш Action Client работает.

results matching ""

    No results matching ""