ros 版本:kinetic
自定义test
包的文件结构如下
|-- test
| |-- CMakeLists.txt
| |-- srv
| | `-- WordCount.srv
| |-- package.xml
| |-- scripts
| | `-- sevice_server.py
srv
和msg
非常相似,有关自定义msg
见链接。
WordCount.srv
#通常大写字母开头;---
上方表输入,下方表输出。
string words
---
uint32 count
向其中添加如下信息,首先是
和
;其次,需要使用那些包就添加进去,例如 std_msgs
,roscpp
。
<buildtool_depend>catkin</buildtool_depend>
<build_depend>rospy</build_depend>
<build_export_depend>rospy</build_export_depend>
<build_depend>message_generation</build_depend>
<build_depend>std_msgs</build_depend>
<build_depend>roscpp</build_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>message_runtime</exec_depend>
<exec_depend>std_msgs</exec_depend>
find_package(catkin REQUIRED COMPONENTS
rospy
roscpp
std_msgs
message_generation #放在末尾
)
添加自定义的srv文件
add_service_files(
FILES
WordCount.srv
)
## Generate added messages and services with any dependencies listed here
generate_messages(
DEPENDENCIES
std_msgs # Or other packages containing msgs
)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES test
CATKIN_DEPENDS rospy message_runtime std_msgs roscpp
# DEPENDS system_lib
)
## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
catkin_install_python(PROGRAMS
scripts/sevice_server.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
#!/usr/bin/env python
import rospy
from test.srv import WordCount, WordCountRequest, 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()
catkin build
创建service会生成三个类。本例会同时创建:WordCount, WordCountRequest, WordCountResponse 三个类。
roscore
rosrun test sevice_server.py
rosservice info word_count
rosservice call word_count 'one two three four'
返回: 4