ROS2之消息接口

news/2025/9/25 15:27:13/文章来源:https://www.cnblogs.com/liyiyang/p/19111292

 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.mzph.cn/news/917148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux grep cut tomcat logs

截取当天catalina.out日志 grep "2025-09-25" catalina.out > 20250925.log截取指定时间段(2025年9月24日到2025年9月25日)的日志grep "2025-09-2[4-5]" catalina.out >20250924-25.log截取…

软件工程课程第一次团队作业

软件工程课程第一次团队作业这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13546…

Vona ORM分表全攻略

针对高并发、数据量大的场景,通常会考虑采用分表机制进行优化。下面以 Model User/Order 为例,通过查询用户的订单列表,来演示分表的使用方法分表 针对高并发、数据量大的场景,通常会考虑采用分表机制进行优化。下…

对网站建设展望网站域名申请程序

一 问题的引入 约瑟夫问题的源头完全可以命名为“自杀游戏”。本着和谐友爱和追求本质的目的&#xff0c;可以把问题描述如下&#xff1a; 现有n个人围成一桌坐下&#xff0c;编号从1到n&#xff0c;从编号为1的人开始报数。报数也从1开始&#xff0c;报到m人离席&#xff0c…

如何在预算与风险之间做选择 iOS 混淆(源码混淆 vs IPA 混淆)的成本-收益分析与实战决策框架

本文从成本-收益和工程决策角度,提供 iOS 混淆(源码混淆 vs IPA 混淆) 的 ROI 评估模型、实战案例与 5 步决策流程,帮助团队在有限预算下科学选择混淆策略并工程化落地(含映射表、灰度与测试建议)。在现实工程里…

【兰州大学主办|EI稳定检索】第二届信息光学与光电技术国际学术会议(CIOT 2025)

第二届信息光学与光电技术国际学术会议(CIOT 2025)将于2025年10月24-26日于昆明召开。会议将围绕信息光学、光电技术等在光学领域中的最新研究成果,为来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者…

深入解析:设计模式-状态模式详解

深入解析:设计模式-状态模式详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

【IEEE出版】第五届网络通信与信息安全国际学术会议(ICNCIS 2025)

2025年第五届网络通信与信息安全国际学术会议(ICNCIS2025)将于2025年10月17-19日于哈尔滨召开。【连续四届EI、Scopus双检索 | 快至会后4个月EI检索】 【已签约IEEE出版申请,已上线IEEE官方列表会议!EI检索稳定有保…

第16章 Day19 Charles安装和使用---微信小程序逆向

Charles安装(三方抓包工具) Charles客户端下载: 官网地址:https://www.charlesproxy.com/download/ 选择适合自己的系统版本下载下载安装完成后激活 激活网站地址:https://www.zzzmode.com/mytools/charles/打开安…

定制网站 北京服务器上怎么搭建网站

一,工具简介 tcpconnect工具追踪执行活动TCP连接的内核函数(例如,通过connect()系统调用;accept()是被动连接)。 详细地说,tcpconnect通过钩住内核中的tcp_v4_connect和/或tcp_v6_connect函数来工作,这些函数是在尝试建立TCP连接时被调用的。当这些函数被调用时,tcpc…

如何让百度快速收录网页如何让百度快捷收录网页的方法

如何让百度快速收录网页如何让百度快捷收录网页的方法2025-09-25 15:15 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; di…

061_尚硅谷_算术运算符课堂练习

061_尚硅谷_算术运算符课堂练习1.练习1:97天假期,有xx个星期零xx天 2.练习2:华氏温度134.2转为摄氏度

DBLINK的创建和使用(总结)

DBLINK的创建和使用(总结) 目录DBLINK的创建和使用(总结)一、什么是 DBLINK?二、创建 DBLINK 的三种主要方式方式一:使用 tnsnames.ora 文件(最常用、最推荐)步骤 1:配置 tnsnames.ora 文件步骤 2:创建 DBLI…

Could not resolve host: mirrorlist.centos.org

执行 [root@localhost yum.repos.d]# yum install bind-utils时,报centos-release-scl-rh Could not resolve host: mirrorlist.centos.org; Unknown error解决上面问题[root@localhost ~]# cd /etc/yum.repos.d [roo…

axi 4k边界检测

在AXI4协议中,一个突发传输(burst transfer)不能跨越4KB的边界,为啥呢,因为我们认为每个slave设备通常是4KB对齐的,为了避免一次burst的传输可能越过目的slave这个风险,所以就定了这个规矩 更深的说,确保数据传…

GOSIM 开源出海工作坊:给开源创业者的忠告

“出海”两个字,在开源语境里不是浪漫叙事,而是生死抉择。在这个数字机遇无限的时代,开源不仅是技术创新的象征,更是全球商业扩张的关键驱动力。本次分享将带你走过开源项目从诞生到跨越国界、进入全球市场的完整历…

华为,让金融智能体月映千江 - 指南

华为,让金融智能体月映千江 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

轻量级架构决策记录工具 - ADR Tools

ADR Tools是一个基于Unix shell脚本的命令行工具,用于管理和维护架构决策记录(ADRs)。它支持创建、更新和链接决策文档,采用Markdown格式存储,可与版本控制系统完美集成。ADR Tools - 架构决策记录工具 项目描述 …

一文搞懂Flex弹性布局空间分配规则

自从Flex布局面世后,基本每个项目我都是使用FLex,特别是小程序端,官方就是主推的Flex布局,相比以前你得费一些周折的布局方式,现在都能轻轻松松实现,用的多但是有一些计算细节其实也是理解不是特别深的,最近在B…

“小身材的大心脏”——HT-AD3PS-1+ 在成都恒利泰的射频江湖里到底做了什么?

“小身材的大心脏”——HT-AD3PS-1+ 在成都恒利泰的射频江湖里到底做了什么?“小身材的大心脏”——HT-AD3PS-1+ 在成都恒利泰的射频江湖里到底做了什么? 最近帮客户做一套“又要轻、又要稳、还要耐得住高低温”的射…