ROS2学习之旅(20)——创建一个动作消息

本文用来自定义一个动作消息类型。

以下命令用来创建一个工作空间并建立一个功能包:

mkdir -p action_ws/src
cd action_ws/src
ros2 pkg create action_tutorials_interfaces

1.定义一个动作

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

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

动作定义由三个消息定义组成,它们之间用--分隔。

  • 请求(request)消息从动作客户端发送到动作服务器,初始化一个新目标。

  • 当目标完成时,结果(result)消息从动作服务器发送到动作客户端。

  • 反馈(feedback)消息定期从动作服务器发送到动作客户端,其中包含关于目标的更新。

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

假设想要定义一个新的动作“Fibonacci”来计算Fibonacci序列。

在ROS 2包action_tutorials_interfaces中创建一个action目录:

cd action_tutorials_interfaces
mkdir action

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

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

目标请求是想要计算的斐波那契数列的order,结果是最终的sequence,而反馈是到目前为止计算的partial_sequence

2.编译动作文件

在代码中使用新的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,因为动作定义包括额外的元数据(例如目标id)。

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

# Change to the root of the workspace
cd ~/action_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

此时,可以看到斐波那契动作的定义打印到屏幕上。

3.总结

在本文中,学习了动作定义的结构,还学习了如何使用CMakeLists.txtpackage.xml正确地编译一个动作,以及如何验证动作是否编译成功。

如果给您带来帮助,希望能给点个关注,以后还会陆续更新有关机器人的内容,点个关注不迷路~欢迎大家一起交流学习。
都看到这了,点个推荐再走吧~
未经允许,禁止转载。

posted @ 2021-07-16 09:24  Love&Robot  阅读(377)  评论(0编辑  收藏  举报