ROS 入门基础(七)自定义服务数据

之前在topic里面也做人了,不过就是单向的。现在在service里面也做一个有反馈的人。

先定义一下人设

因为是service,所以就不之前的文件名下写人设了。按传统工艺是在/catkin_ws/src/learning_service 这层里面新建svc文件夹

string name
uint8 age
uint8 sex

uint8 unknown = 0
uint8 male = 1
uint8 female = 2

---

string result

***有没有看到有

---

这三个短横线很重要,不是为了好看。

是为了区分,线上面的是需求request, 线下面的是反馈response。

简单来讲就是给出去的格式和收到的格式。

人设弄好了,现在就要设置环境了。Python是不用,没有讲其他的不用啊。

Package.xml

  <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>

CMakeLists.txt

find_package(catkin REQUIRED COMPONENTS
...
  message_generation
)


add_service_files( 
    FILES Person.srv
)

 generate_messages(
   DEPENDENCIES std_msgs
 )

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES learning_service
   CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs turtlesim message_runtime
#  DEPENDS system_lib
)

环境也准备好了。

那就开始Python啦。

在script里面新建person_server.py

#!/usr/bin/env python
import rospy
from learning_service.srv import Person, PersonResponse

def personCallBack(req):
	rospy.loginfo("Person: name:%s age:%d sex:%d", req.name, req.age, req.sex)
	return PersonResponse("OK")

def person_server():
	rospy.init_node('person_server')
	s = rospy.Service('/show_person', Person, personCallBack)
	print "Ready show person information."
	rospy.spin()

if __name__ == '__main__':
	person_server()

再来一个,person_client.py

#!/usr/bin/env python
import rospy
import sys
from learning_service.srv import Person, PersonRequest

def person_client():
	rospy.init_node('person_client')
	rospy.wait_for_service('/show_person')
	try:
		person_client = rospy.ServiceProxy('/show_person', Person)
		response = person_client("Tom",20,PersonRequest.male)
		return response.result
	except rospy.ServiceException, e:
		print "Service call failed %s"%e

if __name__ == '__main__':
	print "Show person result : %s" %(person_client())

两文件准备好了。

雄起。

老规矩,来到catkin_ws

catkin_make

roscore

rosrun learning_service person_server.py

rosrun learning_service person_client.py

再几个人,再来几次 rosrun learning_service person_server.py

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值