Вызовите служебный сервер ROS и получите ответ
отправляет сообщение запроса на обслуживание по умолчанию и ожидает предоставления услуги response
= call(serviceclient
)response
. Сообщение запроса на обслуживание по умолчанию является пустым сообщением типа serviceclient.ServiceType
.
задает сообщение запроса на обслуживание, response
= call(serviceclient
,requestmsg
)requestmsg
, для отправки на службу.
Подключение к сети 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.
Подключение к сети ROS.
rosinit
Launching ROS Core... Done in 0.68205 seconds. Initializing ROS master on http://192.168.0.10:57635. Initializing global node /matlab_global_node_78536 with NodeURI http://bat6315glnxa64:35549/
Настройка сервера и клиента службы. Этот сервер вычисляет сумму двух целых чисел и основан на руководстве 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_78536 with NodeURI http://bat6315glnxa64:35549/ Shutting down ROS master on http://192.168.0.10:57635.
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"
. Установите это свойство при создании клиента службы с помощью входов name-value. Для получения дополнительной информации см. раздел Структуры сообщений 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.