首页 > 其他分享 >ROS服务通讯创建服务节点(service)与客户端节点(client)

ROS服务通讯创建服务节点(service)与客户端节点(client)

时间:2024-05-10 12:00:30浏览次数:16  
标签:函数 service two client add 源码 ints 节点

学习参考:
ROS/Tutorials/WritingServiceClient(python) - ROS Wiki

 

 首先需要一个工作空间,进入工作空间下的src文件夹下再创建一个功能包,进入功能包后创建scripts放置.py源码文件

 

 

服务节点源码创建格式:

老样子还是剖析源码

 首先导入包 这里的_future_包中的print_function好像是设置输出方式就是打印在cmd上面的书写格式,python版本不同有不同的书写格式

然后第二个包是按照我的理解应该是调用包内部的ADDTwoInts消息类型与AddTwoIntsResponse函数

第三个就是引入rospy用于ros对.py的源码编译了

 

先不看那个handle_add_two_ints()函数,那个按照我的理解就是充当一个回调函数的作用;

 

来看第二个函数;

def add_two_ints_server()

先是初始化节点 rospy.init_node()经典步骤,告诉ros我的节点叫什么这里节点名字叫'add_two_ints_server'

有点不知道怎么形容按照我的理解走吧,就感觉有点像话题,定义一个s充当服务端,rospy.Service第一个参数声明了一个服务的名字叫add_two_ints,传递的服务类型为AddTwoInts类型,所传送的请求会被回调进入handle_add_two_ints函数;

这里再来看看handle_add_two_ints函数

 按照上面说的理解那么传进入的参数req就是AddTwoInts类型消息;

函数的作用是在终端打印一个Returing...结果,最后再返回一个包中调用的函数;

至于rospy.spin()函数作用上一篇文章说过了。

然后剩下的就是主函数部分了也没啥好看的;

在script中放入源码后在功能包中的CMakeList.txt中一样增添一点东西,要让编译器进行编译,节点的源码记得要在属性那边设置可执行否者也是跑不起来

 保存后回到工作空间进行编译,设置环境变量后就可以使用rosrun进行运行了;

 

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

创建客户端源码格式:记得也是把源码放入scripts文件夹下

先来剖析客户端源码:

 第一步还是导入包,import*好像是导入包中所有的函数,这里的sys包是为了直接读取终端中输入的参数,rospy就是ros的python编译;

 

来看看第一个定义的函数:目的就是申请进行请求服务,推送数据

def add_two_ints_clients():

rospy.wait_for_service作用直接上图吧,我也不知道:感觉也是有点像监控一样,就是等待这个服务端出现才会继续运行

 自定义一个服务的句柄这里定义了一个名为add_two_ints的自变量,服务为‘add_two_ints’,传输的消息类型为AddTwoInts,感觉这个句柄有点像一种类的定义,相当于传入服务名,与消息类型生成一个特定的类,

接着下面resp1=add_two_ints(x,y)就相当于生成了一个对象的感觉,将x,y的值传送到名为'add_two_ints'的服务端,服务端,数据在服务端传入回调函数,回调函数处理完return结果就赋值到这个resp1变量上了;

理解的挺模糊的;

 

这是源码的大致剖析,在功能包中的scripts放完源码还要修改功能包中的CMakeList.txt文件,同时 还要记得修改源码属性权限设定为可执行文件;

 

这样就是一个客户端的创建了;

 

标签:函数,service,two,client,add,源码,ints,节点
From: https://www.cnblogs.com/qianzhu/p/18183403

