rossvcserver

Создайте сервисный сервер ROS

Описание

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

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

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

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

Создание

Синтаксис

server = rossvcserver(servicename,svctype)
server = rossvcserver(servicename,svctype,callback)
server = robotics.ros.ServiceServer(node, name,type)
server = robotics.ros.ServiceServer(node, name,type,callback)

Описание

пример

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

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

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

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

Свойства

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

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

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

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

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

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

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

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

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

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

Сервисная функция обратного вызова требует по крайней мере трех входных параметров с одним выводом. Первый аргумент, 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};

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

rosmessageСоздайте сообщения ROS

Примеры

свернуть все

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

rosinit
Initializing ROS master on http://ah-sradford:11311/.
Initializing global node /matlab_global_node_03934 with NodeURI http://ah-sradford:61301/

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

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

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

response = call(client)
A service client is calling

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_03934 with NodeURI http://ah-sradford:61301/
Shutting down ROS master on http://ah-sradford:11311/.

Представленный в R2015a