首页 > 其他分享 >ROS中的msg与srv创建

ROS中的msg与srv创建

时间:2024-05-08 21:34:12浏览次数:11  
标签:包中 数据类型 srv msg message ROS

学习参考:

ROS/教程/CreatingMsgAndSrv - ROS Wiki

ROS Message 类型总结_ros msg类型-CSDN博客

在对于存在代码的功能包中一般使用src存放源码,对于功能包是话题而言一般是在功能包中还会多增加一个msg文件夹,感觉相当于放置话题所需要传递的数据类型,msg文件夹中放置话题使用的消息,可能会有不同的消息,比如人与人之间的交流,动物与动物之间的交流,所msg文件夹下放置的.msg文件就是给不同的话题去使用。

 

而服务通讯的功能包中会建一个srv进行存放服务通讯使用的数据类型,大致作用也是相同;

 

--------------------------------------------------------------------------------------------------------------

ROS中的通讯分为两种一种为话题,一种为服务。

对于话题通讯而言需要有发布者与订阅者,订阅者通过话题订阅发布者发布传递的信息;

对于服务通讯而言需要有请求者与回应者,两者一对一进行交流;

--------------------------------------------------------------------------------------------------------------

msg:

我感觉msg就是话题通讯中的自主定义需要进行传递的数据类型,在.msg文本文件中设定这个话题所使用传递的数据类型,下面是一些数据类型;

常见类型感觉有点像是封装好的一大串类型,要调用别的包或库再写出使用的类型在.msg文档中;

 下面是一个msg中text文档示例:

 上面只是创建使用的数据类型的text文档,在功能包中还需要设置Package.xml文件与CMakeList.txt文件才算设置一个通讯的msg完成;

打开Package.xml文件,在其中设置下图:

 其作用:

ROS通过message_generation将.msg文件或者.srv文件自动转换为C++或者Python能使用的源码,同时需要message_runtime提供运行时的支持;

保存后再编写功能包中的CMakeList.txt文件

①find_package()

寻找到find_package()在内部加上message_generation你所使用的依赖包,因为上面那些使用到这个包,寻找到这个包才能使用它;

②catkin_package()

同时还有下面的catkin_package()感觉这里是编译包导入包的感觉,对于使用的依赖,记得写上去,在这里我们上面写了依赖项是message_generatin,但是要执行的是包中的message_runtime所以下面的编译依赖直接编译message_runtime即可,我的感觉是这样的

可以一次性写多个编译依赖,用空格隔开就好了。

 eg:

③add_message_files()

修改一个add_message_files(),用于指定使用文件;

 ④generate_messages()作用不知道干嘛的有点难受

 上面就是一个msg消息的创建过程;

--------------------------------------------------------------------------------------------------------------

srv:

同理是差不多的,因为只是传递信息的方式不同,其中数据类型那些大致都是相同的。

在服务功能包中的srv文件夹创建所需要的.srv文件,在里面存放这个服务的数据类型;

但是这个.srv文档的写的方式与.msg存在一点差距,上面说的.msg文档中只用存放总的使用的数据类型,因为只有一个发布者进行信息发布,订阅者只负责订阅信息即可,但是服务不一样有请求有响应,.srv文档中通过三个-即---来分割开两个进行传递的数据类型,上半区域是request即请求,下半区是respond即回应的数据类型,创建完保存后同样要对服务功能包中的Package.xml与CMakeList.txt做出修改,大致内容也是相同;

在Package.xml中打上你所需要使用依赖的标签,与所要执行的依赖。

在CMakeList.txt中,无所谓步骤位置放对写对就行,和上面.msg作用大致相同

①find_package()

②add_service_files()

③generate_messages()

④catkin_package()

 

这些玩意设置完毕保存就行,这就是一个.srv文档的创建。

 

标签:包中,数据类型,srv,msg,message,ROS
From: https://www.cnblogs.com/qianzhu/p/18180927

