主要内容

rossvcserver

创建ROS服务服务器

描述

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

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

服务具有关联的消息类型,并包含一对消息:一条用于请求,另一条用于响应。服务服务器接收请求,根据调用函数构造适当的响应,并将其返回给客户端。服务服务器的行为本质上是异步的,因为它仅在服务客户端连接到ROS网络并发出呼叫。

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

请注意

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

要立即使用消息结构,请设置“DataFormat”将值参数命名为“结构”.有关更多信息,请参见活性氧信息结构

创建

描述

例子

服务器= rossvcserver (svctype创建具有指定名称的服务服务器对象服务类型在ROS网络中可用.在指定函数句柄回调之前,服务对象无法响应服务请求,NewMessageFcn

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

___) = rossvcclient (___“DataFormat”,“结构”)使用消息结构,而不是具有前面语法中任何参数的对象。有关详细信息,请参阅活性氧信息结构

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

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

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

属性

全部展开

此属性是只读的。

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

例子:“/gazebo/get_model_state”

数据类型:烧焦|字符串

此属性是只读的。

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

例子:“gazebo_msgs/GetModelState”

数据类型:烧焦|字符串

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

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

作用响应= serviceCallback (reqMsg src defaultRespMsg)

指定NewMessageFcn物业名称:

服务器。NewMessageFcn = @serviceCallback;

设置回调时,可以通过将回调函数和参数都作为单元格数组的元素来向回调函数传递其他参数。回调函数的函数头为:

作用响应= serviceCallback (src, reqMsg defaultRespMsg,用户数据)

指定NewMessageFcn物业名称:

server.NewMessageFcn={@serviceCallback,userData};

消息格式,指定为“对象”“结构”。必须使用名称值输入在创建时设置此属性。有关详细信息,请参阅活性氧信息结构

对象的功能

rosmessage 创建ROS消息

例子

全部崩溃

连接到ROS网络。

松香
启动ROS Core... . 1.4074秒完成。在http://192.168.0.10:53802上初始化ROS master。使用NodeURI http://dcc864407glnxa64:45477/初始化全局节点/matlab_global_node_32577

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

服务器= rossvcserver (/测试的'std_SRV/空'@exampleHelperROSEmptyCallback,...“数据格式”“结构”);client=rossvcclient(/测试的“数据格式”“结构”);

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

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

使用默认消息呼叫服务服务器。

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

如果调用如果上述函数失败,则会导致错误。如果您希望使用条件对调用失败作出反应,请返回地位statustext调用函数的输出。的地位输出指示调用是否成功,而statustext提供额外的信息。

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

关闭ROS网络。

rosshutdown
使用NodeURI http://dcc864407glnxa64:45477/关闭全局节点/matlab_global_node_32577

兼容性考虑

全部展开

未来版本中的行为更改

未来版本中的行为更改

扩展功能

介绍了R2019b