创建动作 [待校准@6711]
Goal目标: Define在ROS 2包中定义一个动作。 [待校准@6712]
Tutorial教程级别: Intermediate中级 [待校准@6713]
时间: 5分钟 [Alyssa@6714]
背景
你之前在 理解ROS 2动作 教程中学习过动作。像其他通讯类型和它们各自的界面 (话题/消息和服务/srv) 一样,你也可以在你的包中自定义动作。本教程向您展示如何定义和构建一个动作,您可以在下一个教程中编写的动作服务器和动作客户端中使用该动作。 [待校准@6717]
先决条件
你应该安装 ROS 2 (Dashing or later) and colcon
。 [待校准@6719]
设置一个 workspace 并创建一个名为 action_tutorials_interfaces
的包: [待校准@6720]
(记得先去 source your ROS 2 installation 。) [待校准@6721]
mkdir -p action_ws/src
cd action_ws/src
ros2 pkg create action_tutorials_interfaces
mkdir -p action_ws/src
cd action_ws/src
ros2 pkg create action_tutorials_interfaces
md action_ws\src
cd action_ws\src
ros2 pkg create action_tutorials_interfaces
任务
1定义一个动作 [待校准@6726]
[需手动修复的语法]Actions定义 .action
文件的形式: [待校准@6727]
# Request
---
# Result
---
# Feedback
动作定义由三个由 ---
分隔的消息定义组成。 [待校准@6728]
A request message is sent from an action client to an action server initiating a new goal.
当目标完成时,* result * 消息从动作服务器发送到动作客户端。 [待校准@6730]
Feedback messages are periodically sent from an action server to an action client with updates about a goal.
动作的实例典型地调用y,称为 * 目标 *。 [待校准@6732]
假设我们想为计算 Fibonacci sequence 定义一个新的动作 "Fibonacci" 。 [待校准@6733]
创建 action
目录我们ROS 2包 action_tutorials_interfaces
: [待校准@6734]
cd action_tutorials_interfaces
mkdir action
cd action_tutorials_interfaces
mkdir action
cd action_tutorials_interfaces
md action
在 action
目录下,创建一个调用 Fibonacci.action
的文件,内容如下: [待校准@6735]
int32 order
---
int32[] sequence
---
int32[] partial_sequence
目标请求是我们要计算的斐波那契数列的 order
,结果是最终的 sequence
,反馈是到目前为止计算的 partial_sequence
。 [待校准@6736]
2建立一个动作 [待校准@6737]
在代码中使用新的斐波那契动作类型之前,我们必须将定义传递给rosidl代码生成管道。 [待校准@6738]
这是通过添加以下行我们 CMakeLists.txt
前 ament_package()
线, action_tutorials_interfaces
: [待校准@6739]
find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"action/Fibonacci.action"
)
我们还应该将所需的依赖项添加到我们的 package.xml
中: [待校准@6740]
<buildtool_depend>rosidl_default_generators</buildtool_depend>
<depend>action_msgs</depend>
<member_of_group>rosidl_interface_packages</member_of_group>
注意,我们需要依赖于 action_msgs
,因为动作的定义包括额外的元数据 (例如目标id)。 [待校准@6741]
我们现在应该能够构建包含 Fibonacci
动作定义的包: [待校准@6742]
# Change to the root of the workspace
cd ~/action_ws
# Build
colcon build
我们完了! [待校准@6743]
按照惯例,动作类型将以其包名称和单词 action
作为前缀。所以当我们想提及我们的新动作时,它的全名是 action_tutorials_interfaces/action/Fibonacci
。 [待校准@6744]
我们可以检查我们的动作是否使用命令行工具成功构建: [待校准@6745]
# 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
你应该看到屏幕上印有斐波那契动作的定义。 [待校准@6746]
总结
在本教程中,您学习了动作定义的结构。您还学习了如何使用 CMakeLists.txt
和 package.xml
正确构建新的动作界面,以及如何验证构建成功。 [待校准@6748]
下一步
接下来,让我们通过创建动作服务和客户端 (在 Python or C++ 中) 来利用新定义的动作界面。 [待校准@6750]