主要内容

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类型.详情请参见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操作服务器。将顺序设置为anint328的值。

goalMsg。Order = 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。Order = int32(4);[resultMsg,resultState] = sendGoalAndWait(actClient,goalMsg)
resultMsg =带字段的结构:MessageType: 'actionlib_tutorials/FibonacciResult'序列:[0 1 1 2 3]
resultState = 'succeeded'
rosShowDetails (resultMsg)
ans = ' MessageType: actionlib_tutorials/FibonacciResult Sequence: [0,1,1,2,3]'

立即发送新的目标信息。

goalMsg。Order = 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引入

全部展开