跳到主要内容

10、ROS2自定义接口消息

1、通讯接口简介

在ROS系统中,无论话题、服务还是动作,都会用到一个重要的概念——通信接口。

通信并不是一个人自言自语,而是两个甚至更多个人,你来我往的交流,交流的内容是什么呢?为了让大家都好理解,我们可以给传递的数据定义一个标准的结构,这就是通信接口。

接口可以让程序之间的依赖降低,便于我们使用别人的代码,也方便别人使用我们的代码,这就是ROS的核心目标,减少重复造轮子。

image-20220528001533911

ROS有三种常用的通信机制,分别是话题、服务、动作,通过每一种通信种定义的接口,各种节点才能有机的联系到一起。

2、创建自定义接口流程

自定义接口消息的流程与在功能包中编写可执行程序的流程类似,主要步骤如下:

  1. 创建接口功能包;
  2. 创建并编辑 .msg文件 、.srv文件、.action文件
  3. 编辑配置文件;
  4. 编译;
  5. 测试。

3、创建动作通信自定义接口

在【11、ROS2动作通讯服务端实现】案例中,我们已经演示过如果创建动作通讯接口的完整流程,大家可以先回去复习一下,这里就不再赘述。

4、创建话题通信自定义接口

1、在【ROS2动作通讯服务端实现】课程中我们已经创建了自定义接口功能包,功能包pkg_interfaces下新建 msg 文件夹,msg文件夹下新建Person.msg 文件,文件中输入如下内容:

string name int32 age float64 height

image-20250905144617408

2、在package.xml和CMakeLists.txt中添加如下配置:

  • CMakeLists.txt

xxxxxxxxxx rosidl_generate_interfaces ( ${PROJECT_NAME} "action/Progress.action" "msg/Person.msg" )

  • package.xml

xxxxxxxxxx < buildtool_depend > rosidl_default_generators </ buildtool_depend > < exec_depend > rosidl_default_runtime </ exec_depend > < depend > action_msgs </ depend > < member_of_group > rosidl_interface_packages </ member_of_group >

image-20231030180212876

3、终端中进入当前工作空间,编译功能包:

xxxxxxxxxx colcon build \--packages-select pkg_interfaces

image-20250905145029972

4、测试接口是否正常

  • 先刷新环境变量

xxxxxxxxxx source install/setup.bash

  • 查看接口类型

xxxxxxxxxx ros2 interface show pkg_interfaces/msg/Person

正常情况下,终端将会输出与Person.msg文件一致的内容。

image-20231030175731991

5、创建服务通信自定义接口

1、在【ROS2动作通讯服务端实现】课程中我们已经创建了自定义接口功能包,功能包pkg_interfaces下新建srv文件夹,srv文件夹下新建Add.srv文件,文件中输入如下内容:

xxxxxxxxxx int32 num1 int32 num2 \--- int32 sum

image-20250905145354692

2、在package.xml和CMakeLists.txt中添加如下配置:

  • CMakeLists.txt

xxxxxxxxxx rosidl_generate_interfaces ( ${PROJECT_NAME} "action/Progress.action" "msg/Person.msg" "srv/Add.srv" )

  • package.xml

xxxxxxxxxx < buildtool_depend > rosidl_default_generators </ buildtool_depend > < exec_depend > rosidl_default_runtime </ exec_depend > < depend > action_msgs </ depend > < member_of_group > rosidl_interface_packages </ member_of_group >

image-20231030180424883

3、终端中进入当前工作空间,编译功能包:

xxxxxxxxxx cd ~/yahboomcar_ros2_ws/yahboomcar_ws colcon build --packages-select pkg_interfaces source install/setup.bash

4、测试

xxxxxxxxxx ros2 interface show pkg_interfaces/srv/Add

正常情况下,终端将会输出与Person.msg文件一致的内容。

image-20231030180541929