目标:学习更多在 ROS 2 中实现自定义接口的方法。
教程级别:初学者
时间:15 分钟
目录
背景
先决条件
任务
1. 创建一个包
2. 创建一个 msg 文件
3. 使用来自同一包的接口
4. 尝试一下
5. 使用现有的接口定义
摘要
下一步
相关内容
背景
在之前的教程中,您学习了如何创建自定义 msg 和 srv 接口。
虽然最佳实践是在专用的接口包中声明接口,但有时在一个包中声明、创建和使用接口会更方便。
请记住,接口目前只能在 CMake 包中定义。然而,可以在 CMake 包中拥有 Python 库和节点(使用 ament_cmake_python),因此您可以在一个包中同时定义接口和 Python 节点。为了简单起见,我们将在这里使用 CMake 包和 C++节点。
本教程将重点介绍 msg 接口类型,但这里的步骤适用于所有接口类型。
先决条件
我们假设您在学习本教程之前,已经复习了《创建自定义 msg 和 srv 文件》教程中的基础知识。
您应该安装了 ROS 2,拥有一个工作空间,并且理解如何创建包。
始终不要忘记在您打开的每个新终端中获取 ROS 2 的源。
任务
1. 创建一个包
在您的工作空间 src
目录中,创建一个包 more_interfaces
,并在其中为 msg 文件创建一个目录:
ros2 pkg create --build-type ament_cmake --license Apache-2.0 more_interfaces
mkdir more_interfaces/msg
cxy@ubuntu2404-cxy:~/ros2_ws/src$ ros2 pkg create --build-type ament_cmake --license Apache-2.0 more_interfaces
going to create a new package
package name: more_interfaces
destination directory: /home/cxy/ros2_ws/src
package format: 3
version: 0.0.0
description: TODO: Package description
maintainer: ['cxy <cxy@todo.todo>']
licenses: ['Apache-2.0']
build type: ament_cmake
dependencies: []
creating folder ./more_interfaces
creating ./more_interfaces/package.xml
creating source and include folder
creating folder ./more_interfaces/src
creating folder ./more_interfaces/include/more_interfaces
creating ./more_interfaces/CMakeLists.txt
2. 创建一个 msg 文件
在 more_interfaces/msg
中,创建一个新文件 AddressBook.msg
,并粘贴以下代码以创建旨在传达个人信息的消息:
cxy@ubuntu2404-cxy:~/ros2_ws/src$ cd more_interfaces/msg
cxy@ubuntu2404-cxy:~/ros2_ws/src/more_interfaces/msg$ gedit AddressBook.msg
uint8 PHONE_TYPE_HOME=0
uint8 PHONE_TYPE_WORK=1
uint8 PHONE_TYPE_MOBILE=2
string first_name
string last_name
string phone_number
uint8 phone_type
此消息由以下字段组成:
first姓氏:字符串类型
last姓氏:字符串类型
电话号码:字符串类型
电话类型:类型为 uint8,定义了几个命名的常量值
请注意,在消息定义中可以为字段设置默认值。有关自定义接口的更多方式,请参见接口 https://docs.ros.org/en/jazzy/Concepts/Basic/About-Interfaces.html 。
接下来,我们需要确保 msg 文件被转换为 C++、Python 和其他语言的源代码。
建立消息文件
打开 package.xml
并添加以下行:
<buildtool_depend>rosidl_default_generators</buildtool_de