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 работает.