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

【ROS2】通讯协议接口 Interface

在这里插入图片描述

ROS 系列学习教程(总目录)
ROS2 系列学习教程(总目录)

目录

  • 一、接口定义文件
    • 1.1 Message (.msg)
    • 1.2 Service (.srv)
    • 1.3 Action (.action)
  • 二、基本数据类型和字段类型
  • 三、接口常用命令行
    • 3.1 查看接口定义信息
    • 3.2 列出所有可用接口
    • 3.3 列出特定包的所有接口
    • 3.4 列出提供接口的所有包
    • 3.5 查看接口的详细类型信息

ROS2 新增了 Interface 的概念,但内容还是原来那一套,可以说是新瓶装老酒。

Interface(接口) 是 ROS 2 中定义节点之间如何交换数据的规范。它严格规定了通信双方使用的数据结构、字段名称和数据类型。

ROS 2 主要支持三种通信模式,对应三种接口类型:

类型通信模式描述适用场景
Message (msg)单向异步发布者->订阅者,一次性的数据传递传感器数据、状态信息、日志流
Service (srv)双向同步客户端发送请求->服务端处理并返回响应执行命令、查询状态、计算任务
Action (action)双向异步客户端发送目标->服务端持续反馈->最终返回结果长时间运行的任务(导航、抓取)

一、接口定义文件

1.1 Message (.msg)

最简单的接口,用于话题通信。

示例1:geometry_msgs/msg/Twist.msg

# 单行注释以 # 开头# 这表示线性速度分量
geometry_msgs/Vector3 linear
# 这表示角速度分量  
geometry_msgs/Vector3 angular

示例2:sensor_msgs/msg/LaserScan.msg (更复杂)

std_msgs/Header header           # 标准头信息,包含时间戳和坐标系
float32 angle_min                # 开始扫描角度 [rad]
float32 angle_max                # 结束扫描角度 [rad]
float32 angle_increment          # 角度增量 [rad]
float32 time_increment           # 测量时间增量 [s]
float32 scan_time                # 扫描时间 [s]
float32 range_min                # 最小有效距离 [m]
float32 range_max                # 最大有效距离 [m]
float32[] ranges                 # 距离数据数组 [m] (可变长度数组)
float32[] intensities            # 强度数据数组

1.2 Service (.srv)

用于服务通信,包含请求和响应两部分,用 --- 分隔。

示例:example_interfaces/srv/AddTwoInts.srv

int64 a      # 请求部分:第一个加数
int64 b      # 请求部分:第二个加数
---
int64 sum    # 响应部分:计算结果

1.3 Action (.action)

最复杂,包含目标、反馈、结果三部分。

示例:action_tutorials_interfaces/action/Fibonacci.action

# 目标定义:我们想要计算的斐波那契数列序号
int32 order
---
# 结果定义:最终返回的序列
int32[] sequence
---
# 反馈定义:执行过程中的中间结果
int32[] sequence

二、基本数据类型和字段类型

ROS 2 接口支持丰富的内置数据类型:

类型描述示例
bool布尔值True, False
int8, int16, int32, int64有符号整数10, -5
uint8, uint16, uint32, uint64无符号整数255, 1000
float32, float64浮点数3.14, -0.5
string字符串"hello world"
time, duration时间和持续时间
array_type[]可变长度数组float32[] ranges
array_type[N]固定长度数组float32[3] position

三、接口常用命令行

命令语法:

ros2 interface [commands] [options] [params]

3.1 查看接口定义信息

命令[commands]选项[options]参数[params]说明
showtype_name打印接口协议字段
–all-commentstype_name除了接口协议字段,还打印接口的注释
–no-commentstype_name除了接口协议字段,不打印任何注释与空格

使用示例:

在这里插入图片描述

3.2 列出所有可用接口

命令[commands]选项[options]参数[params]说明
list-m列出所有消息接口(msg)
-s列出所有服务接口(srv)
-a列出所有动作接口(action)
列出所有消息\服务\动作接口

使用示例:

列出所有消息接口(msg):

在这里插入图片描述

列出所有服务接口(srv):

在这里插入图片描述

列出所有动作接口(action):

在这里插入图片描述

3.3 列出特定包的所有接口

命令[commands]选项[options]参数[params]说明
packagepackage_name列出所有消息接口(msg)

使用示例:

在这里插入图片描述

3.4 列出提供接口的所有包

命令[commands]选项[options]参数[params]说明
packages-m列出所有提供消息接口的包(msg)
-s列出所有提供服务接口的包(srv)
-a列出所有提供动作接口的包(action)
列出所有提供消息\服务\动作接口的包

使用示例:

在这里插入图片描述

3.5 查看接口的详细类型信息

命令[commands]选项[options]参数[params]说明
prototype_name输出接口原型
–no-quotestype_name不打印最外层的引号

使用示例:

在这里插入图片描述




欢迎大家加QQ群,一起讨论学习:894013891

http://www.dtcms.com/a/395198.html

相关文章:

  • Spring —— 事务控制
  • 基于vue开发的背单词网站
  • javascript 角色跟踪实践
  • 第九周作业
  • 【ThinkPHP项目添加新页面完整解决方案】
  • Thinkphp框架相关漏洞扫描器(一)
  • 【网络通讯】Qt中使用Modbus Tcp协议(附Demo)
  • 在 macOS 上使用 Windows 快捷键指南
  • pd26 虚拟机 (Mac中文)
  • 本周的股指
  • (论文速读)生成式摄影:让AI理解相机的物理世界
  • ELK 企业级日志分析系统
  • 项目日记 -日志系统 -功能完善
  • install_docker.sh
  • opencv的DNN模块里
  • FPGA学习笔记——图像处理之对比度调节(线性调节)
  • SkyWalking 核心概念与智能探针工作原理深度揭秘(上)
  • leetcode hot100 简单难度 day02-刷题
  • ARP报文格式
  • 【论文速递】2025年第26周(Jun-22-28)(Robotics/Embodied AI/LLM)
  • 用【PinMe】轻松实现前端部署(文章附有演示案例)
  • 巨坑Spring ai 之spring-ai-starter-vector-store-elasticsearch
  • 【LeetCode 每日一题】2349. 设计数字容器系统
  • i.MX6ULL移植内核6.6(一)修改网络驱动和LCD驱动
  • vue-router(vue 路由)基本使用指南(一)
  • 酒店台账报表:押金原路退回与收支自动化指南-东方仙盟自动化
  • ⸢ 伍-Ⅰ⸥ ⤳ 默认安全治理实践:软件供应链安全治理
  • LeetCode 刷题【88. 合并两个有序数组、89. 格雷编码】
  • 《青花》歌曲,使用3D表现出意境
  • 【Linux篇】- Ext系列文件系统