ROS2 自定义消息 (ACT 模型训练参数化为例)

创建 ROS2 节点,配置 VS Code ROS2 可参考另外一篇博客文章:

Ubuntu22.04 创建ROS2项目,配置VS Code Debug环境

0. 背景介绍

  1. Ubuntu 20.04
  2. ROS2 Foxy
  3. Python 3.8 (Anaconda)

本文介绍如何将 ACT 模型训练参数化。

ACT 项目 GitHub 地址: ACT项目地址GitHub - tonyzhaozh/act

  • Qt UI ROS节点(C++):从 Json 配置文件读取训练参数,自定义 ROS 消息,页面点击“训练”按钮,发送 ROS 消息给 ACT ROS 节点,开始 ACT 模型训练
  • ACT ROS节点(Python):将 ACT 训练代码封装成 ROS 节点,接受 Qt UI 节点发送的自定义 ROS 消息,进行模型训练
  • pkg_interfaces ROS节点:自定义 ROS 消息

1. ROS2 通信知识

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

话题通信接口的定义使用的是 .msg 文件,由于是单向传输,只需要描述传输的每一帧数据是什么就行,比如在这个定义里,会传输两个32位的整型数,x、y,我们可以用来传输二维坐标的数值。

服务通信接口的定义使用的是.srv文件,包含请求和应答两部分定义,通过中间的“—”区分,比如之前我们学习的加法求和功能,请求数据是两个64位整型数a和b,应答是求和的结果sum。

动作是另外一种通信机制,用来描述机器人的一个运动过程,使用.action文件定义,比如我们让小海龟转90度,一边转一边周期反馈当前的状态,此时接口的定义分成了三个部分,分别是动作的目标,比如是开始运动,运动的结果,最终旋转的90度是否完成,还有一个周期反馈,比如每隔1s反馈一下当前转到第10度、20度还是30度了,让我们知道运动的进度。

ROS2 预定义消息类型:

以上是 ROS 内置消息格式,若不能满足要求,就需要自定义 ROS 消息。

2.自定义 msg 的两种方式
第一种:在大型系统中,一般都是将 msg 或者叫通信接口(interface)独立成包,独立维护,并作为上下游节点的依赖模块存在。这对于整个系统模块间的松耦合非常重要,这种方式也是 ROS2 推荐的方式。
第二种:当软件规模比较小的时候,比如收发节点都在一个软件包里,直接把自定义 msg 放在一起。

2.  创建自定义消息

ROS2 通过自带 rosidl_default_generators 包来为自定义的 msg、srv和action文件生成各个语言的头文件。

ROS2 通过在 CMakeLists.txt 中调用新增的宏 rosidl_generate_interfaces 来为 msg、srv和action文件生成各个语言的头文件ÿ

猜你喜欢

转载自blog.csdn.net/coco_1998_2/article/details/142212418