相关文章

  • YC281A [ 20240429 CQYC省选模拟赛 T1 ] 玫瑰(rose)
    题意给定数列\(A,B,C\),每次操作,你可以花\(1\)的代价将\(A_i\)或\(B_i\)或\(C_i\)增加\(1\)。求使得三个数列每个元素排名相同的最小代价。\(n\le500\)Sol很厉害的题目。首先注意到这个最优方案只和前缀最大值有关,考虑设\(f_{i,j,k}\)表示当前状态枚举到了......
  • Windows 10 LTSC启用Microsoft Store的方法
    新建msreg.bat文件,并编辑内容如下:==========@echooff::BatchGotAdmin:-------------------------------------REM-->Checkforpermissions>nul2>&1"%SYSTEMROOT%\system32\cacls.exe""%SYSTEMROOT%\system32\config\system&q......
  • kettle从入门到精通 第五十六课 ETL之kettle Microsoft Excel Output
    1、9.4版本的kettle中有两个Excel输出,Excel输出和MicrosoftExcel输出。前者只支持xls格式,后者支持xls和xlsx两种格式,本节课主要讲解步骤MicrosoftExcel输出,如下图所示: 1)、步骤【生成记录】生成两条测试数据,每条数据里面包含id和name字段。 2)步骤【MicrosoftExcelOutput......
  • NVIDIA的ROS项目 —— Isaac ROS
    文档地址:https://nvidia-isaac-ros.github.io/index.htmlGithub地址:https://github.com/NVIDIA-ISAAC-ROS......
  • Direct3D 11(D3D11)是Microsoft DirectX API 中的一部分,Direct3D 12(D3D12)是微软开发的一
    Direct3D11编程指南-Win32apps|MicrosoftLearn什么是Direct3D12-Win32apps|MicrosoftLearnDirect3D12编程指南-Win32apps|MicrosoftLearn你可以使用以下命令来查询系统是否支持D3D12:CopyCodedxdiag运行此命令将打开DirectX诊断工具,你可以在其中......
  • A* 算法、PathFinding问题中的 allow diagonal 和 don't cross corners,以及 .map文件
    地址:https://webdocs.cs.ualberta.ca/~nathanst/papers/benchmarks.pdf关于地图文件:.map文件的格式参考:https://movingai.com/benchmarks/formats.html......
  • 题解:CF607E Cross Sum
    Problem给定\(N\)条不平行的直线\(y=\frac{k_i}{1000}x+\frac{b_i}{1000}\),\(N\)条直线总共会有\(\frac{N(N-1)}{2}\)个交点(包含在同一个位置的点,即相同位置算不同的点),找出距离原点前\(K\)近的交点的距离和。$2\leN\le5\times10^4$,\(1\leK\le\frac{N(N-1)}{2}\)......
  • ROS2官方文档阅读笔记:Managed nodes
    原文目录ManagednodesstatetransitionManagednodes这篇文章讲解了节点的生命周期蓝色方块里的被称为PrimaryState,即基本状态黄色方块里的被称为transition,即转换state在这里总结一下的节点的各个状态:1.一旦节点被实例化,则到达unconfigured的状态2.经过转换(transitio......
  • Could not load file or assembly 'Microsoft.Extensions.Configuration.Abstractions
    Category:Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddlewareEventId:1RequestId:800000f3-0003-eb00-b63f-84710c7967bbRequestPath:/SampleSpanId:|e04026eb-470f4c64c48ec282.TraceId:e04026eb-470f4c64c48ec282ParentId:Anunhandledexception......
  • 编写ROS2的组件(Component)
    0介绍0.1ROS1的Node和Nodelet在ROS1中,你可以将你的代码编写成Node或者Nodelet。Node被编译成可执行文件,Nodelet被编译成一个共享库,然后由一个container进程在运行时加载。0.2ROS2的统一API-组件在ROS2中,推荐使用组件(Component)来编写代码,类似于ROS1中的Nodelet。使用组件可......