五、ROS2接口及其使用

news2025/7/14 5:39:56

接口,即interface,其实是一种规范。
举个例子,不同厂家生产出不同类型的激光雷达,每种雷达的驱动方式,扫描速率都不相同。
当机器人进行导航时,需要激光雷达的扫描数据,假如没有统一接口,每换一个雷达就需要重新适配。ROS2针对这种情况就定义了统一的接口。
可以使用ros2 interface package xxx命令查看某一个接口包下的所有接口。
虽然ROS2为我们定义了大量拿来即用的接口,我们还可以使用自定义接口。
之前提到过ROS2提供四种通信方式:话题、服务、动作、参数。除了参数之外,其他三个都支持自定义接口,故所定义的接口也分为话题接口、服务接口、动作接口
话题接口格式 xxx.msg
服务接口格式 xxx.srv
动作接口模式 xxx.action

ROS2接口常用的命令行指令

查看接口列表ros2 interface list
查看所有接口包ros2 interface packages
查看某一个包下的所有接口ros2 interface package std_msgs
查看某一个接口详细的内容 ros2 interface show std_msgs/msg/String
输出某一个接口所有属性 ros2 interface proto sensor_msgs/msg/Image

自定义话题接口

话题是一个单向通信接口,同一个话题只能由发布者将数据传递给订阅者,所以定义话题接口也只需要定义发布者所要发布的类型即可。
先新建一个village_interfaces的功能包,有了功能包之后,我们就可以新建话题接口了。新建方法如下:
1、新建msg文件夹,并在文件夹下新建xxx.msg
2、在xxx.msg下编写消息内容并保存
3、在CmakeLists.txt添加依赖和msg文件目录
4、在package.xml中添加xxx.msg所需的依赖
5、编译功能包即可生成python与C++头文件

1、新建一个工作空间

在town_ws的src文件夹下,运行下面的指令,即可完成village_interfaces功能包的创建

ros2 pkg create village_interfaces --build-type ament_cmake

进入interfaces文件夹使用tree命令可以看到如下结构
在这里插入图片描述

2、新建msg文件夹和Novel.msg(小说消息)

ps:msg文件首字母一定要大写,ROS2强制要求

cd village_interfaces
mkdir msg
cd msg
touch Novel.msg
cd ..

3、编写Novel.msg内容

#原始数据类型
string content
#调用已有的消息类型
sensor_msgs/Image imge

4、修改CMakeLists.txt

添加如下代码到CmakeLists.txt文件即可

#添加对sensor_msgs的
find_package(sensor_msgs REQUIRED)
find_package(rosidl_default_generators REQUIRED)
#添加消息文件和依赖
rosidl_generate_interfaces(${PROJECT_NAME}
	"msg/Novel.msg"
	DEPENDENCIES sensor_msgs
)

5、修改package.xml

修改village_iinterfaces目录下的package.xml ,添加下面三行代码,为工程添加一下所需依赖

  <build_depend>sensor_msgs</build_depend>
  <build_depend>rosidl_default_generators</build_depend>
  <exec_depend>rosidl_default_runtime</exec_depend>
  <member_of_group>rosidl_interface_packages</member_of_group>

6、编译

回到town_ws目录
运行colcon build --packages-select village_interfaces进行编译

测试验证

source install/setup.bash
ros2 interface package village_interfaces #查看包下所有接口
ros2 interface show village_interfaces/msg/Novel #查看内容
ros2 interface proto village_interfaces/msg/Novel #查看属性

如果能看到成功输出结果,即编译成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/36737.html

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

相关文章

Nginx (6):nginx防盗链配置

先说一下含义&#xff0c;就是想让nginx里的静态资源只供它反向代理连接的内部服务器去访问&#xff0c;其他人想访问&#xff0c;就不给。比如01虚拟机充当nginx服务器&#xff0c;它里面存了很多静态资源&#xff0c;04虚拟机proxy_pass到01虚拟机&#xff0c;想访问它的页面…

Linux--信号量共享内存

1.基础知识&#xff1a; &#xff08;1&#xff09;共享内存是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间的数据传递不再涉及内核&#xff0c;即进程不再通过执行进入内核的系统调用来传递彼此的数据。 &#xff08;2&#xff09;共享…

MySQL浅析之架构概览

MySQL主要分为Server层&#xff0c;跟存储引擎层。 Server层负责“逻辑处理”&#xff0c;包括连接器、分析器、优化器、执行器以及所有内置函数。所有跨存储引擎的功能都在这一层实现&#xff0c;比如存储过程、触发器、视图等。 存储引擎层跟文件系统交互&#xff0c;负责数…

bug探索之路:List<Map>get取出元素却是String?

一、bug初现峥嵘 有一说一我定义的List<Map>对吧&#xff0c;我get(0)取出的元素也应该是Map类型没问题吧。不行&#xff0c;编译器告诉我&#xff0c;java.lang.String cannot be cast to java.util.Map。 这个意思就是说&#xff0c;你这个就是String类型&#xff0c;…

Spring Cloud Gateway夺命连环10问?

