rossvcclient

Свяжите с сервисным сервером ROS

Описание

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

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

Примечание

В будущем релизе ROS Toolbox будет использовать структуры сообщения вместо объектов для сообщений 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.75124 seconds.
Initializing ROS master on http://192.168.0.10:59077.
Initializing global node /matlab_global_node_30951 with NodeURI http://bat1071901glnxa64:43547/

Настройте сервисный сервер и клиент. Используйте структуры для формата данных сообщения 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_30951 with NodeURI http://bat1071901glnxa64:43547/
Shutting down ROS master on http://192.168.0.10:59077.

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

Запустите ведущее устройство ROS и узел.

master = ros.Core;
Launching ROS Core...
Done in 0.78447 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