exponenta event banner

rossvcserver

Создание сервера службы ROS

Описание

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

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

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

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

Примечание

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

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

Создание

Описание

пример

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

server = rossvcserver(servicename,svctype,callback) определяет функцию обратного вызова, которая создает ответ при получении сервером запроса. 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". Это свойство необходимо задать при создании с помощью ввода «имя-значение». Для получения дополнительной информации см. Структуры сообщений 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