ros机器人编程实践(4.1)- 发布与使用服务

前言

在ros中定义一个服务,计算字符串中单词的数量

实现过程

1、创建服务WordCount.srv

1.1、进入basic包:

cd ~/catkin_ws/src/basic/

1.2、创建srv目录

mkdir srv

1.3、在srv目录下创建WordCount.srv文件

cd srv
vi WordCount.srv

1.4、输入如下内容:
在这里插入图片描述

2、修改CMakeLists.txt

cd ..
vi CMakeLists.txt

2.1、修改CMakeLists.txt的find_package()如下:
在这里插入图片描述
2.2、修改add_service_files()去掉注释加入WordCount.srv
如下图:
在这里插入图片描述
2.3、修改generate_messages()如下图:
在这里插入图片描述

3、修改package.xml文件加入message_generation和message_runtime如下图:

vi package.xml

在这里插入图片描述

4、返回catkin根目录编译:

cd ~/catkin_ws
catkin_make

5、编译成功后测试是否有这个服务了:

rossrv show WordCount

在这里插入图片描述

6、实现服务:

6.1、在basic包的src文件夹下创建service_server.py文件,设置权限:

cd ~/catkin_ws/src/basic/src
vi service_server.py
chmod 777 service_server.py

service_server.py

#!/usr/bin/env python

import rospy

from basic.srv import WordCount,WordCountResponse

def count_words(request):
	return WordCountResponse(len(request.words.split()))

rospy.init_node('service_server')

service = rospy.Service('word_count',WordCount,count_words)

rospy.spin()

7、打开新终端运行roscore:

roscore

8、在原来的终端返回catkin的根目录编译:

cd ~/catkin_ws
catkin_make
source devel/setup.bash
rosrun basic service_server.py

在这里插入图片描述这是已经在运行了不过没写现象。

9、用ros的服务包里面的list检查服务是否可见(打开新终端):

rosservice list

在这里插入图片描述
可以看到word_count已经在服务了。

10、用ros服务包的info来看更多信息:

rosservice info word_count

在这里插入图片描述
他告诉了我们四项参数:

  • Node:当前提供服务的节点名字。
  • URL:服务的端口号
  • Type:服务的类型
  • Args:参数

11、直接命令调用使用服务

rosservice call word_count 'one two three'

在这里插入图片描述

12、代码方式使用服务

12.1、在basic的src内创建service_client.py文件:

cd ~/catkin_ws/src/basic/src
vi service_client.py
chmod 777 service_client.py

service_client.py:

#!/usr/bin/env python

import rospy

from basic.srv import WordCount

import sys

rospy.init_node('service_client')

rospy.wait_for_service('word_count')

word_counter=rospy.ServiceProxy('word_count',WordCount)

words=' '.join(sys.argv[1:])

word_count=word_counter(words)

print words,'->',word_count.count

12.2、返回catkin根目录编译运行

cd ~/catkin_ws
catkin_make
source devel/setup.bash
rosrun basic service_client.py one two three

在这里插入图片描述
ok到此结束啦~enjoy it

发布了53 篇原创文章 · 获赞 5 · 访问量 2207

猜你喜欢

转载自blog.csdn.net/qq_37668436/article/details/104184611
今日推荐