您正在阅读的是旧版本但仍受支持的 ROS 2 文档。 Jazzy.

行动

在 ROS 2 中,"动作 "指的是一个长期运行的远程过程调用,具有反馈和取消或抢占目标的能力。例如,运行机器人的高级状态机可能会调用一个动作,告诉导航子系统前往一个航点,这可能需要数秒(或数分钟)的时间。一路上,导航子系统可以提供反馈信息,说明已经走了多远,高层状态机可以选择取消或预先阻止前往该航点。

这种结构反映在行动信息定义的外观上:

int32 要求
---
int32 回应
---
int32 反馈

在 ROS 2 中,由于设置和监控连接会产生开销,因此预计操作将是长时间运行的过程。如果需要短时间运行的远程过程调用,可以考虑使用 服务 而不是

操作由操作名称标识,该名称与主题名称很相似(但属于不同的名称空间)。

动作由两部分组成:动作服务器和动作客户端。

行动服务器

行动服务器是接受远程过程请求并对其执行某些过程的实体。它还负责随着操作的进行发送反馈信息,并对取消/赎回请求做出反应。例如,可以考虑使用以下接口来计算斐波那契数列:

int32 订单
---
int32[] 顺序
---
int32[] 顺序

行动服务器是接收到该信息的实体,它开始计算序列,直至 订单 (中提供反馈),最后在 顺序.

备注

每个操作名称只能有一个操作服务器。如果同一行动名称上有多个行动服务器,那么哪个行动服务器将接收客户端请求,这一点还未确定。

行动客户

操作客户端是请求远程操作服务器代其执行程序的实体。按照上面的示例,操作客户端是创建初始信息的实体,该信息包含 订单并等待行动服务器计算序列并返回(同时提供反馈)。

与动作服务器不同的是,使用相同动作名称的动作客户端数量可以是任意的。