【ROS2指南-17】创建Action接口

目标:在 ROS 2 包中定义一个action。

教程级别:中级

时间: 5分钟

背景

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

先决条件

您应该安装ROS 2(Dashing 或更高版本)colcon

设置一个工作区并创建一个名为的包action_tutorials_interfaces

mkdir -p action_ws/src
cd action_ws/src
ros2 pkg create action_tutorials_interfaces

任务

1 定义动作

.action动作在以下形式的文件中定义:

# Request
---
# Result
---
# Feedback

一个action定义由三个分隔的消息定义组成---

  • 请求消息从动作客户发送到动作服务器以启动新目标。

  • 当目标完成时,结果消息从动作服务器发送到动作客户端。

  • 反馈消息会定期从动作服务器发送到动作客户端,其中包含有关目标的更新。

一个action的实例通常被称为一个目标

假设我们要定义一个新动作“Fibonacci”来计算Fibonacci 数列

action在我们的 ROS 2 包中创建一个目录action_tutorials_interfaces

cd action_tutorials_interfaces
mkdir action

在该action目录中,创建一个名为Fibonacci.action以下内​​容的文件:

int32 order
---
int32[] sequence
---
int32[] partial_sequence

目标请求是order我们要计算的斐波那契数列的 ,结果是最终的sequence,反馈是partial_sequence到目前为止的计算结果。

2 构建一个动作

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

这是通过在我们的行CMakeLists.txt之前添加以下行来完成的:ament_package()action_tutorials_interfaces

find_package(rosidl_default_generators REQUIRED)

rosidl_generate_interfaces(${PROJECT_NAME}
  "action/Fibonacci.action"
)

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

<buildtool_depend>rosidl_default_generators</buildtool_depend>

<depend>action_msgs</depend>

<member_of_group>rosidl_interface_packages</member_of_group>

注意,我们需要依赖,action_msgs因为动作定义包括额外的元数据(例如目标 ID)。

我们现在应该能够构建包含Fibonacci操作定义的包:

# Change to the root of the workspace
cd ~/action_ws
# Build
colcon build

我们完成了!

按照惯例,动作类型将以它们的包名和单词为前缀action。所以当我们想要引用我们的新动作时,它会有全名action_tutorials_interfaces/action/Fibonacci

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

# Source our workspace
# On Windows: call install/setup.bat
. install/setup.bash
# Check that our action definition exists
ros2 action show action_tutorials_interfaces/action/Fibonacci

您应该看到 Fibonacci 动作定义打印到屏幕上。

概括

在本教程中,您了解了操作定义的结构。您还学习了如何使用CMakeLists.txt和正确构建新的操作界面package.xml,以及如何验证构建是否成功。

猜你喜欢

转载自blog.csdn.net/weixin_39538031/article/details/130083978