rossvcclient

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

Описание

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

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

Создание

Описание

пример

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

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

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

пример

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

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

Свойства

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

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

Имя сервиса в виде строкового скаляра или вектора символов.

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

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

Тип сервиса в виде строкового скаляра или вектора символов.

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

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

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

Примеры

свернуть все

Соединитесь с сетью ROS.

rosinit
Launching ROS Core...
...................................Done in 1.4375 seconds.
Initializing ROS master on http://192.168.0.10:59296.
Initializing global node /matlab_global_node_91195 with NodeURI http://bat1072001glnxa64:44005/

Настройте сервисный сервер и клиент.

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

Вызовите сервисный сервер с сообщением по умолчанию.

response = call(client)
response = 
  ROS EmptyResponse message with properties:

    MessageType: 'std_srvs/EmptyResponse'

  Use showdetails to show the contents of the message

Закройте сеть ROS.

rosshutdown
Shutting down global node /matlab_global_node_91195 with NodeURI http://bat1072001glnxa64:44005/
Shutting down ROS master on http://192.168.0.10:59296.
.........

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

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

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

Создайте сервисный сервер. Этот сервер ожидает строку как запрос и отвечает строкой на основе коллбэка.

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

Создание функции обратного вызова. Эта функция берет входную строку в качестве 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;

Создайте сервисный клиент и подключение к сервисному серверу. Создайте сообщение запроса на основе клиента.

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

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

response = call(client,request,'Timeout',3)
response = 
  ROS StringStringResponse message with properties:

    MessageType: 'roseus/StringStringResponse'
            Str: 'dlrow olleh'

  Use showdetails to show the contents of the message

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

Очистите сервисный клиент, сервисный сервер и узел 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