学习参考:
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文件,同时 还要记得修改源码属性权限设定为可执行文件;

 

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