创建操作
目标: 在 ROS 2 包中定义一个操作。
教程级别: 中级
时间: 5 分钟
背景
您之前在 了解动作 教程中了解了操作。 与其他通信类型及其各自的接口(topics/msg 和 services/srv)一样, 您也可以在包中自定义操作。 本教程向您展示如何定义和构建一个操作,您可以将其与 您将在下一个教程中编写的操作服务器和操作客户端一起使用。
先决条件
设置 workspace 并创建名为 action_tutorials_interfaces
的包:
(请记住先 source your ROS 2 installation。)
mkdir -p ros2_ws/src #you can reuse existing workspace with this naming convention
cd ros2_ws/src
ros2 pkg create action_tutorials_interfaces
mkdir -p ros2_ws/src
cd ros2_ws/src
ros2 pkg create action_tutorials_interfaces
md ros2_ws\src
cd ros2_ws\src
ros2 pkg create action_tutorials_interfaces
任务
1 定义操作
操作在 .action
文件中定义,格式如下:
# Request
---
# Result
---
# Feedback
动作定义由三个消息定义组成,以“—”分隔。
动作客户端向动作服务器发送“请求”消息,以启动新目标。
目标完成后,动作服务器向动作客户端发送“结果”消息。
动作服务器定期向动作客户端发送“反馈”消息,其中包含有关目标的更新。
动作实例通常称为“目标”。
假设我们想要定义一个新的动作“斐波那契”来计算“斐波那契数列<https://en.wikipedia.org/wiki/Fibonacci_number>”`__。
在我们的 ROS 2 包“action_tutorials_interfaces”中创建一个“action”目录:
cd action_tutorials_interfaces
mkdir action
cd action_tutorials_interfaces
mkdir action
cd action_tutorials_interfaces
md action
在“action”目录中,创建一个名为“Fibonacci.action”的文件,其内容如下:
int32 order
---
int32[] sequence
---
int32[] partial_sequence
目标请求是我们要计算的斐波那契数列的“顺序”,结果是最终的“序列”,反馈是迄今为止计算的“partial_sequence”。
2 构建动作
在我们可以在代码中使用新的斐波那契动作类型之前,我们必须将定义传递给 rosidl 代码生成管道。
这是通过在“action_tutorials_interfaces”中的“ament_package()”行之前将以下几行添加到我们的“CMakeLists.txt”中来实现的:
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 ~/ros2_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 interface show action_tutorials_interfaces/action/Fibonacci
您应该会看到屏幕上打印的斐波那契动作定义。
摘要
在本教程中,您学习了动作定义的结构。
您还学习了如何使用 CMakeLists.txt
和 package.xml
正确构建新的动作接口,
以及如何验证构建是否成功。
后续步骤
相关内容
有关 ROS 动作的更多详细信息,请参阅`设计文章 <http://design.ros2.org/articles/actions.html>`__。