当前位置: 首页 > news >正文

ROS2之消息接口

 ROS2 的三大消息接口

1. 消息(Message, msg)

  • 定义文件后缀.msg

  • 作用:用于 话题 (Topic) 通信,节点之间以“流”的方式交换数据。

  • 特点

    • 一对多(一个话题可以有多个订阅者/发布者)

    • 单向通信(发布 → 订阅)

    • 异步(发送方不用等待接收方响应)

  • 使用场景

    • 传感器数据(如 sensor_msgs/Image 图像)

    • 控制命令(如 geometry_msgs/Twist 速度指令)

  • 示例(定义一个 Person.msg):

     
    string name int32 age float32 height

2. 服务(Service, srv)

  • 定义文件后缀.srv

  • 作用:提供 请求-响应 (Request/Response) 的同步通信方式。

  • 特点

    • 一对一(一个客户端请求,一个服务端响应)

    • 双向通信(请求 + 响应)

    • 同步(客户端必须等待服务端返回结果)

  • 使用场景

    • 查询类操作(获取机器人状态)

    • 控制类操作(重置仿真、生成新对象)

  • 示例(定义一个 AddTwoInts.srv):

     
    int64 a int64 b --- int64 sum

3. 动作(Action, action)

  • 定义文件后缀.action

  • 作用:适合 长时间执行的任务,支持过程中的反馈和最终结果。

  • 特点

    • 客户端-服务端 模型,但比 srv 更复杂

    • 三部分通信

      • Goal(目标):客户端发送任务请求

      • Feedback(反馈):服务端周期性返回任务进度

      • Result(结果):任务完成时返回最终结果

    • 支持取消任务

  • 使用场景

    • 移动机器人导航(目标点任务 + 进度反馈 + 最终到达结果)

    • 机械臂执行长时间的运动

  • 示例(定义一个 Navigate.action):

     
    # Goal geometry_msgs/PoseStamped target_pose --- # Result bool success --- # Feedback float32 progress_percent
     
接口类型 文件后缀 通信方式 特点 使用场景
msg .msg 话题 (Topic) 单向,异步,一对多 传感器数据,控制指令
srv .srv 服务 (Service) 请求-响应,同步,一对一 查询、重置、短时任务
action .action 动作 (Action) 目标 + 反馈 + 结果,支持取消

长时任务(导

航、运动控制)

 ROS2的消息接口的数据类型

ROS2 的消息接口(msg/srv/action) 中,数据类型主要分为三类:

  1. 基本类型

    • 就是编程里常见的标量,比如整数、浮点数、布尔值、字符串等。

    • 例如:int32, float64, bool, string

  2. 复合类型(嵌套类型)

    • 可以在一个消息里使用另一个消息作为字段。

    • 比如 geometry_msgs/Twist 就包含 Vector3 类型的成员。

  3. 数组与序列类型

    • 支持固定长度数组和动态长度序列,用于存放多个相同类型的数据。

    • 例如:int32[10](固定长度 10)、string[](动态长度字符串序列)。

依赖

如果你要写 自定义接口包,最基本的依赖是:

  • 必须有

    • rosidl_default_generators (生成代码用)

    • rosidl_default_runtime (运行时用)

  • 如果用到其他消息类型(比如 std_msgs/Header

    • std_msgs

    • geometry_msgs

    • sensor_msgs
      等等都要写到 package.xmlCMakeLists.txt 里。

package.xml

<package format="3"><name>my_interfaces</name><version>0.0.0</version><description>My custom interfaces</description><maintainer email="xxx@todo.todo">Your Name</maintainer><license>Apache License 2.0</license><!-- 构建依赖:生成接口代码 --><build_depend>rosidl_default_generators</build_depend><!-- 如果用到 std_msgs / geometry_msgs,需要写 --><build_depend>std_msgs</build_depend><build_depend>geometry_msgs</build_depend><!-- 执行依赖:运行时需要 --><exec_depend>rosidl_default_runtime</exec_depend><exec_depend>std_msgs</exec_depend><exec_depend>geometry_msgs</exec_depend><!-- 测试依赖 --><test_depend>ament_lint_auto</test_depend><test_depend>ament_lint_common</test_depend>
</package>

CMakeLists.txt

cmake_minimum_required(VERSION 3.8)
project(my_interfaces)find_package(ament_cmake REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(std_msgs REQUIRED)
find_package(geometry_msgs REQUIRED)# 生成接口(msg/srv/action)
rosidl_generate_interfaces(${PROJECT_NAME}"msg/Person.msg""srv/AddTwoInts.srv""action/Navigate.action"DEPENDENCIES std_msgs geometry_msgs  # 如果用到了外部消息
)ament_export_dependencies(rosidl_default_runtime)
ament_package()

 

http://www.hskmm.com/?act=detail&tid=16997

相关文章:

  • Linux grep cut tomcat logs
  • Vona ORM分表全攻略
  • 如何在预算与风险之间做选择 iOS 混淆(源码混淆 vs IPA 混淆)的成本-收益分析与实战决策框架
  • 【兰州大学主办|EI稳定检索】第二届信息光学与光电技术国际学术会议(CIOT 2025)
  • 深入解析:设计模式-状态模式详解
  • 【IEEE出版】第五届网络通信与信息安全国际学术会议(ICNCIS 2025)
  • 第16章 Day19 Charles安装和使用---微信小程序逆向
  • DBLINK的创建和使用(总结)
  • Could not resolve host: mirrorlist.centos.org
  • axi 4k边界检测
  • GOSIM 开源出海工作坊:给开源创业者的忠告
  • 华为,让金融智能体月映千江 - 指南
  • 轻量级架构决策记录工具 - ADR Tools
  • 一文搞懂Flex弹性布局空间分配规则
  • AT_agc012_c [AGC012C] Tautonym Puzzle 题目分析
  • 详细介绍:回调函数与错误处理
  • Django系列(七)HttpRequest(请求)和HttpResponse(响应)对象
  • 工业主板:智能制造与严苛环境的坚实基石
  • 课上测试:C编程工具测试(AI)
  • 标题。
  • 虚拟机下的麒麟V10SP1与SP2进行iSCSI连接——基于MobaXterm
  • 中断的基本概念
  • AT_arc173_e [ARC173E] Rearrange and Adjacent XOR
  • 修复gradle8使用Transform第一个构建中断第二次构建失败的问题:java.io.IOException: Unable to delete directory xxxx\build
  • .NET操作Word/WPS打造专业文档 - 页面设置与打印控制完全指南
  • NORDIC蓝牙6.0新品NRF54L15多协议超低功耗高性能BLE芯片 - 动能世纪
  • 记录:git、.${index}. 滚动条
  • 使用springboot开发一个宿舍管理系统练习项目 - 实践
  • 元组
  • CF1542