在笔记三中,我们讲了ros消息是话题的信息,而ros服务是能够让客户端节点调用运行在服务端节点中的函数。服务端声明一个服务,并定义了一个回调函数来处理服务请求。客户端通过一个本地的代理请求调用这个服务。
ros话题也是通讯机制,那么ros服务相比于ros话题的优势在哪里呢?
由于ros话题的机制是不同步的,就跟写信一样,写信的人只管写文章,不管看的人想知道啥,而ros服务就不一样,他类似于打电话,在电话里面即可以表达自己的想法,同时对面的人也能表达想法,对于互相的想法,互相做出和回应并给出结果,这就是ros服务高级的地方。
--------------------------------------------------------------------------------------------------------------------
接下来我们进入实操环节:
首先,创建一个msg,与之前一样,设置环境变量,进入test_pkg目录下,创建一个msg目录,创建一个Num.msg文件。
source catkin_ws/devel/setup.bash
makdir msg
echo "int64 num">Num.msg
然后,我们在Num.msg文件中就能看到int64 num
然后,我们需要确保该消息文件能够被转换成c++、python的源代码,生成一个接口,yinc,我们需要查看package.xml,并加入下面两句:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
然后,打开CMakeLists.txt文件
gedit CMakeList.txt
找到find_package函数,输入message_generation
找到catkin_package函数,添加CATKIN_DEPENDS message_runtime。
找到add_service_files函数,在下面添加代码:
找到generate_message函数,在下面添加代码:
最后,对ros工作空间进行编译
cd ../../
catkin_make
可以得到下面的样子:
这样,我们就成功添加了消息接口,可以被c++和python认识啦!
------------------------------------------------------------------------------------------------------------
接下来,我们学习ros服务的使用:
首先,需要设置环境变量,进入test_pkg文件夹下,创建srv文件夹,专门用来存储srv文件。
source catkin_ws/devel/setup.bash
roscd test_pkg
mkdir srv
然后,我们使用roscp命令,roscp是一个很使用的命令,可以使用他将一个文件从一个package复制到另外一个package,这里我们将rospy_tutorials文件包中的AddTwoInts.srv文件复制到srv/AddTwoInts.srv。
roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
然后,我们增加一个接口,打开CMakeList.txt文件,找到add_service_files函数,替换成下面函数
然后,使用rossrv命令,显示AddTwoInts.txt文件内容
rossrv show test_pkg/AddTwoInts
将会看到:
至此,我们理解了ros服务的意思并且进行了实操,加深了我们的理解,并学会了实际操作过程!!!( •̀ ω •́ )y