Определите, доступен ли сервер ROS 2 ROS или сервиса
Соединитесь с сетью ROS.
rosinit
Launching ROS Core... Done in 0.70501 seconds. Initializing ROS master on http://192.168.0.10:53173. Initializing global node /matlab_global_node_44612 with NodeURI http://bat6312glnxa64:44533/
Настройте сервисный сервер. Используйте структуры для формата данных сообщения ROS.
server = rossvcserver('/test', 'std_srvs/Empty', @exampleHelperROSEmptyCallback,... 'DataFormat','struct'); client = rossvcclient('/test','DataFormat','struct');
Проверяйте, доступен ли сервисный сервер. Если это, ожидайте сервисного клиента, чтобы связать с сервером.
if(isServerAvailable(client)) [connectionStatus,connectionStatustext] = waitForServer(client) end
connectionStatus = logical
1
connectionStatustext = 'success'
Вызовите сервисный сервер с сообщением по умолчанию.
response = call(client)
response = struct with fields:
MessageType: 'std_srvs/EmptyResponse'
Если call
функция выше сбоев, это приводит к ошибке. Вместо ошибки, если вы предпочли бы реагировать на отказ вызова с помощью условных выражений, возвращают status
и statustext
выходные параметры от функции вызова. status
выведите указывает если вызов, за которым следуют, в то время как statustext
предоставляет дополнительную информацию.
numCallFailures = 0; [response,status,statustext] = call(client,"Timeout",3); if ~status numCallFailures = numCallFailues + 1; fprintf("Call failure number %d. Error cause: %s\n",numCallFailures,statustext) else disp(response) end
MessageType: 'std_srvs/EmptyResponse'
Закройте сеть ROS.
rosshutdown
Shutting down global node /matlab_global_node_44612 with NodeURI http://bat6312glnxa64:44533/ Shutting down ROS master on http://192.168.0.10:53173.
Создайте демонстрационную сеть ROS 2 с двумя узлами.
node_1 = ros2node("node_1"); node_2 = ros2node("node_2");
Настройте сервисный сервер и присоедините его к узлу ROS 2. Задайте функцию обратного вызова flipstring
, который инвертирует входную строку. Функция обратного вызова задана в конце этого примера.
server = ros2svcserver(node_1,'/test','test_msgs/BasicTypes',@flipString);
Настройте сервисный клиент того же сервисного типа и присоедините его к различному узлу.
client = ros2svcclient(node_2,'/test','test_msgs/BasicTypes');
Ожидайте сервисного клиента, чтобы связать с сервером.
[connectionStatus,connectionStatustext] = waitForServer(client)
connectionStatus = logical
1
connectionStatustext = 'success'
Создайте сообщение запроса на основе клиента. Присвойте строку соответствующему полю в сообщении, string_value
.
request = ros2message(client);
request.string_value = 'hello world';
Проверяйте, доступен ли сервисный сервер. Если это, отправьте запрос на обслуживание и ожидайте ответа. Укажите, что сервис ожидает 3 секунды ответа.
if(isServerAvailable(client)) response = call(client,request,'Timeout',3); end
Ответ является инвертированной строкой из сообщения запроса, которое вы видите в string_value
поле .
response.string_value
ans = 'dlrow olleh'
Если call
функция выше сбоев, это приводит к ошибке. Вместо ошибки, если вы предпочли бы реагировать на отказ вызова с помощью условных выражений, возвращают status
и statustext
выходные параметры от функции вызова. status
выведите указывает если вызов, за которым следуют, в то время как statustext
предоставляет дополнительную информацию.
numCallFailures = 0; [response,status,statustext] = call(client,request,"Timeout",3); if ~status numCallFailures = numCallFailues + 1; fprintf("Call failure number %d. Error cause: %s\n",numCallFailures,statustext) else disp(response.string_value) end
dlrow olleh
Функция обратного вызова, используемая, чтобы инвертировать строку, задана ниже.
function resp = flipString(req,resp) % FLIPSTRING Reverses the order of a string in REQ and returns it in RESP. resp.string_value = fliplr(req.string_value); end
client
— Сервисный клиент ROSros.ServiceClient
указатель на объект | ros2serviceclient
указатель на объектROS или сервисный клиент ROS 2 в виде ros.ServiceClient
или ros2serviceclient
указатель на объект, соответственно. Этот сервисный клиент позволяет вам отправить запросы к сервисному серверу.
status
— Состояние сервисной доступности сервераlogical
скалярСостояние сервисной доступности сервера, возвращенной как logical
скаляр. Если сервер того же имени и типа как client
не доступно, status
будет false
.
Указания и ограничения по применению:
Сервисные клиенты ROS 2 не поддерживаются.
Поддерживаемый только для Типа Сборки, Executable
.
Использование в блоке MATLAB Function не поддерживается.
rossvcclient
| rossvcserver
| ros2svcclient
| ros2svcserver
| call
| rosservice
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.