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