创建行动

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

辅导水平: 中级

时间 5 分钟

背景介绍

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

先决条件

您应该 ROS 2胶管 已安装。

您应该知道如何设置 工作区 并创建软件包。

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

任务

1 创建接口包

mkdir -p ~/ros2_ws/src # 您可以使用此命名规范重复使用现有工作区
CD ~/ros2_ws/src ros2  创建 --许可证 Apache-2.0 自定义动作接口

2 确定行动

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

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

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

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

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

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

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

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

创建一个 行动 目录中的 自定义动作接口:

CD custom_action_interfaces mkdir 行动

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

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

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

3 建立行动

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

在我们的 CMakeLists.txt 之前 ament_package() 线:

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

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

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

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

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

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

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

我们完了

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

我们可以使用命令行工具检查我们的操作是否成功创建。首先获取工作区的源代码:

消息来源 install/local_setup.bash

现在检查我们的操作定义是否存在:

玫瑰2 界面 展览 custom_action_interfaces/action/Fibonacci

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

摘要

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

下一步工作

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