主要内容

rosactionclient

创建ROS动作客户端

描述

使用rosactionclient使用。连接到操作服务器SimpleActionClient要求行动目标的执行。您可以得到执行过程的反馈,并随时取消目标。的SimpleActionClient对象封装了一个简单的操作客户端,并使您能够一次跟踪一个目标。

创建

描述

例子

客户端= rosactionclient (actionname为指定的ROS创建客户端ActionName.客户端自动确定操作类型。如果该操作不可用,该函数将显示一个错误。

使用rosactionclient连接到操作服务器并请求执行操作目标。您可以随时获得执行进度的反馈,并取消目标。

客户端= rosactionclient (actionnameactiontype创建具有指定名称和类型的操作客户端(ActionType).如果操作不可用,或者名称和类型不匹配,函数将显示错误。

客户端goalMsg) = rosactionclient (___返回一个目标消息,以发送使用前面语法中的任何参数创建的操作客户端。的目标消息使用该消息的默认值初始化。

如果ActionFcnFeedbackFcn,ResultFcn定义了回调函数,当目标在操作服务器上进行处理时调用它们。与先前发送的目标相关联的所有回调都被禁用,但先前的目标不会被取消。

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

客户端= ros。SimpleActionClient (节点actionname为指定的ROS操作名称创建一个客户端。的节点节点已连接到ROS网络的对象。客户端自动确定操作类型。如果该操作不可用,该函数将显示一个错误。

客户端= ros。SimpleActionClient (节点actionnameactiontype使用指定的名称和类型创建操作客户端。您可以使用来获取操作的类型rosaction类型actionname

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

属性

全部展开

ROS动作名称,作为字符向量返回。操作名称必须匹配其中一个主题rosaction(“列表”)输出。

ROS动作的动作类型,作为字符串标量或字符向量返回。您可以使用来获取操作的操作类型rosaction类型< action_name >.有关详细信息,请参见rosaction

指示客户端是否连接到ROS动作服务器,返回为真正的.使用waitForServer在设置操作客户端时等待服务器连接。

跟踪目标,返回ROS消息。此消息是此客户端发送的最后一个目标消息。目标消息取决于操作类型。

目标状态,返回如下值之一:

  • “等待”-目标已收到,但尚未被接受或拒绝。

  • “活跃”目标已被接受并正在服务器上运行。

  • “成功”目标执行成功。

  • “抢占”-一个动作客户端在目标完成执行之前取消了目标。

  • “失败”目标在完成执行前被中止。操作服务器通常会中止一个目标。

  • “拒绝”这个进球没有被接受“等待”状态。动作服务器通常会触发此状态。

  • “回忆”-一个客户取消了进球,当它在“等待”状态。

  • 《迷失》—动作客户端内部错误。

激活函数,作为函数句柄返回。此函数在以下情况下执行GoalState被设置为“活跃”.缺省情况下,显示“目标是积极的。”.可以设置为[]让操作客户端在激活时不做任何操作。

反馈函数,作为函数句柄返回。当从操作服务器接收到新的反馈消息时,此函数将执行。缺省情况下,显示消息的详细信息。可以设置为[]让行动客户不给予任何反馈。

结果函数,作为函数句柄返回。该函数在服务器完成目标执行并返回结果状态和消息时执行。缺省情况下,显示消息的状态和详细信息。可以设置为[]让动作客户端在目标完成后什么也不做。

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

对象的功能

cancelGoal 取消客户端发送的最后一个目标
cancelAllGoals 取消动作服务器上的所有目标
rosmessage 创建ROS消息
sendGoal 发送目标消息到动作服务器
sendGoalAndWait 发送目标信息并等待结果
waitForServer 等待操作服务器启动

例子

全部折叠

这个示例展示了如何创建一个ROS操作客户端并执行该操作。操作类型必须在操作服务器运行时预先设置。

你一定设置好了“/斐波那契”动作类型。要运行该操作服务器,在ROS系统上使用以下命令:

rosrun actionlib_tutorials fibonacci_server

连接到ROS网络您必须连接到一个ROS网络,以收集有关可用操作的信息。取代ipaddress用你的网络地址。

ipaddress =“192.168.203.133”;rosinit (ipaddress, 11311)
使用NodeURI http://192.168.203.1:54283/初始化全局节点/matlab_global_node_81947

列出网络上可用的操作。在这个网络上设置的唯一操作是“/斐波那契”行动。

rosaction列表
/斐波那契

通过指定操作名称来创建操作客户端。对ROS消息使用结构。

[actClient, goalMsg] = rosactionclient (“/斐波那契”“DataFormat”“结构”);

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

waitForServer (actClient);

fibonacci动作将计算目标消息中指定的给定顺序的fibonacci序列。目标消息是在创建操作客户端时返回的,可以通过修改将目标发送到ROS操作服务器。将顺序设置为int32值8。

goalMsg。订单= int32 (8);

发送目标,等待它的完成。指定10秒的超时时间以完成操作。

[resultMsg, resultState] = sendGoalAndWait (actClient goalMsg 10);
rosShowDetails (resultMsg)
ans = ' MessageType: actionlib_tutorials/FibonacciResult Sequence: [0,1, 1, 2, 3, 5, 8, 13, 21]'

断开ROS网络。

rosshutdown
使用NodeURI http://192.168.203.1:54283/关闭全局节点/matlab_global_node_81947

这个示例展示了如何发送和取消ROS操作的目标。操作类型必须在操作服务器运行时预先设置。

你一定设置好了“/斐波那契”动作类型。要运行该操作服务器,在ROS系统上使用以下命令:

rosrun actionlib_tutorials fibonacci_server

首先,设置一个ROS操作客户端。然后,发送一个带有修改参数的目标消息。最后,取消你的目标和行动服务器上的所有目标。

连接指定IP地址的ROS网络。创建一个连接到ROS网络的ROS动作客户端rosactionclient.指定操作名称。等待客户端连接到服务器。

rosinit (“192.168.203.133”, 11311)
使用NodeURI http://192.168.203.1:55284/初始化全局节点/matlab_global_node_18287
[actClient, goalMsg] = rosactionclient (“/斐波那契”“DataFormat”“结构”);waitForServer (actClient);

发送带有修改参数的目标消息。等待目标完成执行。

goalMsg。订单= int32 (4);[resultMsg, resultState] = sendGoalAndWait (actClient goalMsg)
resultMsg =结构体字段:MessageType: 'actionlib_tutorials/FibonacciResult' Sequence: [0 1 1 2 3]
resultState = '成功'
rosShowDetails (resultMsg)
ans = ' MessageType: actionlib_tutorials/FibonacciResult Sequence: [0,1,1,2,3]'

发送一个新的目标信息,不要等待。

goalMsg。订单= int32 (5);sendGoal (actClient goalMsg)

在ROS操作客户端上取消目标,actClient

cancelGoal (actClient)

取消操作服务器上的所有目标actClient连接到。

cancelAllGoals (actClient)

删除操作客户端。

删除(actClient)

断开ROS网络。

rosshutdown
使用NodeURI http://192.168.203.1:55284/关闭全局节点/matlab_global_node_18287

兼容性的考虑

全部展开

未来版本中的行为改变

扩展功能

介绍了R2019b