[Documentation] [TitleIndex] [WordIndex

English

简体中文

简介

此页面不适合 '刚入门' actionlib的人。相反,它描述了动作客户端和动作服务器(action clients & servers)之间相互作用的底层机制。

如果您仅想使用SimpleActionClientSimpleActionServer,则无需了解此页面上的概念。 但是,如果简单的客户端和服务器还不具备足够的描述性,则理解这些概念可深刻理解调试客户端/服务器之间的交互或者实现客户端/服务器的策略。

高级客户端/服务器交互技术

服务器描述

服务器的状态机

注意,该状态机仅跟踪单个目标点状态,而不是 ActionServer 本身。因此,对于系统中的每个目标点系统都存在一个状态机与之对应。

服务器状态转换

服务器状态

中间状态:

终端状态:

并发问题

客户端描述

客户端的状态机

Client Transitions客户端状态的转换

服务器触发的转换:

客户端触发转换:

"跳过(Skipping)"的状态:

动作(Action)的接口和传输层


ROS 消息

数据关联和目标的ID

消息介绍

`goal` 话题:发送目标点

cancel 话题: 取消目标点


status 话题: 服务器目标点的状态更新

`feedback` 话题:异步目标信息

`result` 话题:完成目标后的信息

策略

简单动作客户端(Simple Action Client)

客户端状态的分歧

多目标点的策略

为简单起见,简单动作客户端(Simple Action Client)一次只跟踪一个目标。 当用户使用简单客户端发送目标时,它会禁用与上一个目标关联的所有回调,并停止跟踪其状态。 注意,它不会取消之前的目标!

线程模型(C++)

简单动作服务器(Simple Action Server)

许多action servers遵循类似的模式:其中一次只能有一个目标是活动的,并且每个新目标都优先于前一个目标。simple action server是一个action server的包装器,旨在强制执行这个简单的策略来处理目标。

simple_goal_reception.png

在从动作客户端接收到新goal后,simple action server将该goal移动到其待定槽(pending slot)中。 如果待定插槽已被其他目标占用,则simple action server会将该占用的目标设置为取消,并将其替换为通过网络传入的新目标。

simple_goal_accept.png

一旦simple action server接收到新目标并将其移动到待定槽中,则通知simple action server的用户新目标可用。 此通知采用目标的通知方式描述的方式。 在接收到通知时,用户可以选择接受(accept),移动待定槽中的目标使它变成当前目标槽的目标,同时允许用户修改与新接受的目标相关联的状态机。

目标的通知方式

用户可以通过两种方式通知simple action server接收到新目标的通知:

线程模型(C++)

构造simple action server时,用户可以自行决定是否启动额外线程以允许在目标回调中长时间运行actions(动作)。


2024-11-23 14:32