主要内容

rossvcserver

创建ROS服务服务器

描述

使用rossvcserverros。ServiceServer创建一个ROS服务服务器,该服务器可以接收来自ROS服务客户端的请求并向其发送响应。在创建业务客户端之前,必须先创建业务服务器rossvcclient

当您创建服务客户机时,它将建立到服务器的连接。当客户端和服务器都存在并且可以互相连接时,连接就会持续。创建服务服务器时,它将自己注册到ROS主服务器。若要获取服务列表,或获取有关当前ROS网络上可用的特定服务的信息,请使用rosservice函数。

该服务具有关联的消息类型,并包含一对消息:一个用于请求,一个用于响应。服务服务器接收请求,根据调用函数构造适当的响应,并将其返回给客户机。服务服务器的行为本质上是异步的,因为只有当服务客户机连接到ROS网络并发出调用时,服务服务器才会变得活跃。

使用ros。ServiceServer语法,当连接到特定的ROS节点时。

请注意

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

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

创建

描述

例子

服务器= rossvcserver (svctype属性创建服务服务器对象ServiceType在ROS网络中可用的名称。在指定函数句柄回调之前,服务对象不能响应服务请求,NewMessageFcn

服务器= rossvcserver (svctype回调指定当服务器接收到请求时构造响应的回调函数。的回调指定了NewMessageFcn财产。

___= rossvcclient(___“DataFormat”,“结构”)使用消息结构而不是带有前面语法中的任何参数的对象。有关更多信息,请参见ROS消息结构

Server = ros。ServiceServer(节点的名字类型创建连接到ROS节点的服务服务器,节点。中指定回调函数句柄后,服务器通过指定的服务名称和类型变得可用NewMessageFcn

Server = ros。ServiceServer(节点的名字类型回调指定回调函数,该函数被设置为NewMessageFcn财产。

___= ros。ServiceServer (___“DataFormat”,“结构”)使用消息结构而不是对象。有关更多信息,请参见ROS消息结构

属性

全部展开

此属性是只读的。

服务的名称,指定为字符串标量或字符向量。

例子:“/露台/ get_model_state”

数据类型:字符|字符串

此属性是只读的。

服务类型,指定为字符串标量或字符向量。

例子:“gazebo_msgs / GetModelState”

数据类型:字符|字符串

属性,指定为函数句柄或单元格数组。在单元格数组的第一个元素中,指定表示函数名的函数句柄、字符串标量或字符向量。在后续元素中,指定用户数据。

服务回调函数至少需要三个输入参数和一个输出。第一个论证,src,是关联的服务服务器对象。第二个论点,reqMsg,是服务客户端发送的请求消息对象。第三个参数是默认的响应消息对象,defaultRespMsg。回调函数返回一条响应消息,响应,并将其发送回服务客户机。使用默认响应消息作为构造请求消息的起点。回调的函数头是:

函数response = serviceCallback(src,reqMsg,defaultRespMsg)

指定NewMessageFcn属性:

服务器。NewMessageFcn = @serviceCallback;

设置回调函数时,通过将回调函数和参数同时包含为单元格数组的元素,将附加参数传递给回调函数。回调的函数头是:

函数response = serviceCallback(src,reqMsg,defaultRespMsg,userData)

指定NewMessageFcn属性:

服务器。NewMessageFcn = {@serviceCallback,userData};

消息格式,指定为“对象”“结构”。必须在创建时使用名称-值输入设置此属性。有关更多信息,请参见ROS消息结构

对象的功能

rosmessage 创建ROS消息

例子

全部折叠

连接ROS网络。

rosinit
启动ROS核心…耗时0.35385秒。在http://172.29.209.26:59266上初始化ROS master。初始化全局节点/matlab_global_node_04063,使用NodeURI http://dcc245873glnxa64:37529/和MasterURI http://localhost:59266。

设置业务服务器。使用ROS消息数据格式的结构。

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

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

如果(isServerAvailable(client)) [connectionStatus,connectionStatustext] = waitForServer(client)结束
connectionStatus =逻辑1
connectionStatustext = 'success'

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

响应=呼叫(客户端)
响应=带字段的结构:MessageType:“std_srvs / EmptyResponse”

如果调用上述函数失败,将导致错误。方法,而不是返回错误,如果希望使用条件对调用失败作出反应,则返回状态而且statustext调用函数的输出。的状态输出表示调用是否成功,而statustext提供附加信息。

numcallfails = 0;[response,status,statustext] = call(客户端,“超时”3);如果~status numcallfails = numcallfails + 1;流(“呼叫失败号码%d。错误原因:%s\n"、numCallFailures statustext)其他的disp(响应)结束
MessageType:“std_srvs / EmptyResponse”

关闭ROS网络。

rosshutdown
使用NodeURI http://dcc245873glnxa64:37529/和MasterURI http://localhost:59266关闭全局节点/matlab_global_node_04063。在http://172.29.209.26:59266上关闭ROS master。

扩展功能

版本历史

R2019b引入

全部展开