rossvcserver

Создайте сервер службы ROS

Описание

Использование rossvcserver или ros.ServiceServer чтобы создать сервер службы ROS, который может получать запросы от клиента службы ROS и отправлять ответы. Перед созданием клиента службы необходимо создать сервер rossvcclient.

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

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

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

Примечание

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

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

Создание

Описание

пример

server = rossvcserver(servicename,svctype) создает объект сервера служб с заданным ServiceType доступно в сети ROS под именем ServiceName. Объект службы не может отвечать на запросы на обслуживание, пока вы не задаете указателя на функцию коллбэка, NewMessageFcn.

server = rossvcserver(servicename,svctype,callback) задает функцию обратного вызова, которая создает ответ, когда сервер получает запрос. The callback задает NewMessageFcn свойство.

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

server = ros.ServiceServer(node, name,type) создает сервер службы, который присоединяется к узлу ROS, node. Сервер становится доступным через указанное имя службы и вводится, когда указатель на функцию обратного вызова задан в NewMessageFcn.

server = ros.ServiceServer(node, name,type,callback) задает функцию обратного вызова, которая установлена на NewMessageFcn свойство.

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

Свойства

расширить все

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

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

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

Типы данных: char | string

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

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

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

Типы данных: char | string

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

Функция обратного вызова службы требует как минимум трёх входных параметров с одним выходом. Первый аргумент, src, - связанный объект сервера служб. Второй аргумент, reqMsg, - объект сообщения запроса, отправленный сервисным клиентом. Третий аргумент является объектом ответного сообщения по умолчанию, defaultRespMsg. Коллбэк возвращает ответное сообщение, response, на основе сообщения запроса входа и отправляет его обратно сервисному клиенту. Используйте ответное сообщение по умолчанию в качестве начальной точки для построения сообщения запроса. Заголовок функции для коллбэка:

function response = serviceCallback(src,reqMsg,defaultRespMsg)

Задайте NewMessageFcn свойство как:

server.NewMessageFcn = @serviceCallback;

При установке коллбэка вы передаете дополнительные параметры в функцию обратного вызова, включив функцию обратного вызова и параметры в качестве элементов массива ячеек. Заголовок функции для коллбэка:

function response = serviceCallback(src,reqMsg,defaultRespMsg,userData)

Задайте NewMessageFcn свойство как:

server.NewMessageFcn = {@serviceCallback,userData};

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

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

rosmessageСоздание сообщений 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.

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

расширить все

Изменение поведения в будущем релизе

Введенный в R2019b