exponenta event banner

rossvcclient

Подключение к серверу службы ROS

Описание

Использовать rossvcclient или ros.ServiceClient для создания клиентского объекта службы ROS. Этот клиент службы использует постоянное подключение для отправки запросов и получения ответов от сервера службы ROS. Подключение сохраняется до тех пор, пока клиент службы не будет удален или сервер службы не станет недоступен.

Используйте ros.ServiceClient синтаксис при подключении к определенному узлу ROS.

Примечание

В следующем выпуске Панель инструментов ROS будет использовать структуры сообщений вместо объектов для сообщений ROS.

Чтобы использовать структуры сообщений сейчас, установите "DataFormat" аргумент «имя-значение» для "struct". Для получения дополнительной информации см. Структуры сообщений ROS.

Создание

Описание

пример

client = rossvcclient(servicename) создает клиент службы с заданным ServiceName который подключается к и получает ServiceType от, сервера услуг. Синтаксис этой команды предотвращает запуск текущей программы MATLAB ® до тех пор, пока она не сможет подключиться к серверу служб .

client = rossvcclient(servicename,Name,Value) предоставляет дополнительные параметры, указанные одним или несколькими Name,Value аргументы пары.

[client,reqmsg] = rossvcclient(___) возвращает новое сообщение запроса на обслуживание в reqmsg, используя любой из аргументов из предыдущих синтаксисов. Тип сообщения reqmsg определяется услугой, которая client подключен к. Сообщение инициализируется значениями по умолчанию. Также можно создать сообщение запроса с помощью rosmessage.

[___] = rossvcclient(___,"DataFormat","struct") использует структуры сообщений вместо объектов. Для получения дополнительной информации см. Структуры сообщений ROS.

пример

client = ros.ServiceClient(node, name) создает клиент службы, который подключается к серверу службы. Клиент получает тип службы с сервера. Клиент службы подключается к ros.Node дескриптор объекта, node.

client = ros.ServiceClient(node, name,"Timeout",timeout) задает период времени ожидания в секундах для подключения клиента к серверу служб.

[___] = ros.ServiceClient(___,"DataFormat","struct") использует структуры сообщений вместо объектов. Для получения дополнительной информации см. Структуры сообщений ROS.

Свойства

развернуть все

Это свойство доступно только для чтения.

Имя службы, указанное как строковый скалярный или символьный вектор.

Пример: "/gazebo/get_model_state"

Это свойство доступно только для чтения.

Тип службы, указанный как строковый скалярный или символьный вектор.

Пример: "gazebo_msgs/GetModelState"

Формат сообщения, указанный как "object" или "struct". Это свойство необходимо задать при создании с помощью ввода «имя-значение». Для получения дополнительной информации см. Структуры сообщений ROS.

Функции объекта

rosmessageСоздание сообщений ROS
callВызовите служебный сервер ROS и получите ответ

Примеры

свернуть все

Подключение к сети ROS.

rosinit
Launching ROS Core...
Done in 0.6921 seconds.
Initializing ROS master on http://192.168.0.10:52010.
Initializing global node /matlab_global_node_32067 with NodeURI http://bat6315glnxa64:41453/

Настройка сервера службы и клиента. Используйте структуры для формата данных сообщения ROS.

server = rossvcserver('/test', 'std_srvs/Empty', @exampleHelperROSEmptyCallback,...
                      'DataFormat','struct');
client = rossvcclient('/test','DataFormat','struct');

Сервер обслуживания вызовов с сообщением по умолчанию.

response = call(client)
response = struct with fields:
    MessageType: 'std_srvs/EmptyResponse'

Завершите работу сети ROS.

rosshutdown
Shutting down global node /matlab_global_node_32067 with NodeURI http://bat6315glnxa64:41453/
Shutting down ROS master on http://192.168.0.10:52010.

Создание службы ROS путем создания ServiceServer объект и использование ServiceClient объекты для запроса информации по сети. Функция обратного вызова, используемая сервером, принимает строку, отменяет ее и возвращает обратную строку.

Запустите мастер и узел ROS.

master = ros.Core;
Launching ROS Core...
Done in 0.71166 seconds.
node = ros.Node('/test');

Создайте сервер служб. Этот сервер ожидает строку в качестве запроса и отвечает строкой на основе обратного вызова. Используйте структуры для формата данных сообщения ROS.

server = ros.ServiceServer(node,'/data/string',...
                            'roseus/StringString','DataFormat','struct');

Создайте функцию обратного вызова. Эта функция принимает входную строку в качестве Str имущество req и возвращает его как Str имущество resp. Определение функции показано здесь, но определено ниже примера. req - это сообщение ROS, созданное с помощью rosmessage.

function [resp] = flipString(~,req,resp)
% FLIPSTRING Reverses the order of a string in REQ and returns it in RESP.
resp.Str = fliplr(req.Str);
end

Назначение функции обратного вызова для входящих сервисных вызовов.

server.NewRequestFcn = @flipString;

Создайте клиент службы и подключитесь к серверу службы. Используйте структуры для формата данных сообщения ROS.

Создание сообщения запроса на основе клиента.

client = ros.ServiceClient(node,'/data/string','DataFormat','struct');
request = rosmessage(client);
request.Str = 'hello world';

Отправьте запрос на обслуживание и дождитесь ответа. Укажите, что служба ожидает ответа в течение 3 секунд.

response = call(client,request,'Timeout',3)
response = struct with fields:
    MessageType: 'roseus/StringStringResponse'
            Str: 'dlrow olleh'

Ответ представляет собой перевернутую строку из сообщения запроса.

Удалите клиент службы, сервер службы и узел ROS. Завершите работу хозяина ROS.

clear('client', 'server', 'node')
clear('master')
function [resp] = flipString(~,req,resp)
% FLIPSTRING Reverses the order of a string in REQ and returns it in RESP.
resp.Str = fliplr(req.Str);
end

Вопросы совместимости

развернуть все

Изменение поведения в будущем выпуске

Представлен в R2019b