学习参考:
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文件,同时 还要记得修改源码属性权限设定为可执行文件;
这样就是一个客户端的创建了;