这篇文章介绍下微服务中的一个重要角色&#xff1a;网关&#xff0c;对于网关如何选择&#xff0c;由于阿里系暂时未出网关&#xff0c;当然是选择了Spring cloud Gateway&#xff0c;毕竟是亲儿子。 文章目录如下&#xff1a; ​ 编辑切换为居中 添加图片注释&#xff0c;不…

[附源码]java毕业设计智能超市导购系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【科学文献计量】RC.networkBibCoupling()中的参数解释

RC.networkBibCoupling中的参数解释 1 数据2 RC.networkBibCoupling()中的参数解释2.1 测试weighted参数2.2 测试fullInfo参数2.3 测试addCR参数1 数据 使用web of science中的数据,借助metaknowledge库读入到python中,然后截取2020-2021年的数据构建网络 2 RC.networkBib…

CrystalNet ADO.Net VCL for Delphi

CrystalNet ADO.Net VCL for Delphi ADO。用于Delphi的Net DAC被描述为数据库的最快和最可靠的连接&#xff0c;以及使用ADO技术的虚拟和数据库的替代方案。NET在Delphi。它能够为用户和开发人员提供对信息源的数据访问&#xff0c;这些信息源不喜欢SQL Server、Oracle、Vista…

Flutter高仿微信-第42篇-创建群

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; /*** Author : wangning* Email : maoning20080809163.c…

ARM S5PV210的启动过程

一、内存 SRAM 静态内存 特点就是容量小、价格高&#xff0c;优点是不需要软件初始化直接上电就能用。DRAM 动态内存 特点就是容量大、价格低&#xff0c;缺点就是上电后不能直接使用&#xff0c;需要软件初始化后才可以使用。 单片机中&#xff1a;内存需求量小&#xff0c;而…

秉持技术普惠的华为,致力于无处不在的联接

编辑 | 阿冒 设计 | 沐由经济学家托马斯弗里德曼在《世界是平的》一书中曾经指出&#xff1a;“科技和通信领域如闪电般迅速的进步&#xff0c;使全世界的人们可以空前地彼此接近。”然而&#xff0c;在世界各国和地区的政府工作报告中&#xff0c;“数字鸿沟”一词出现的频…

致敬最美逆行者网页设计作品 大学生抗疫感动专题网页设计作业模板 疫情感动人物静态HTML网页模板下载

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【Matlab代码】基于遗传算法和蚂蚁优化算法的路径优化问题

目录 1 概述 2 Matlab代码 3 运行结果 1 概述 在1959年&#xff0c;Dantzing 和 Ramser在经过实验和思考后&#xff0c;首次提出配送车辆路径优化问题。在物流运输中配送是重要的环节&#xff0c;准确选择配送车辆路径能有效缩短运输时间、降低运输成本、满足顾客需求等目的…

C语言 * 数组的解析 *

目录 一&#xff1a;一维数组的创建和初始化 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 二&#xff1a;二维数组的创建和初始化 2.1 数组的创建 2.2 数组的初始化 2.3 一维数组的使用 2.4 一维数组在内存中的存储 2.5 数组越…

黑苹果系统安装常见问题汇集

常见问题 黑苹果折腾之路上遇到的问题多种多样&#xff0c;这里把常见问题分为安装篇、使用篇、进阶篇。 安装篇 如何安装黑苹果&#xff1f; 目前主要有两种方式&#xff0c;第一种是推荐的方式&#xff1a;下载黑苹果安装镜像 → 刻录到U盘 → 调整配置文件 → 格式化准备…

又一款机器学习模型解释神器:LIME

在机器学习的许多应用中&#xff0c;要求用户信任模型来帮助他们做出决策。医生肯定不会仅仅因为“模型这么说”就给病人做手术。即使在风险较低的情况下&#xff0c;例如从 Netflix 选择要观看的电影时&#xff0c;在我们根据模型放弃几个小时的时间之前&#xff0c;也需要一定…

红黑树封装 map/set 及其迭代器(C++)

目录 一、map/set 的封装 1.1 封装思路 1.2 红黑树节点调整 1.3 map 和 set 的定义 1.4 仿函数 KeyOfValue 1.5 map/set 的插入 二、map/set 迭代器实现 2.1 迭代器的定义 2.2 解引用运算符重载 2.3 成员访问运算符重载 2.4 (不)等于运算符重载 2.5 begin() 与 end…

[附源码]java毕业设计智慧农业销售平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

认知电子战 | 电子战简介

1 电子战的基本概念 电子战(Electronic Warfare,EW)也叫做电子对抗(Electronic Counter Measures,ECM) 简洁定义: 电子战是为确保我方使用电磁频谱,同时阻止敌方使用电磁频谱所采取的战术与技术 完善定义: 利用电磁能、定向能、水声能等的技术手段,确定、扰乱、削弱…

Linux kprobe原理

文章目录前言一、Kprobes and Return Probes二、How Does a Kprobe Work三、Changing Execution Path四、Return Probes4.1 How Does a Return Probe Work4.2 Kretprobe entry-handler五、How Does Jump Optimization Work5.1 Init a Kprobe5.2 Safety Check5.3 Preparing Deto…