1.1 Beginner Level学习之“创建 ROS msg 和 srv”(第十节)

news2025/1/19 3:30:07

学习大纲:

1. msg 和 srv

  1. msg 文件是描述 ROS 消息字段的简单文本文件。它们用于为不同语言生成消息的源代码。
  2. srv 文件则描述了一个服务,包括两部分:请求和响应。Srv 文件用于生成服务的源代码。
  3. msg 文件存储在包的 msg 目录中。
  4. srv 文件存储在包的 srv 目录中。
  5. msg 文件的格式简单,包含每行一个字段的类型和名称。支持的字段类型包括:
  6. 基本类型:int8, int16, int32, int64(及其无符号版本)
  7. 浮点数类型:float32, float64
  8. 字符串:string
  9. 时间类型:time, duration
  10. 其他 msg 文件
  11. 数组:可变长度 [] 和固定长度 [C]

另外,ROS 中有一个特殊类型:Header,它通常包含时间戳和坐标框架信息。常见的消息格式中,第一行通常是 Header header。

示例:msg 文件

示例:srv 文件

在此示例中,A 和 B 是请求字段,Sum 是响应字段。

2. 使用 msg

创建 msg

让我们在之前创建的包中定义一个新消息。

$ cd /opt/ros/noetic/share/ros

$ mkdir msg

$ echo "int64 num" > msg/Num.msg

也可以通过添加多个字段来创建更复杂的 msg 文件。例如:

接下来,需要确保 msg 文件能够被编译为 C++、Python 等语言的源代码。

编辑 package.xml 文件,确保添加并取消注释以下内容:

编辑 CMakeLists.txt 文件,找到 find_package 调用并确保添加 message_generation 依赖项:

在 CMakeLists.txt 中取消注释 add_message_files 和 generate_messages:

使用 然后可以使用 rosmsg show 命令查看消息定义。

$ rosmsg show beginner_tutorials/Num

输出结果:int64 num

3. 使用 srv

创建 srv

我们可以在现有包中创建一个服务文件。

$ cd /opt/ros/noetic/share/ros

$ mkdir srv

使用 roscp 从其他包中复制现有的服务文件:

$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

如创建消息时一样,需要更新 package.xml 和 CMakeLists.txt 文件。

在 package.xml 中确保依赖项 message_generation 和 message_runtime 存在:

在 CMakeLists.txt中添加message_generation并取消注释add_service_files和generate_messages:

使用 rossrv:使用 rossrv show 查看服务定义。

$ rossrv show beginner_tutorials/AddTwoInts

输出结果:

int64 a

int64 b

---

int64 sum

4. msg 和 srv 的共同步骤

最后,确保在 CMakeLists.txt 中调用 generate_messages 并指定依赖项:

重新编译你的包:

$ cd /opt/ros/noetic/share/ros

$ cd ../..

$ catkin_make

5. 获取帮助

ROS 提供了多种命令行工具,你可以随时通过 -h 参数查看命令的帮助。例如:

$ rosmsg -h

可以看到 rosmsg 工具的子命令说明。

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

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

相关文章

ubuntu中使用ffmpeg库进行api调用开发

一般情况下,熟悉了ffmpeg的命令行操作,把他当成一个工具来进行编解码啥的问题不大,不过如果要把功能集成进自己的软件中,还是要调用ffmpeg的api才行。 ffmpeg的源码和外带的模块有点太多了,直接用官网别人编译好的库就…

deepsort复现报错TypeError: tuple indices must be integers or slices, not tuple 解决

deepsort复现中遇到的TypeError: tuple indices must be integers or slices, not tuple问题的解决-CSDN博客 以上为参考教程。 复现的时候出现这个报错,搞了好久试了好多方法,包括降 scikit-learn版本,都不行,最后终于找到这个博…

Rigol DP711自动控制--SCPI命令

通过串口的SCPI命令来控制通道输入输出 也可以用UltraSigma UI来发送SCPI 物理连接: Pin2_2, Pin3_3, Pin5_5 串口命令控制: 命令:9600, 8bit, None SCPI CMD(Standard Commands for Programmable Instruments) OUTPut CH1, On…

【Java Web】Tomcat 快速入门

通常,为了让 Java 开发的应用程序(app)能够在服务器上正常运行,必须安装 Java 运行时环境(JRE)。JRE 主要支持 Java SE,而如果要运行 Java EE 应用,则需要更多的支持,比如…

RabbitMQ延迟消息的实现

RabbitMQ延迟队列的实现 延迟消息是什么延迟消息的实现死信交换机代码实现 延迟消息插件 延迟消息是什么 延迟消息是将消息发送到MQ中,消费者不会立即收到消息,而是过一段时间之后才会收到消息,进行处理。在一些业务中,可以用到延…

