主要内容

调用

叫活性氧ROS 2服务服务器并接收响应

描述

例子

响应=电话(serviceclient)发送一个默认服务请求消息并等待服务响应。默认的服务请求消息是一个空的信息类型serviceclient.ServiceType

例子

响应=电话(serviceclient,requestmsg)指定了一个服务请求消息,requestmsg发送给服务。

例子

(响应,状态,statustext]=调用(___)返回一个状态指示是否响应已成功收到,statustext捕获更多的信息状态,从以前的语法使用任何参数。如果调用失败,状态一个空的默认响应消息,这个函数不会显示错误。

例子

响应=电话(___、名称、值)指定的一个或多个提供额外的选项名称,值对参数,从以前的语法使用任何参数。

例子

全部折叠

连接到一个ROS网络。

rosinit
启动ROS核心….Done 1.1448秒。初始化ROS主在http://172.29.207.162:51634上。初始化全局节点/ matlab_global_node_07457 NodeURI http://dcc434238glnxa64:39411和http://localhost MasterURI: 51634。

建立一个服务器服务。使用结构ROS消息数据格式。

服务器= rossvcserver (/测试的,“std_srvs /空”@exampleHelperROSEmptyCallback,“DataFormat”,“结构”);客户= rossvcclient (/测试的,“DataFormat”,“结构”);

检查服务服务器是否可用。如果是,等待服务客户端连接到服务器。

如果(isServerAvailable(客户端))[connectionStatus connectionStatustext] = waitForServer(客户端)结束
connectionStatus =逻辑1
connectionStatustext = '成功'

使用默认消息调用服务的服务器。

=调用的响应(客户端)
响应=结构体字段:MessageType:“std_srvs / EmptyResponse”

如果调用上面的函数失败,它会导致错误。而不是一个错误,如果你更愿意对使用条件语句调用失败,返回状态statustext输出从调用函数。的状态输出表明如果调用成功了,statustext提供额外的信息。

numCallFailures = 0;(反应,地位,statustext) =调用(客户端,“超时”3);如果~地位numCallFailures = numCallFailues + 1;流(“叫失败数% d。错误原因:% s \ n”、numCallFailures statustext)其他的disp(响应)结束
MessageType:“std_srvs / EmptyResponse”

ROS网络关闭。

rosshutdown
关闭全局节点/ matlab_global_node_07457 NodeURI http://dcc434238glnxa64:39411和http://localhost MasterURI: 51634。在http://172.29.207.162:51634上关闭ROS的主人。

连接到一个ROS网络。

rosinit
启动ROS核心……在0.54991秒内完成。初始化ROS主在http://172.29.207.162:55775上。初始化全局节点/ matlab_global_node_39492 NodeURI http://dcc434238glnxa64:41551和http://localhost MasterURI: 55775。

服务器和客户端建立一个服务。这个服务器计算两个整数的和基于ROS服务教程。

sumserver = rossvcserver (/笔的,“roscpp_tutorials / TwoInts”,@exampleHelperROSSumCallback);sumclient = rossvcclient (/笔的);

客户端请求消息,修改参数。

reqMsg = rosmessage (sumclient);reqMsg。= 2;reqMsg。B = 1;

调用服务并获得响应。响应应该两个整数之和请求消息中。等待5秒超时服务。

=调用的响应(sumclient reqMsg,“超时”5)
响应= ROS TwoIntsResponse消息属性:MessageType:“roscpp_tutorials / TwoIntsResponse”金额:3使用showdetails显示消息的内容

ROS网络关闭。

rosshutdown
关闭全局节点/ matlab_global_node_39492 NodeURI http://dcc434238glnxa64:41551和http://localhost MasterURI: 55775。在http://172.29.207.162:55775上关闭ROS的主人。

创建一个示例ROS 2和两个节点网络。

node_1 = ros2node (“node_1”);node_2 = ros2node (“node_2”);

建立一个服务服务器并将其附加到ROS 2节点。指定回调函数flipstring输入字符串,翻转。回调函数定义在这个例子。

服务器= ros2svcserver (node_1,/测试的,“test_msgs / BasicTypes”,@flipString);

建立一个服务客户端相同服务的类型,并将其附加到另一个节点。

客户= ros2svcclient (node_2,/测试的,“test_msgs / BasicTypes”);

等待服务客户端连接到服务器。

[connectionStatus, connectionStatustext] = waitForServer(客户端)
connectionStatus =逻辑1
connectionStatustext = '成功'

创建一个基于客户端请求消息。指定字符串中对应的字段信息,string_value

请求= ros2message(客户端);请求。string_value =“hello world”;

检查服务服务器是否可用。如果是,发送一个服务请求,并等待响应。指定服务3秒等待一个响应。

如果(isServerAvailable(客户端))=调用的响应(客户机请求,“超时”3);结束

响应是一个翻转字符串从请求消息,你看到的string_value字段。

response.string_value
ans = ' dlrow olleh”

如果调用上面的函数失败,它会导致错误。而不是一个错误,如果你更愿意对使用条件语句调用失败,返回状态statustext输出从调用函数。的状态输出表明如果调用成功了,statustext提供额外的信息。

numCallFailures = 0;[反应,地位,statustext] =调用(客户机请求,“超时”3);如果~地位numCallFailures = numCallFailues + 1;流(“叫失败数% d。错误原因:% s \ n”、numCallFailures statustext)其他的disp (response.string_value)结束
dlrow olleh

回调函数用于翻转字符串如下定义。

函数resp = flipString(要求、职责)% FLIPSTRING逆转在请求并返回一个字符串的顺序分别地。分别地。string_value = fliplr (req.string_value);结束

输入参数

全部折叠

活性氧ROS 2服务客户,作为一个指定ros.ServiceClientros2serviceclient对象处理,分别。

请求消息,指定为一个消息对象处理或结构。默认的消息类型serviceclient.ServiceType

请注意

在未来的版本中,ROS工具箱将使用的消息结构,而不是对象ROS的消息。

现在使用的消息结构,设置“DataFormat”名称-值参数“结构”。有关更多信息,请参见ROS消息结构

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:“超时”,5

的服务响应超时秒,指定为逗号分隔两人组成的“超时”和一个标量。如果服务端没有收到服务响应,超时时间流逝,调用显示一个错误消息并让MATLAB®当前程序继续运行。的默认值防止MATLAB运行当前的程序,直到服务端接收到服务响应。

消息格式ROS服务客户,指定为“对象”“结构”。设置该属性在创建服务端使用名称-值输入。有关更多信息,请参见ROS消息结构。这种说法只适用于ROS服务客户端。

输出参数

全部折叠

服务响应消息发送的服务器,作为一个返回消息对象处理或结构。

服务调用的状态,作为一个返回逻辑标量。如果调用失败,地位

请注意

使用状态输出参数当你使用调用的入口点函数的代码生成。这将避免运行时错误和输出状态相反,可以对调用代码。

状态文本相关的服务调用状态,返回以下之一:

  • “成功”——服务响应成功收到。

  • “输入”——函数的输入是无效的。

  • “超时”——服务响应是在指定的超时没有收到。

  • “未知”——服务响应是没有收到由于未知错误。

提示

  • ROS 2服务服务器不能直接给客户沟通回调执行中的错误。在这种情况下,服务器只返回默认的响应没有任何失败的迹象。因此,建议使用try - catch块在回调函数中,并设置响应消息中的特定领域交流的成功/失败回调在服务器端执行。

扩展功能

版本历史

介绍了R2019b

全部展开

在未来的发布行为改变