ROS Learning-012 beginner_Tutorials (编程) 创建自定义的ROS消息和ROS服务

beginner_tutorials beginner_tutorials 总览 该软件包演示了ROS发布者和订阅者的用法。 有关更多详细信息,请参考以下教程: (链接到外部网站。) (链接到外部站点)。 (指向外部网站的链接。) (指向外部站点的链接。) (指向外部站点的链接。) (指向外部网站的链接。) (指向外部网站的链接。) 依存关系 要运行此程序包,需要以下依赖项: ROS旋律 卡特金 Ubuntu 18.04 通过命令行进行标准安装 cd ~/catkin_ws/src git clone --recursive https://github.com/adigoswami/beginner_tutorials cd .. catkin_make 打开以下终端,并在其中运行以下命令: 1号航站楼: roscore 2号航站楼: cd catkin_ws source devel/s 立即下载

ROS Indigo beginner_Tutorials-11 创建自定义的ROS消息和ROS服务

我使用的虚拟机软件:VMware Workstation 11
使用的Ubuntu系统:Ubuntu 14.04.4 LTS
ROS 版本:ROS Indigo


一. 创建自定义的ROS消息 :(msg)

下面我们来介绍具体步骤:

1:现在beginner_tutorials软件包中创建一个 msg 文件夹,用来存放我们下面要创建的消息文件:

$ cd ~/catkin_ws/src/beginner_tutorials
$ mkdir msg
$ echo "int64  num" > msg/Num.msg 

我们来看看上面的命令执行完后得到了什么:

$ ls msg/
Num.msg

打开这个 Num.msg 文件,看看:打开这个 Num.msg 文件,看看:

$ gedit gedit msg/Num.msg 

这里写图片描述

这样就简单的创建了一个消息文件。

我们具体介绍一下消息( msg ) : msg 文件就是一个描述 ROS 中所有 消息类型 的简单文本。它们可以用来生成不同语言的源代码。

所以下一步:我们要确保 msg 文件被转换成为 C++ 、Python 或者 其他语言的源代码:

2:所以,我们要 确保 package.xml 包含一下两条语句。如果没有的话,就添加上这2句话 (完整的 package.xml 文件)

<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend> 

打开 package.xml 文件 :

aobosir@ubuntu:~/catkin_ws/src/beginner_tutorials$ ls
CMakeLists.txt  include  launch  msg  package.xml  scripts  src
aobosir@ubuntu:~/catkin_ws/src/beginner_tutorials$ gedit package.xml 

将上的两代码添加到这个 package.xml 文件里,如下图所示:

这里写图片描述

解释:
” message_generation ” 是构建时需要的。
” message_runtime ” 是运行的时候需要的。

3:编写 beginner_tutorials 程序包中的CMakeLists.txt 中的 find_packag() 函数,增加对 message_generation 的依赖,这样就可以生成消息了。

打开 CMakeLists.txt 文件:

aobosir@ubuntu:~/catkin_ws/src/beginner_tutorials$ ls
CMakeLists.txt  include  launch  msg  package.xml  scripts  src
aobosir@ubuntu:~/catkin_ws/src/beginner_tutorials$ gedit CMakeLists.txt 

这里写图片描述

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)

4:继续编写 beginner_tutorials 程序包中的CMakeLists.txt 中的 catkin_package() 函数, 添加运行依赖:message_runtime , roscpp , rospy , std_msgs

这里写图片描述

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES beginner_tutorials
   CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
#  DEPENDS system_lib
)

5: 继续编写 beginner_tutorials 程序包中的CMakeLists.txt 中的 add_message_files()函数:添加新创建的消息文件: Num.msg

这里写图片描述

 add_message_files(
    FILES
#   Message1.msg
#   Message2.msg
    Num.msg
 )

6:继续编写 beginner_tutorials 程序包中的 CMakeLists.txt 。通过上一步手动添加完 .msg 文件后,我们要确保 CMake 知道在什么时候重新配置我们的 project 。 确保添加了如下代码: 添加包含 msgs 的软件包依赖

这里写图片描述

 generate_messages(
   DEPENDENCIES
   std_msgs
 )

