2-如何创建动作通信的数据结构

本文介绍了如何在ROS2中定义和构建自定义动作,包括Fibonacci动作的示例,涉及动作请求、结果和反馈消息,以及CMakeLists.txt和package.xml的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

   在之前的教程中介绍了动作通信。与其他通信类型及其各自的接口(topics/msg和services/srv)一样,您也可以在包中自定义动作。本教程展示如何定义和构建一个动作。

准备工作

    安装了ROS 2和colcon。
    创建一个工作区并创建一个名为action_tutorials_interfaces的包:
    (记得source)

mkdir -p ros2_ws/src #you can reuse existing workspace with this naming convention
cd ros2_ws/src
ros2 pkg create action_tutorials_interfaces

任务

1 定义动作

    动作定义在.action文件中:

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

    操作定义由三个用---分隔的消息定义组成。
    请求消息从动作客户端发送到的操作服务端。
    当目标完成时,结果消息将从动作服务端发送到动作客户端。
    反馈消息定期地从动作服务端发送到动作客户端,其中包含有关目标的更新。
    一个动作的实例通常被称为目标。
    假设我们想要定义一个新的动作“Fibonacci”来计算斐波那契数列。

    在我们的ROS 2包action_tutorials_interfaces中创建一个操作目录:

cd action_tutorials_interfaces
mkdir action

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

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

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

2 构建动作

    在代码中使用新的Fibonacci操作类型之前,必须将定义传递给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正确构建新动作,以及如何验证构建是否成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值