相关文章

  • k8s中如何控制pod运行的节点
    在Kubernetes(K8s)中,可以通过几种方式来控制Pod运行的节点。以下是一些常用的方法:使用nodeName:在Pod的YAML定义中,你可以使用nodeName字段来指定Pod应该运行在哪个节点上。nodeName字段的值应该是目标节点的名称。如果节点不存在或者不可调度,Pod将不会被创建。使用nodeSele......
  • dremio CatalogMaintenanceService 服务简单说明
    说明此服务是从25.0开始包含的,同时在releasenote中也有说明,以下主要说明下内部实现release信息如下,具体就不翻译了,主要是添加了一个每个任务进行每个view最大保留50个历史信息Addeddailycatalogmaintenancetaskstotrimhistoryofviewstoamaximumof50......
  • 20240509xxx集群xx节点PLEG超时问题
    20240509xxx集群xx节点PLEG超时问题//20240509写在前面xxx集群xx节点又又又又又卡住了,经过一系列排查,终于解决了问题,由于这次找到了通用解法,所以在此记录下ps:国内的搜索引擎是真的shi。。搜出来的帖子都是抄来抄去的,还不解决问题,还得是google/大拇指问题起因:偷得浮生半日......
  • 原始翎风CLIENT8位 (11) fsata的学习
    本单元提供系统中的所有对话框显示MAINIMAGEFILE='Data\Prguse.wil';MAINIMAGEFILE2='Data\Prguse2.wil';MAINIMAGEFILE3='Data\Prguse3.wil';CHRSELIMAGEFILE='Data\ChrSel.wil';MINMAPIMAGEFILE='Data\mmap.wil......
  • 原始翎风CLIENT8位 (12) playscn的学习
    绘图关键的数据地图客户区,以主角的地图坐标为中心左右各9格,上下9,8格一切以主角为中心进行计算,换算。Map.m_ClientRectLeft:=g_MySelf.m_nRx-9;Top:=g_MySelf.m_nRy-9;Right:=g_MySelf.m_nRx+9;Bottom:=g_MySelf.m_nRy+8; 地图地面绘图m_MapSurface的像素大小......
  • 原始翎风CLIENT8位 (10) tscenc的学习
    IntroScn.pas嗟夫DELPHI输入法相关知识凡是窗口类都有TImeMode这是个集合其中包含有:TImeMode=(imDisable,imClose,imOpen,imDontCare,imSAlpha,imAlpha,imHira,imSKata,imKata,imChinese,imSHanguel,imHanguel);指定imDisable的话IME变得无效。既无法作使......
  • 原始翎风CLIENT8位 (13) actor的学习
    functionGetOffset(appr:integer):integer偏移大于1000退出nrace:=apprdiv10nrace0-90npos:=apprmod10npos0-9这个找的是怪物图片在文件中图片索引偏移量分为很多种,有偏移280,280是一个怪物的一组图片,例如MON1有偏移230,例如MON2有偏移360的,例如MON3appr应该......
  • 原始翎风CLIENT8位 (14) mapunit的学习
    8.MaxInt格式:constMaxInt=High(integer);说明:MaxInt常量代表Integer类型的最大可能值.MaxInt的真正的值会随着Delphi的版本不同而改变,目前它的值是21474836472g?地图好像是分块?40*40个地图坐标分为一个广场块一次读取是当前块的-1X/Y+2合计4*4块合计160*160个......
  • 原始翎风CLIENT8位 (8) CLUNIT的学习
    这个里面是绘图,有汇编,那个绘画效果的汇编看明白了,实际是先建立了一个颜色的转换索引表,颜色对应下标,数据是转换后的颜色在绘画效果中用函数功能找到混合表面的的指针,锁定它用汇编语言,将混合表面的每一个像素查找转换索引表,转换过去。因为用了MM0寄存器,这是个MMX的指令里面的,它是64......
  • 原始翎风CLIENT8位 (9) magieff的学习
    定义类型这里的魔法效果,是扔出去的魔法效果,魔法释放后的效果在施咒的动作的,如火球术的施咒效果图样是在自身的,却不在这里,由Actor单元里面实现有个m_nCurEffFrame,但是奇怪的是空间移动,是图样是在于自身这些效果,又是由本单元里面实现的。 TMagicType枚举开头mtmtReady准备?mt......