ROS2入门教程—创建一个动作消息(action)

ROS2入门教程—创建一个动作消息(action)


  我们在 ROS2入门教程—理解动作(Action)一文中已经了解了ROS2中的动作(action),与其他通信类型及其各自的接口( topics/msgservices/srv)一样,您也可以在包中自定义动作。本教程将向您展示如何定义和构建一个动作,该动作可与将在下一教程中编写的动作服务器和动作客户端一起使用。

1 创建功能包

  开启一个新终端,设置好环境变量,然后进入到dev_ws/src目录下,使用以下命令创建新的功能包action_tutorials_interfaces

ros2 pkg create action_tutorials_interfaces

2 定义一个动作消息类型

  按照以下格式定义.action文件:

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

  一个动作由三个消息定义组成,三个消息定义之间用---分隔。
   ∙ \bullet Request:请求消息从动作客户端发送到动作服务器,初始化一个新目标。
   ∙ \bullet Result:当目标完成时,结果消息从动作服务器发送到动作客户端。
   ∙ \bullet Feedback:反馈消息定期从动作服务器发送到动作客户端,其中包含关于目标的更新。

  一个动作的实例通常被称为目标(goal)。

  假设想要定义一个新的动作“Fibonacci”来计算 Fibonacci sequence。首先,在功能包action_tutorials_interfaces下创建一个文件夹action

cd action_tutorials_interfaces
mkdir action

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

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

  目标请求是我们要计算的斐波那契序列的序号(order),结果是最终序列(sequence),反馈是迄今为止计算的部分序列(partial_sequence)。

3 编译动作

  在代码中使用新的Fibonacci动作类型之前,必须将该动作定义传递给rosidl从而建立链接。这是通过在功能包action_tutorials_interfacesCMakeLists.txt中(ament_package()行之前)添加以下行来实现的:

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,因为action定义包括额外的元数据(例如目标ID)。

  现在可以编译包含Fibonacci动作定义的包:

colcon build --packages-select action_tutorials_interfaces

  按照约定,动作类型将以它们的包名和单词action作为前缀。因此,当想引用新动作时,它的全名将是action_tutorials_interfaces/action/Fibonacci

  可以用以下命令检查动作文件是否成功构建:

# Source our workspace
. install/setup.bash
# Check that our action definition exists
ros2 interface show action_tutorials_interfaces/action/Fibonacci

  此时,可以看到终端中输出斐波那契动作的定义。

  在本教程中,我们学习了动作消息类型的结构以及创建。还学习了如何使用CMakeLists.txtpackage.xml正确构建新的动作接口,以及如何验证是否成功编译。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roar冷颜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值