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

学习大纲:

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 工具的子命令说明。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android仿美团左右联动购物列表

Android仿美团左右联动购物列表 左右联动购物列表,不难。 一、思路: 两个RecycleView 二、效果图: 三、关键代码: public class MainActivity extends AppCompatActivity {private RecyclerView rl_left;private RecyclerVie…

微信小程序 运行出错 弹出提示框(获取token失败,请重试 或者 请求失败)

原因是:需要登陆微信公众平台在开发管理 中设置 相应的 服务器域名 中的 request合法域名 // index.jsPage({data: {products:[],cardLayout: grid, // 默认卡片布局为网格模式isGrid: true, // 默认为网格布局page: 0, // 当前页码size: 10, // 每页大小hasMore…

室联人形机器人:家政服务任务结构化、技术要点、深入应用FPGA的控制系统框架设计(整合版)

目录: 0 引言 1 人形机器人对室内家政服务任务的结构化 1.1人形机器人在室内家政服务中的比较优势 1.1.1 人形机器人拟人性的7个维度 1.1.2 拟人性在室内家政服务工作中的比较优势 1.1.3 潜在的重要用户:宠物爱好者 1.2 居所室内环境的特征与结构…

【YOLO部署Android安卓手机APP】YOLOv11部署到安卓实时目标检测识别——以火焰烟雾目标检测识别举例(可自定义更换其他目标)

前言:本项目基于YOLOv11部署到手机APP实现对火焰烟雾的检测识别,当然,以此你可以按照本项目开发步骤扩展更换为其他目标进行检测,例如更换为车牌、手势、人脸面部活动、人脸表情、火焰烟雾、行人、口罩、行为、水果、植物、农作物等等部署手机APP进行检测。本文为详细设计/…

python 执行celery

1、redis安装并启动redis安装与使用-CSDN博客 2、安装 celery 、eventlet 3. Task handler raised error: ValueError(not enough values to unpack (expected 3, got 0)) - Redskaber - 博客园 pip install celery pip install eventlet 3、python 版本3.10 #创建异步任…

未完成_RFdiffusion应用案例_从头设计pMHC的结合剂

目录 1. 论文导读1)摘要2)设计流程3)设计流程的验证 2. 实战 1. 论文导读 Liu, Bingxu, et al. “Design of high specificity binders for peptide-MHC-I complexes.” bioRxiv (2024): 2024-11. 1)摘要 MHC-I 将胞内抗原肽递呈…

【css】基础(一)

本专栏内容为:前端专栏 记录学习前端,分为若干个子专栏,html js css vue等 💓博主csdn个人主页:小小unicorn ⏩专栏分类:css专栏 🚚代码仓库:小小unicorn的代码仓库🚚 &a…

【Python高级语法与正则表达式】

目录 1.正则表达式 1.1概述: 1.2re模块介绍 1.3re模块相关方法(常用): 1.4案例 1.5正则表达式详解 1.5.1查什么 1.5.2查多少 1.5.3 从哪查 1.6重要概念 1.6.1子表达式 1.7 正则表达式的其他方法 1.7.1选择匹配符 1.7.2…

Vue03

目录 一、今日目标 1.生命周期 2.综合案例-小黑记账清单 3.工程化开发入门 4.综合案例-小兔仙首页 二、Vue生命周期 三、Vue生命周期钩子 四、生命周期钩子小案例 1.在created中发送数据 六、工程化开发模式和脚手架 1.开发Vue的两种方式 2.Vue CLI脚手架 基本介绍…

云轴科技ZStack出席中国电信国际EMCP平台香港发布会,持续推动海外合作

近日,以“云聚未来 翼起新篇”为主题的中国电信国际多云服务一站式平台(E-surfing Managed Cloud Platform,简称EMCP平台)新闻发布会在香港成功举办,标志着中国电信国际在云计算服务领域取得了又一重大进展。云轴科技…

Alibaba Druid(简称Druid)

目录 核心功能 数据源配置与管理: 高性能与可扩展性: 监控与SQL解析: 安全性: 应用场景 使用方式 配置示例 通过yaml方式配置 web.xml中配置 访问Druid的监控页面 监控页面展示 Alibaba Druid(简称Druid&am…

JavaWeb学习--cookie和session

目录 (一)Cookie概述 1.什么叫Cookie 2.Cookie规范 3.Cookie的覆盖 4.cookie的最大存活时间 ​​​​​​(Cookie的生命) (二) Cookie的API 1.创建Cookie:new 构造方法 2.保存到客户端浏…

策略模式实战 - 猜拳游戏

**可以整体的替换一套算法,这就是策略模式。**这样对于同一个问题,可以有多种解决方案——算法实现的时候,可以通过策略模式来非常方便的进行算法的整体替换,而各种算法是独立封装好的,不用修改其内部逻辑。 具体的实…

Transformer简述和实现

Transformer 1、概述 (一)、诞生 自从2017年此文《Attention is All You Need》提出来Transformer后,便开启了大规模预训练的新时代,也在历史的长河中一举催生出了GPT、BERT这样的里程碑模型。 (二)、优势 相比之前占领市场的LSTM和GRU模型&#xf…

Astro 5.0 发布

Astro 5.0 发布! 使用 Astro Content Layer 可以从任何来源加载内容,并使用 Server Islands 将缓存的静态内容与动态个性化内容结合起来。 什么是 Astro Astro 是用于构建内容驱动网站(包括博客、营销和电子商务)的 Web 框架。…

数据结构与算法-03链表-04

链表与递归 在链表操作中移除、反转经常会用到递归实现。通过力扣案例理解链表常规操作中的递归实现。 移除数据 删除链表的节点 问题 LCR 136. 删除链表的节点 - 力扣(LeetCode) 问题描述 给定单向链表的头指针和一个要删除的节点的值,定…

Let up bring up a linux.part2 [十一]

之前的篇幅中我们已经将 Linux 内核 bringup 起来了,不知道大家有没有去尝试将根文件系统运行起来,今天我就带领大家完成这个事情,可以跟着下面的步骤一步步来完成: 在这里我们使用 busybox 构建 rootfs: 下载 busyb…

WEB开发: Node.js路由之由浅入深(一) - 全栈工程师入门

作为一个使用Node.js多年的开发者,我已经习惯于用Node.js写一些web应用来为工作服务,因为实现快速、部署简单、自定义强。今天我们一起来学习一个全栈工程师必备技能:web路由。(观看此文的前提是默认你已经装好nonde.js了&#xf…

新书速览|循序渐进Node.js企业级开发实践

《循序渐进Node.js企业级开发实践》 1 本书内容 《循序渐进Node.js企业级开发实践》结合作者多年一线开发实践,系统地介绍了Node.js技术栈及其在企业级开发中的应用。全书共分5部分,第1部分基础知识(第1~3章)&#xf…