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

创建行动

目标 在 ROS 2 软件包中定义一个操作。

辅导水平: 中级

时间 5 分钟

背景介绍

您之前在 了解行动 教程。与其他通信类型及其各自的接口(主题/msg 和服务/srv)一样,您也可以在软件包中自定义动作。本教程将向您展示如何定义和构建一个动作,以便与下一教程中编写的动作服务器和动作客户端配合使用。

先决条件

您应该 ROS 2胶管 已安装。

建立一个 工作区 并创建一个名为 动作教程界面:

记住 为您的 ROS 2 安装提供源代码 首先)。

mkdir -p ros2_ws/src #您可以使用此命名规则重复使用现有工作区
CD ros2_ws/src ros2  创建 动作教程界面

任务

1 确定行动

行动在 .行动 形式的文件:

# 请求
---
# 结果
---
# 反馈

一个操作定义由三个报文定义组成,中间用 ---.

  • A 要求 消息从行动客户端发送到行动服务器,启动一个新目标。

  • A 结果 消息会在目标完成时从行动服务器发送到行动客户端。

  • 反馈意见 消息会定期从行动服务器发送到行动客户端,提供有关目标的更新信息。

一个动作的实例通常被称为 目标.

假设我们要定义一个新的操作 "斐波那契",用于计算 斐波那契数列.

创建一个 行动 目录中的 动作教程界面:

CD action_tutorials_interfaces mkdir 行动

行动 目录下,创建一个名为 Fibonacci.action 内容如下

int32 命令
---
int32[] sequence
---
int32[] 部分序列

目标要求是 订单 的斐波那契数列,结果就是最终的 顺序反馈是 部分序列 到目前为止的计算结果。

2 建立行动

在代码中使用新的 Fibonacci 操作类型之前,我们必须将定义传递给 rosidl 代码生成管道。

在我们的 CMakeLists.txt 之前 ament_package() 行中的 动作教程界面:

查找软件包(默认生成器 要求)

生成接口(${项目名称}
  "action/Fibonacci.action";
)

我们还应将所需的依赖项添加到我们的 package.xml:

构建工具的依赖关系<buildtool_depend>;默认生成器</buildtool_depend>;

<依赖>;action_msgs依赖</depend>;

<member_of_group>;接口包</member_of_group>;

注意,我们需要依赖 action_msgs 因为行动定义包括附加元数据(如目标 ID)。

现在我们应该可以构建包含 斐波那契 行动定义:

# 更改到工作区的根目录
CD ~/ros2_ws
# 建立
胶管 构建

我们完了

按照惯例,操作类型的前缀是软件包名称和 行动.因此,当我们要引用我们的新操作时,它的全名将是 action_tutorials_interfaces/action/Fibonacci.

我们可以使用命令行工具检查我们的操作是否成功创建:

# 我们工作空间的源代码
# 在 Windows 上:调用 install/setup.bat
. install/setup.bash
# 检查我们的行动定义是否存在
玫瑰2 界面 展览 action_tutorials_interfaces/action/Fibonacci

你会看到斐波那契动作定义打印在屏幕上。

摘要

在本教程中,您了解了动作定义的结构。您还学会了如何使用 CMakeLists.txtpackage.xml以及如何验证构建成功。

下一步工作

接下来,让我们利用新定义的动作接口,创建一个动作服务和客户端(在 PythonC++).