现在,CMakeLists.txt 文件就编写完了。以上 1~6 就是创建消息的所有步骤。

接下来,编译,就可以生成自己的消息源代码了。


二. 编译工作空间:

$ cd ~/catkin_ws
$ catkin_make

如何检测创建成果呢:通过 rosmsg show 命令,检查 ROS 是否能够识别消息:

$ rosmsg show beginner_tutorials/Num
int64 num

看样子已经成功创建了一个简单的消息。

所有在 msg 路径下的 .msg 文件都将转换为 ROS 所支持语言的源代码。那么,编译生成的 .msg 消息文件生成的 C++ 和 Python 的文件存放在哪个路径里呢:

生成的 C++ 头文件将会放置在 : ~/catkin_ws/devel/include/beginner_tutorials/。

aobosir@ubuntu:~/catkin_ws/devel/include/beginner_tutorials$ ls
Num.h

Python 脚本语言会在 : ~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg 目录下创建。

aobosir@ubuntu:~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg$ ls
__init__.py  _Num.py

lisp 文件会出现在 : ~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/ 路径下.

aobosir@ubuntu:~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg$ ls
beginner_tutorials-msg.asd  Num.lisp  _package.lisp  _package_Num.lisp

三. 创建自定义的 ROS 服务 :( srv )

1:现在 beginner_tutorials 软件包中创建一个 srv 文件夹,用来存放我们下面要创建的服务文件:

$ roscd beginner_tutorials
$ mkdir srv

这次,不自己写服务文件了, 我们直接复制已有的文件:( roscp 是一个很实用的命令行工具,它实现了将文件从一个 package (程序包)复制到另外一个 package (程序包)的功能。) ( package : 程序包或者叫软件包 )

$ roscp  rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

我们打开这个 AddTwoInts.srv 文件看看里面有什么:

gedit srv/AddTwoInts.srv

这里写图片描述

简单吧,就这玩意。下面就是编写 package.xml 文件 和 CMakeLists.txt 文件了。跟创建消息的步骤类似:(目的:确保 srv 文件被转换成为 C++ , Python 和其他语言的源代码)

2:查看 beginner_tutorials 程序包中的 package.xml , 确保它包含一下两条语句: (上面创建的 msg 消息的时候就可以添加了,所以这次就不需要添加了)

<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend> 

3:编写 beginner_tutorials 程序包中的 CMakeList.txt 文件中的 find_packag() 函数,增加对 message_generation 的依赖:(上面创建 msg 消息的时候已经添加了,所以现在就不需要添加了。可以跳过这个步骤)

这里写图片描述

(你发现了吧, message_generation 对 msg 和 srv 都起作用)

4:继续编写 beginner_tutorials 程序包中的 CMakeLists.txt 中的 add_service_files() 函数:添加新创建的服务文件 :

这里写图片描述

 add_service_files(
   FILES
#   Service1.srv
#   Service2.srv
AddTwoInts.srv
 )

5:继续编写 beginner_turtorials 程序包中的 CMakeLists.txt 文件中的 generate_messages() 函数:添加包含 msgs 的软件包依赖: (在创建 msg 消息的时候,就已经添加了,所以现在可以跳过这个步骤)

这里写图片描述

(你发现了吧, generate_messages() 函数 对msg和srv 都起作用)

OK 完成 1~5 的步骤你的服务文件就已经创建完成了。

四. 编译工作空间:

那么到这里,一切步骤全部搞定,现在我们回到主工作空间路径来编译一下:

$ cd ~/catkin_ws
$ catkin_make

OK, 编译完成。



总结:
我们现在已经学会了如何创建ROS的 消息和服务,它们是ROS节点间相互通讯的除ROS话题外的另一种方式。

下一节,我就来使用刚刚创建的ROS消息和ROS服务,编写ROS服务版的 Hello World 程序。(使用ROS服务进行通信的Hello World程序)

MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载) 目录 MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载) MQTT(二)在windows64位上安装Python环境 MQTT(三)Python客户端+net客户端+net服务端 简单通信 MQTT(四)树莓派开机自动运行Python客户端 MQTT(五)EMQ开源MQTT消息服务器 1 什么是 MQTT ? MQTT(Message Que... 阅读详情

相关推荐

代码详解——Transformer

对于一个序列,在 time_step 为 t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。当 Decoder 的输入矩阵和 Mask 矩阵输入矩阵包含 “ I have a cat” (0, 1, 2, 3, 4) 五个单词的表示向量,Mask 是一个 5×5 的矩阵。然后判断是否传入的mask, 如果有mask (mask参数值不为None),则把mask为0的位置,将对应位置的attn的值设为无穷小的负数。可以发现得到的输出和输入的K,Q,V的大小相同。

zyw2002的博客 7208

ROS Learning-005 beginner_Tutorials 创建ROS程序包(就是软件包)

ROS Indigo beginner_Tutorials-04 创建ROS程序包(就是软件包) 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo 下面我们就来在刚刚创建的 catkin_ws ROS 工作空间中创建第一个软件包: 简单的说就是创建一个 ...

weixin_30437847的博客 276

顶刊级科研绘图技巧

顶刊级科研绘图技巧

2401_89571885的博客 1155

ROS Learning-010 beginner_Tutorials 编写简单的启动脚本文件(.launch 文件)

ROS Indigo beginner_Tutorials-09 编写简单的启动脚本文件 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo .launch文件 : 下面我们将介绍,如何编写一个启动脚本程序:(.launch文件) 还记得我们在 创建...

weixin_30265103的博客 264

SAP RAP 里的 EML 全解:从语言定位到事务语义,再到真实案例的落地方式

摘要:EML(Entity Manipulation Language)是ABAP RAP模型的核心组件,作为ABAP的子集用于操作业务对象(BO)。它通过声明式语法(READ/MODIFY/EXECUTE/COMMIT)统一访问BO的行为与数据,并由RAP运行时自动处理校验、锁定、草稿管理等生命周期。EML将业务语义融入代码,确保与Fiori应用共享同一套校验逻辑,并通过FAILED/REPORTED/MAPPED管道传递错误与消息。其事务控制(IN LOCAL MODE与COMMIT ENTITIES)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 527

Label Studio 数据标注平台,大模型预训练与微调必备

摘要:LabelStudio是一款开源数据标注工具,支持文本、图像等多种数据类型的标注。本文介绍了其安装方法(通过conda创建环境并pip安装)、基础使用流程(创建项目、导入数据、设置标签、标注导出)以及AI自动标注功能的实现。重点讲解了如何通过MLBackend集成LangChain模型实现自动标注:创建自定义模型类、构建预测链、处理返回结果,最后配置到LabelStudio项目中。该功能可显著提升标注效率,标注人员只需在AI预测结果基础上进行修正。

技术引领业务创新 287

ros学习3--Creating Package (ROS软件包创建)

系统配置ubuntu20.04+ros1,是初学者按照ros官网初级教程学习记录,仅作个人学习记录,如有问题可联系本文作者。

m0_60030502的博客 1080

手把手教你完成YOLOv10 PySide6目标检测界面搭建,使用Qt6设计YOLOv10检测系统,前台系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程

手把手教你完成YOLOv10 PySide6目标检测界面搭建,使用Qt6设计YOLOv10检测系统,前台系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1732

ROS Learning-008 beginner_Tutorials ROS话题

ROS Indigo beginner_Tutorials-07 ROS话题我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo1. 理解 ROS 话题:我们来通过运行一个 ROS 的例子程序来 感受一下什么是 ROS 话题: 运行下面的命令: (Ctrl+Alt+T 打开一个新终端)

AoboSir.com 1万+

数字电视中的 Closed Caption (CC) 字幕标准协议

本文将详细介绍 DVB中的 CC 字幕标准协议,包括数据结构格式、字段定义、字段占用比特数以及字段用途。此外,本文还将举例说明如何从 TS 传输流中解析 CC 字幕信息,并组织打包到电视节目中进行显示。

以实战经验介绍行业知识 669

12、认知地图的建模与学习

本博客系统介绍了认知地图的定义、背景及其在机器智能领域的应用,重点探讨了模糊认知地图(FCMs)的建模方法与优势。文章还对比分析了几种主流的认知地图模型(如Axelrod模型、Kosko模型等),并讨论了模型的稳定性条件及实际应用前景。通过智能制造和医疗诊断的具体案例,展示了认知地图在复杂因果推理中的强大能力,并提出了模型优化方向与未来研究展望。

plant的博客 207

ROS Learning-011 beginner_Tutorials (编程) 编写 ROS 话题版的 Hello World 程序(Python版)

ROS Indigo beginner_Tutorials-10 编写 ROS 话题版的 Hello World 程序(Python版)我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo 1. 前言 :Hello world 程序,在我们编程界,代表学习某种语言编写的第一个程序。对于 R

AoboSir.com 1万+

【人工智能】Claude服务访问受限报错的技术分析与解决方案

在使用Claude系列大模型服务的过程中,部分用户会遇到服务不可用的标准化拦截提示,导致无法正常访问模型核心能力。本文针对该类报错进行完整技术拆解,明确报错根因与底层校验逻辑,并分场景提供合规、可落地的排查与解决方案,同时规避相关使用风险。

奶爸的编程之路,也就一周冷个三天 2670

ROS Learning-002 beginner_Tutorials 如何添加ROS环境变量 和 如何更新ROS源代码

ROS Indigo beginner_Tutorials 之 添加环境变量 和 更新ROS源代码的命令我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo如何添加 ROS 环境变量在搭建环境变量前,我们现在先检查一下,看看 ROS 环境变量有没有在系统环境变量中: $ export |

AoboSir.com 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ROS Learning-004 beginner_Tutorials 介绍简单的ROS命令

ROS Indigo beginner_Tutorials-03 介绍简单的ROS命令我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo那么 环境变量添加完了, 学习 ROS 用的工作空间也创建好了, 下面我们开始: 介绍一下简单的 ROS 命令.先下载一个 ros-tutorials

AoboSir.com 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ROS Learning-003 beginner_Tutorials 创建ROS工作空间

ROS Indigo beginner_Tutorials-02 创建ROS工作空间我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo在我们这套 ROS 教程中涉及的和编写的所有 ROS 代码需要有一个地方存放它,这个地方叫做工作空间。可以说,这个工作空间应该是一个大的集合。当我们要编译

AoboSir.com 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ROS Learning-009 beginner_Tutorials ROS服务 和 ROS参数

ROS Indigo beginner_Tutorials-08 ROS服务 和 ROS参数我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo1. 理解 ROS 服务 和 ROS 参数:服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个

AoboSir.com 1万+

ROS Learning-013 beginner_Tutorials (编程) 编写ROS服务版的Hello World程序(Python版)

ROS Indigo beginner_Tutorials-12 编写ROS服务版的Hello World程序(Python版)我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo 前言:在编写 ROS 话题版的 Hello World 程序(python版) 这一节中,发布器(talke

AoboSir.com 1万+

ROS Learning-007 beginner_Tutorials ROS节点

ROS Indigo beginner_Tutorials-06 ROS节点我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo一. 理解ROS 节点:ROS的节点: 可以说是一个可运行的程序。当然这个程序可不简单。因为它可以接受来自ROS网络上其他可运行程序的输出信息,也可以发送信息给R

AoboSir.com 1万+

ROS Learning-006 beginner_Tutorials 编译ROS程序包

ROS Indigo beginner_Tutorials-05 编译 ROS 程序包我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo注意:编译前要加下面这个路径为环境变量: (当然了 我们已经将它写到 .bashrc 启动文件里去了, 每次打开一个新终端都会自动添加下面这个目录为环境

AoboSir.com 1万+

解决No module named beginner_tutorials.srv

@解决No module named beginner_tutorials.srv 练习服务的时候出的错 看看自己 是不是这个目录 catkin_ws /src/beginner_tutorials 如果不是,改为自己目录下的名字,我的是 catkin_ws /src/learning_communication 改为from learning_communication.srv import *...

weixin_41640707的博客 2226
上一篇: 电子模块 001 --- 遥杆 JoyStick
下一篇: ROS Learning-013 beginner_Tutorials (编程) 编写ROS服务版的Hello World程序(Python版)
AoboSir
博客等级 码龄10年 996粉丝 285原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值