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". Вы должны задать это свойство при создании с помощью входов name-value. Для получения дополнительной информации см. раздел Структуры сообщений 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