调用
叫活性氧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服务客户端与一个定制的回调函数
创建一个示例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);结束
输入参数
serviceclient
- - - - - -服务客户端
ros.ServiceClient
对象句柄|ros2serviclient
对象句柄
活性氧ROS 2服务客户,作为一个指定ros.ServiceClient
或ros2serviceclient
对象处理,分别。
requestmsg
- - - - - -请求消息
消息
对象句柄|结构
请求消息,指定为一个消息
对象处理或结构。默认的消息类型serviceclient.ServiceType
。
名称-值参数
指定可选的双参数作为Name1 = Value1,…,以=家
,在那里的名字
参数名称和吗价值
相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。
R2021a之前,用逗号来分隔每一个名称和值,并附上的名字
在报价。
例子:“超时”,5
超时
- - - - - -的服务响应超时秒
正(默认)|标量
的服务响应超时秒,指定为逗号分隔两人组成的“超时”
和一个标量。如果服务端没有收到服务响应,超时时间流逝,调用
显示一个错误消息并让MATLAB®当前程序继续运行。的默认值正
防止MATLAB运行当前的程序,直到服务端接收到服务响应。
DataFormat
- - - - - -消息格式ROS服务客户
“对象”
(默认)|“结构”
消息格式ROS服务客户,指定为“对象”
或“结构”
。设置该属性在创建服务端使用名称-值输入。有关更多信息,请参见ROS消息结构。这种说法只适用于ROS服务客户端。
输出参数
响应
——响应消息
消息
对象处理|结构
服务响应消息发送的服务器,作为一个返回消息
对象处理或结构。
状态
——服务调用的状态
逻辑
标量
服务调用的状态,作为一个返回逻辑
标量。如果调用失败,地位假
。
请注意
使用状态
输出参数当你使用调用的入口点函数的代码生成。这将避免运行时错误和输出状态相反,可以对调用代码。
statustext
——状态文本与服务调用状态有关
特征向量
状态文本相关的服务调用状态,返回以下之一:
“成功”
——服务响应成功收到。“输入”
——函数的输入是无效的。“超时”
——服务响应是在指定的超时没有收到。“未知”
——服务响应是没有收到由于未知错误。
提示
ROS 2服务服务器不能直接给客户沟通回调执行中的错误。在这种情况下,服务器只返回默认的响应没有任何失败的迹象。因此,建议使用try - catch块在回调函数中,并设置响应消息中的特定领域交流的成功/失败回调在服务器端执行。
扩展功能
C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。
使用笔记和限制:
金宝app只支持对于构建类型,
可执行的
。使用在MATLAB函数不支持块。金宝app
版本历史
介绍了R2019bR2021a: ROS消息结构
在未来的发布行为改变
您现在可以创建消息结构字段匹配消息对象的属性。通常使用结构提高了性能的创建、更新和使用ROS消息,但消息字段设置时不再进行验证。消息类型和相应的字段值的结构进行验证,当在网络上发送。
使用ROS消息结构,使用“DataFormat”
名称-值参数在创建你的出版商,用户或其他ROS对象。从这些对象生成的任何消息将利用结构。
酒吧= rospublisher (“/扫描”,“sensor_msgs /提升”,“DataFormat”,“结构”)味精= rosmessage(酒吧)
你也可以直接创建消息结构,但确保指定的数据格式“结构”
出版商,用户或其他ROS对象。ROS对象仍然使用默认消息对象。
味精= rosmessage (“/扫描”,“sensor_msgs /提升”,“DataFormat”,“结构”)…酒吧= rospublisher (“/扫描”,“sensor_msgs /提升”,“DataFormat”,“结构”)
在将来的版本中,ROS消息默认将使用结构和ROS消息对象将被删除。
有关更多信息,请参见提高性能的ROS使用消息的结构。
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。