SpringMvc完整知识点一

SpringMVC概述 定义 SpringMVC是一种基于Java实现MVC设计模型的轻量级Web框架 MVC设计模型:即将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。这种分离…

强化学习新突破:情节记忆与奖励机制引领多智能体协作

简介 本推文介绍了韩国科学技术院发表在人工智能顶会ICLR 2024上的论文《Efficient Episodic Memory Utilization of Cooperative Multi-Agent Reinforcement Learning》。该论文提出创新性高效情节记忆利用(Efficient Episodic Memory Utilization,EMU…

密码翻译

密码翻译 C语言实现C实现Java实现Python实现 💐The Begin💐点点关注,收藏不迷路💐 在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报…

【C++初阶】第7课—标准模版库STL(string_1)

文章目录 1. 什么是STL2. STL六大组件3. 标准库中string类3.1 auto关键字3.2 范围for3.3 string类的类型3.4 string类的常用接口(string类对象的常见构造)3.5 string的析构和赋值运算符重载3.6 string类对象的容量操作 1. 什么是STL STL(standard template library—标准模板库…

uniapp扭蛋机组件

做了一个uniapp的扭蛋机组件,可以前往下载地址下载 支持vue2、3、h5页面微信小程序,其余小程序未测试 示例图片

MyBatis的工作流程是怎样的?

大家好,我是锋哥。今天分享关于【MyBatis的工作流程是怎样的?】面试题。希望对大家有帮助; MyBatis的工作流程是怎样的? MyBatis 的工作流程可以分为几个主要步骤:从配置、映射到执行 SQL,最终获取数据库结…

MYSQL PARTITIONING分区操作和性能测试

PARTITION OR NOT PARTITION IN MYSQl Bill Karwin says “In most circumstances, you’re better off using indexes instead of partitioning as your main method of query optimization.” According to RICK JAMES: “It is so tempting to believe that PARTITIONing wi…

[软件工程]九.可依赖系统(Dependable Systems)

9.1什么是系统的可靠性(reliability) 系统的可靠性反映了用户对系统的信任程度。它反映了用户对其能够按照预期运行且正常使用中不会失效的信心程度。 9.2什么是可依赖性(dependablity)的目的 其目的是覆盖系统的可用性&#x…

vue3中使用watchEffect和watch函数时应当防止内存泄漏

官方文档:https://cn.vuejs.org/api/reactivity-core.html#watcheffect 也就是说当使用他们两个时候,使用完成之后要及时停止他们,防止一直在运行,停止他们之后,也可以再次开启。 watchEffect()​ 立即运行一个函数…

Wwise SoundBanks内存优化

1.更换音频格式为Vorbis 2.停用多余的音频,如Random Container的随机脚步声数量降为2个 3.背景音乐勾选“Stream”。这样就让音频从硬盘流送到Wwise,而不是保存在内存当中,也就节省了内存 4.设置最大发声数Max Voice Instances 5.设置音频…

Windows宝塔面板下IIS环境如何部署SSL证书?

Windows宝塔面板下IIS环境如何部署SSL证书? 平时服务器linux宝塔用的较多,所以linux系统宝塔,如何部署SSL证书还是比较熟悉,今天遇到一个windows的部署SSL证书,还是头一次,所以记录一下,以防忘…

【计算机视觉】图像的几何变换

最常见的几何变换有仿射变换和单应性变换两种,最常用的仿射变换有缩放、翻转、旋转、平移。 1. 缩放 将图像放大或缩小会得到新的图像,但是多出的像素点如何实现----插值 1.1 插值方法 最近邻插值 双线性插值 cv2.resize() 是 OpenCV 中用于调整图像…

深入浅出 Go 语言:数组与切片

深入浅出 Go 语言:数组与切片 引言 在 Go 语言中,数组和切片是两种非常重要的数据结构,用于存储和操作一组相同类型的元素。虽然它们看起来相似,但在使用上有很大的区别。理解数组和切片的区别以及如何正确使用它们,…

基于超级电容和电池的新能源汽车能量管理系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 超级电容特性 4.2 电池特性 5.完整工程文件 1.课题概述 基于超级电容和电池的新能源汽车能量管理系统simulink建模与仿真。分析不同车速对应的电池,超级电容充放电变化情况。 2.系统仿…

y3编辑器文档3:物体编辑器

文章目录 一、物体编辑器简介1.1 界面介绍1.2 复用(导入导出)1.3 收藏夹(项目资源管理)1.4 对象池二、单位2.1 数据设置2.2 表现设置2.3 单位势力和掉率设置2.4 技能添加和技能参数修改2.5 商店2.5.1 商店属性设置2.5.2 商店物品设置三、装饰物3.1 属性编辑3.2 碰撞体积四、…