Вызовите сервисный сервер ROS и получите ответ
отправляет сообщение запроса на обслуживание по умолчанию и ожидает сервиса response
= call(serviceclient
)response
. Сообщение запроса на обслуживание по умолчанию является пустым сообщением типа serviceclient.ServiceType
.
задает сообщение запроса на обслуживание, response
= call(serviceclient
,requestmsg
)requestmsg
, быть отправленным службе.
Соединитесь с сетью ROS.
rosinit
Launching ROS Core... Done in 0.75124 seconds. Initializing ROS master on http://192.168.0.10:59077. Initializing global node /matlab_global_node_30951 with NodeURI http://bat1071901glnxa64:43547/
Настройте сервисный сервер и клиент. Используйте структуры для формата данных сообщения 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_30951 with NodeURI http://bat1071901glnxa64:43547/ Shutting down ROS master on http://192.168.0.10:59077.
Соединитесь с сетью ROS.
rosinit
Launching ROS Core... Done in 0.83413 seconds. Initializing ROS master on http://192.168.0.10:56909. Initializing global node /matlab_global_node_87889 with NodeURI http://bat1071901glnxa64:33207/
Настройте сервисный сервер и клиент. Этот сервер вычисляет сумму двух целых чисел и основан на сервисном примере ROS.
sumserver = rossvcserver('/sum','roscpp_tutorials/TwoInts',@exampleHelperROSSumCallback); sumclient = rossvcclient('/sum');
Получите сообщение запроса для клиента и измените параметры.
reqMsg = rosmessage(sumclient); reqMsg.A = 2; reqMsg.B = 1;
Вызовите сервис и получите ответ. Ответ должен быть суммой этих двух целых чисел, данных в сообщении запроса. Ожидайте 5 секунд сервиса испытать таймаут.
response = call(sumclient,reqMsg,'Timeout',5)
response = ROS TwoIntsResponse message with properties: MessageType: 'roscpp_tutorials/TwoIntsResponse' Sum: 3 Use showdetails to show the contents of the message
Закройте сеть ROS.
rosshutdown
Shutting down global node /matlab_global_node_87889 with NodeURI http://bat1071901glnxa64:33207/ Shutting down ROS master on http://192.168.0.10:56909.
serviceclient
— Сервисный клиентServiceClient
указатель на объектСервисный клиент в виде ServiceClient
указатель на объект.
requestmsg
— Запросите сообщениеMessage
указатель на объект | структураЗапросите сообщение в виде Message
указатель на объект или структура. Типом сообщения по умолчанию является serviceclient.ServiceType
.
Примечание
В будущем релизе ROS Toolbox будет использовать структуры сообщения вместо объектов для сообщений ROS.
Чтобы использовать структуры сообщения теперь, установите "DataFormat"
аргумент значения имени к "struct"
. Для получения дополнительной информации смотрите, что ROS передает Структуры.
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
"TimeOut",5
'TimeOut'
— Тайм-аут для сервисного ответа в секундахТайм-аут для сервисного ответа в секундах в виде разделенной запятой пары, состоящей из "Timeout"
и скаляр. Если сервисный клиент не получает сервисный ответ, и период тайм-аута протекает, call
отображает сообщение об ошибке и позволяет MATLAB® продолжить запускать текущую программу. Значение по умолчанию inf
препятствует тому, чтобы MATLAB запустил текущую программу, пока сервисный клиент не получает сервисный ответ.
'DataFormat'
— Формат сообщения"object"
(значение по умолчанию) | "struct"
Формат сообщения в виде "object"
или "struct"
. Установите это свойство на создании сервисного клиента, использующего вход значения имени. Для получения дополнительной информации смотрите, что ROS передает Структуры.
response
— Сообщение ответаMessage
указатель на объект | структураСообщение ответа отправляется сервисным сервером, возвращенным как Message
указатель на объект или структура.
Изменение поведения в будущем релизе
Можно теперь создать сообщения как структуры с полями, совпадающими со свойствами объекта сообщения. Используя структуры обычно улучшает производительность создания, обновления и использования сообщений ROS, но поля сообщения больше не подтверждаются, когда установлено. Типы сообщений и значения соответствующего поля от структур подтверждены, когда отправлено по сети.
Чтобы использовать сообщения ROS в качестве структур, используйте "DataFormat"
аргумент значения имени при создании издателей, подписчиков или других объектов ROS. Любые сообщения, сгенерированные от этих объектов, используют структуры.
pub = rospublisher("/scan","sensor_msgs/LaserScan","DataFormat","struct") msg = rosmessage(pub)
Можно также создать сообщения как структуры непосредственно, но убедиться, что задали формат данных как "struct"
для издателя, подписчика или другого ROS возражает также. Объекты ROS все еще используют объекты сообщения по умолчанию.
msg = rosmessage("/scan","sensor_msgs/LaserScan","DataFormat","struct") ... pub = rospublisher("/scan","sensor_msgs/LaserScan","DataFormat","struct")
В будущем релизе сообщения ROS будут использовать структуры по умолчанию, и объекты сообщения ROS будут удалены.
Для получения дополнительной информации смотрите, Улучшают Производительность ROS Используя Структуры сообщения.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.