主要内容

ROS行动概述

客户端到服务器关系

ROS动作与指定的协议有一个客户端到服务器的通信关系。操作使用ROS主题将目标消息从客户机发送到服务器。您可以使用操作客户端取消目标。在接收到目标后,服务器对其进行处理并将信息返回给客户端。这些信息包括服务器的状态、当前目标的状态、操作期间对目标的反馈,以及目标完成时的结果消息。

操作客户端和操作服务器关系图。客户端可以向服务器发送目标、取消当前目标和取消所有目标消息。服务器可以向客户端发送当前状态、目标执行状态、反馈和结果消息。

使用sendGoal函数将目标发送到服务器。发送目标并等待它完成使用sendGoalAndWait.这个函数使您能够返回结果消息、目标的最终状态和服务器的状态。当服务器执行一个目标时,回调函数,FeedbackFcn,用于提供与该目标相关的数据(参见SimpleActionClient)。取消当前目标使用cancelGoal或者所有目标都在服务器上使用cancelAllGoals

使用sendFeedback函数在目标执行期间向客户端发送反馈消息。在目标执行期间,服务器调用ExecuteGoalFcn回调。你可以使用isPreemeptRequested在回调函数中检查客户端是否取消了目标或发送了一个新的目标来执行。

执行动作工作流

通常,在ROS网络上创建和执行ROS操作时会执行以下步骤。

工作流来执行ROS操作。

  • 要设置ROS操作服务器,请使用rosactionserver.通过键入,检查ROS网络上可用的操作rosaction列表在MATLAB中®命令窗口。

  • 使用rosactionclient创建动作客户端并将它们连接到服务器。指定ROS网络上当前可用的操作类型。使用waitForServer等待操作客户端连接到服务器。

  • 发送一个目标sendGoal.定义一个goalMsg这对应于操作类型。创建动作客户端时使用rosactionclient,空白goalMsg返回。您可以使用所需的参数修改此消息。

  • 当目标状态变成“活跃”,目标开始执行和ActivationFcn调用回调函数。有关修改此回调函数的详细信息,请参见SimpleActionClient

  • 而目标状态仍然存在“活跃”,服务器继续执行目标。每当收到新的反馈消息时,反馈回调函数就会定期处理关于此目标执行的信息。使用FeedbackFcn以访问或处理从ROS服务器发送的消息数据。

  • 当目标实现时,服务器返回结果消息和状态。使用ResultFcn回调以访问或处理结果消息和状态。

行动讯息及功能

ROS操作使用ROS消息发送目标并接收关于其执行的反馈。在MATLAB中,您可以使用回调函数访问或处理来自这些消息的反馈和结果信息。在创建SimpleActionClient对象时,通过将函数句柄分配给对象上的属性来指定回调函数。您可以使用rosactionclient

  • GoalMsg—目标信息包含目标信息。要执行一个操作,您必须发送一个目标消息,其中包含更新的目标信息(请参阅sendGoal)。目标消息的类型取决于ROS操作的类型。

  • ActivationFcn—一旦目标在动作服务器上收到,其状态变为“等待”直到服务器决定执行它。状态是“活跃”.函数中定义的回调函数ActivationFcn的属性SimpleActionClient对象。没有与此函数关联的ROS消息或数据。默认情况下,该函数只显示“目标是积极的”在MATLAB命令行中通知你目标正在执行。

    默认的函数句柄是:

    @ (~) disp (“目标是积极的”
  • FeedbackMsg—反馈消息包含目标执行过程中服务器发送给客户端的信息。反馈消息的类型取决于操作类型。此反馈包含当前状态和与目标执行进度相关的任何其他信息。使用sendFeedback函数从服务器发送反馈消息。

  • FeedbackFcn—反馈功能用于处理来自反馈消息的信息。反馈消息的类型取决于操作类型。每当收到新的反馈消息时,反馈函数在目标操作期间定期执行。默认情况下,该函数使用显示消息的详细信息showdetails.您可以在反馈函数中对反馈消息进行其他处理。

    默认的函数句柄是:

    @(~,味精)disp ([的反馈:showdetails(味精)])

    味精将反馈消息作为您定义的函数的输入参数。

  • ResultMsg-目标执行后,服务器将最终结果消息作为输出参数发送给客户端sendGoalsendGoalAndWait

  • ResultFcn-结果函数在目标完成时执行。此函数的输入包括结果消息和执行状态。结果消息的类型取决于操作类型。这条消息,味精,和地位,年代,与您使用时得到的输出相同sendGoalAndWait.此函数还可用于在目标完成后触发相关流程。

    默认的函数句柄是:

    @ (~ s味精)disp (['带有状态的结果'char (s),“:”showdetails(味精)])

另请参阅

||

相关的话题